From 1d78144746045e7a7f4c474932bf35e16ebbbd20 Mon Sep 17 00:00:00 2001 From: Jinkun Jang Date: Tue, 12 Mar 2013 15:08:50 +0900 Subject: [PATCH] Tizen 2.1 base --- ABOUT-NLS | 1068 + AUTHORS | 51 + COPYING | 674 + ChangeLog | 662 + ChangeLog-2008 | 4273 +++ GNUmakefile | 129 + INSTALL | 365 + Makefile.am | 43 + Makefile.in | 1399 + NEWS | 300 + README | 67 + THANKS | 23 + TODO | 9 + aclocal.m4 | 1184 + bootstrap | 853 + build-aux/announce-gen | 500 + build-aux/arg-nonnull.h | 28 + build-aux/c++defs.h | 253 + build-aux/compile | 143 + build-aux/config.guess | 1502 + build-aux/config.rpath | 672 + build-aux/config.sub | 1729 + build-aux/depcomp | 630 + build-aux/do-release-commit-and-tag | 139 + build-aux/gendocs.sh | 367 + build-aux/git-version-gen | 151 + build-aux/gitlog-to-changelog | 191 + build-aux/gnu-web-doc-update | 115 + build-aux/gnupload | 413 + build-aux/install-sh | 524 + build-aux/mdate-sh | 206 + build-aux/missing | 376 + build-aux/mkinstalldirs | 162 + build-aux/texinfo.tex | 9333 ++++++ build-aux/update-copyright | 266 + build-aux/useless-if-before-free | 209 + build-aux/vc-list-files | 118 + build-aux/warn-on-use.h | 111 + cfg.mk | 64 + configure | 31625 +++++++++++++++++++ configure.ac | 161 + dist-check.mk | 170 + doc/Makefile.am | 23 + doc/Makefile.in | 1309 + doc/diagmeet.note | 62 + doc/diff.info | 5305 ++++ doc/diff.texi | 4682 +++ doc/fdl.texi | 506 + doc/stamp-vti | 4 + doc/version.texi | 4 + exgettext | 113 + gnulib-tests/Makefile.am | 1 + gnulib-tests/Makefile.in | 2661 ++ gnulib-tests/argmatch.c | 279 + gnulib-tests/argmatch.h | 104 + gnulib-tests/binary-io.h | 68 + gnulib-tests/gnulib.mk | 861 + gnulib-tests/hash-pjw.c | 42 + gnulib-tests/hash-pjw.h | 25 + gnulib-tests/init.sh | 357 + .../locale/fr/LC_MESSAGES/test-quotearg.mo | Bin 0 -> 90 bytes .../locale/fr/LC_MESSAGES/test-quotearg.po | 20 + gnulib-tests/macros.h | 66 + gnulib-tests/pathmax.h | 50 + gnulib-tests/putenv.c | 134 + gnulib-tests/same-inode.h | 27 + gnulib-tests/setenv.c | 385 + gnulib-tests/signature.h | 50 + gnulib-tests/sleep.c | 77 + gnulib-tests/symlink.c | 59 + gnulib-tests/test-alloca-opt.c | 64 + gnulib-tests/test-argmatch.c | 100 + gnulib-tests/test-binary-io.c | 66 + gnulib-tests/test-binary-io.sh | 11 + gnulib-tests/test-bitrotate.c | 281 + gnulib-tests/test-btowc.c | 65 + gnulib-tests/test-btowc1.sh | 15 + gnulib-tests/test-btowc2.sh | 15 + gnulib-tests/test-c-ctype.c | 388 + gnulib-tests/test-c-stack.c | 78 + gnulib-tests/test-c-stack.sh | 21 + gnulib-tests/test-c-stack2.sh | 36 + gnulib-tests/test-c-strcase.sh | 21 + gnulib-tests/test-c-strcasecmp.c | 67 + gnulib-tests/test-c-strncasecmp.c | 81 + gnulib-tests/test-dirname.c | 193 + gnulib-tests/test-dup2.c | 195 + gnulib-tests/test-environ.c | 46 + gnulib-tests/test-errno.c | 119 + gnulib-tests/test-exclude.c | 119 + gnulib-tests/test-exclude1.sh | 45 + gnulib-tests/test-exclude2.sh | 45 + gnulib-tests/test-exclude3.sh | 45 + gnulib-tests/test-exclude4.sh | 40 + gnulib-tests/test-exclude5.sh | 43 + gnulib-tests/test-exclude6.sh | 41 + gnulib-tests/test-exclude7.sh | 44 + gnulib-tests/test-fcntl-h.c | 40 + gnulib-tests/test-fcntl.c | 348 + gnulib-tests/test-fnmatch.c | 52 + gnulib-tests/test-freopen-safer.c | 99 + gnulib-tests/test-freopen.c | 36 + gnulib-tests/test-getdtablesize.c | 36 + gnulib-tests/test-getopt.c | 101 + gnulib-tests/test-getopt.h | 1371 + gnulib-tests/test-getopt_long.h | 2127 ++ gnulib-tests/test-gettimeofday.c | 49 + gnulib-tests/test-hash.c | 261 + gnulib-tests/test-iconv-h.c | 33 + gnulib-tests/test-iconv.c | 150 + gnulib-tests/test-inttypes.c | 123 + gnulib-tests/test-langinfo.c | 94 + gnulib-tests/test-lstat.c | 62 + gnulib-tests/test-lstat.h | 118 + gnulib-tests/test-malloca.c | 61 + gnulib-tests/test-mbrtowc.c | 325 + gnulib-tests/test-mbrtowc1.sh | 15 + gnulib-tests/test-mbrtowc2.sh | 15 + gnulib-tests/test-mbrtowc3.sh | 15 + gnulib-tests/test-mbrtowc4.sh | 15 + gnulib-tests/test-mbscasecmp.c | 57 + gnulib-tests/test-mbscasecmp.sh | 15 + gnulib-tests/test-mbsinit.c | 55 + gnulib-tests/test-mbsinit.sh | 15 + gnulib-tests/test-mbsrtowcs.c | 295 + gnulib-tests/test-mbsrtowcs1.sh | 15 + gnulib-tests/test-mbsrtowcs2.sh | 15 + gnulib-tests/test-mbsrtowcs3.sh | 15 + gnulib-tests/test-mbsrtowcs4.sh | 15 + gnulib-tests/test-mbsstr1.c | 130 + gnulib-tests/test-mbsstr2.c | 143 + gnulib-tests/test-mbsstr2.sh | 15 + gnulib-tests/test-mbsstr3.c | 83 + gnulib-tests/test-mbsstr3.sh | 15 + gnulib-tests/test-memchr.c | 121 + gnulib-tests/test-nl_langinfo.c | 117 + gnulib-tests/test-nl_langinfo.sh | 17 + gnulib-tests/test-open.c | 43 + gnulib-tests/test-open.h | 89 + gnulib-tests/test-quotearg.c | 473 + gnulib-tests/test-quotearg.sh | 16 + gnulib-tests/test-setenv.c | 58 + gnulib-tests/test-sigaction.c | 118 + gnulib-tests/test-signal.c | 127 + gnulib-tests/test-sleep.c | 60 + gnulib-tests/test-stat-time.c | 265 + gnulib-tests/test-stat.c | 58 + gnulib-tests/test-stat.h | 102 + gnulib-tests/test-stdbool.c | 98 + gnulib-tests/test-stddef.c | 40 + gnulib-tests/test-stdint.c | 363 + gnulib-tests/test-stdio.c | 45 + gnulib-tests/test-stdlib.c | 45 + gnulib-tests/test-strerror.c | 59 + gnulib-tests/test-striconv.c | 182 + gnulib-tests/test-string.c | 35 + gnulib-tests/test-strings.c | 29 + gnulib-tests/test-symlink.c | 49 + gnulib-tests/test-symlink.h | 97 + gnulib-tests/test-sys_stat.c | 290 + gnulib-tests/test-sys_time.c | 31 + gnulib-tests/test-sys_wait.c | 32 + gnulib-tests/test-time.c | 37 + gnulib-tests/test-unistd.c | 58 + gnulib-tests/test-unsetenv.c | 63 + gnulib-tests/test-update-copyright.sh | 526 + gnulib-tests/test-usleep.c | 42 + gnulib-tests/test-vc-list-files-cvs.sh | 54 + gnulib-tests/test-vc-list-files-git.sh | 42 + gnulib-tests/test-version-etc.c | 35 + gnulib-tests/test-version-etc.sh | 43 + gnulib-tests/test-wchar.c | 39 + gnulib-tests/test-wcrtomb.c | 156 + gnulib-tests/test-wcrtomb.sh | 35 + gnulib-tests/test-wctype.c | 72 + gnulib-tests/test-wcwidth.c | 83 + gnulib-tests/test-xalloc-die.c | 32 + gnulib-tests/test-xalloc-die.sh | 36 + gnulib-tests/test-xstrtol.c | 68 + gnulib-tests/test-xstrtol.sh | 67 + gnulib-tests/test-xstrtoul.c | 6 + gnulib-tests/test-xstrtoumax.c | 6 + gnulib-tests/test-xstrtoumax.sh | 46 + gnulib-tests/uniwidth/test-uc_width.c | 58 + gnulib-tests/uniwidth/test-uc_width2.c | 88 + gnulib-tests/uniwidth/test-uc_width2.sh | 382 + gnulib-tests/unsetenv.c | 122 + gnulib-tests/usleep.c | 60 + gnulib-tests/wctob.c | 40 + gnulib-tests/zerosize-ptr.h | 70 + lib/Makefile.am | 23 + lib/Makefile.in | 2555 ++ lib/alloca.c | 491 + lib/alloca.in.h | 58 + lib/basename-lgpl.c | 75 + lib/basename.c | 58 + lib/bitrotate.h | 126 + lib/btowc.c | 39 + lib/c-ctype.c | 398 + lib/c-ctype.h | 297 + lib/c-stack.c | 342 + lib/c-stack.h | 44 + lib/c-strcase.h | 58 + lib/c-strcasecmp.c | 59 + lib/c-strncasecmp.c | 59 + lib/cmpbuf.c | 123 + lib/cmpbuf.h | 19 + lib/config.charset | 683 + lib/config.hin | 1582 + lib/diffseq.h | 523 + lib/dirname-lgpl.c | 86 + lib/dirname.c | 38 + lib/dirname.h | 74 + lib/dup2.c | 128 + lib/errno.in.h | 162 + lib/error.c | 366 + lib/error.h | 65 + lib/exclude.c | 556 + lib/exclude.h | 52 + lib/exitfail.c | 25 + lib/exitfail.h | 18 + lib/fcntl.c | 294 + lib/fcntl.in.h | 279 + lib/file-type.c | 71 + lib/file-type.h | 29 + lib/fnmatch.c | 356 + lib/fnmatch.in.h | 70 + lib/fnmatch_loop.c | 1217 + lib/freopen-safer.c | 103 + lib/freopen.c | 46 + lib/getdtablesize.c | 63 + lib/getopt.c | 1192 + lib/getopt.in.h | 249 + lib/getopt1.c | 170 + lib/getopt_int.h | 135 + lib/gettext.h | 282 + lib/gettime.c | 48 + lib/gettimeofday.c | 146 + lib/gnulib.mk | 2165 ++ lib/hard-locale.c | 70 + lib/hard-locale.h | 25 + lib/hash.c | 1194 + lib/hash.h | 93 + lib/iconv.in.h | 103 + lib/iconv_open-aix.gperf | 44 + lib/iconv_open-aix.h | 256 + lib/iconv_open-hpux.gperf | 56 + lib/iconv_open-hpux.h | 299 + lib/iconv_open-irix.gperf | 31 + lib/iconv_open-irix.h | 199 + lib/iconv_open-osf.gperf | 50 + lib/iconv_open-osf.h | 278 + lib/iconv_open-solaris.gperf | 30 + lib/iconv_open-solaris.h | 190 + lib/iconv_open.c | 175 + lib/ignore-value.h | 37 + lib/imaxtostr.c | 4 + lib/intprops.h | 83 + lib/inttostr.c | 54 + lib/inttostr.h | 45 + lib/inttypes.in.h | 1104 + lib/langinfo.in.h | 164 + lib/localcharset.c | 551 + lib/localcharset.h | 43 + lib/lstat.c | 91 + lib/malloc.c | 59 + lib/malloca.c | 139 + lib/malloca.h | 136 + lib/malloca.valgrind | 7 + lib/mbchar.c | 35 + lib/mbchar.h | 350 + lib/mbiter.h | 215 + lib/mbrlen.c | 32 + lib/mbrtowc.c | 386 + lib/mbscasecmp.c | 98 + lib/mbsinit.c | 47 + lib/mbslen.c | 44 + lib/mbsrtowcs-state.c | 37 + lib/mbsrtowcs.c | 136 + lib/mbsstr.c | 379 + lib/mbuiter.h | 222 + lib/memchr.c | 172 + lib/memchr.valgrind | 14 + lib/mkstemp.c | 46 + lib/mktime-internal.h | 4 + lib/mktime.c | 671 + lib/nl_langinfo.c | 260 + lib/offtostr.c | 4 + lib/open.c | 166 + lib/prepargs.c | 90 + lib/prepargs.h | 3 + lib/progname.c | 92 + lib/progname.h | 62 + lib/propername.c | 311 + lib/propername.h | 106 + lib/quote.c | 40 + lib/quote.h | 21 + lib/quotearg.c | 889 + lib/quotearg.h | 389 + lib/ref-add.sin | 30 + lib/ref-del.sin | 25 + lib/regcomp.c | 3882 +++ lib/regex.c | 74 + lib/regex.h | 678 + lib/regex_internal.c | 1747 + lib/regex_internal.h | 874 + lib/regexec.c | 4426 +++ lib/sh-quote.c | 109 + lib/sh-quote.h | 36 + lib/sig-handler.h | 44 + lib/sigaction.c | 204 + lib/signal.in.h | 329 + lib/sigprocmask.c | 329 + lib/stat-macros.h | 3 + lib/stat-time.h | 187 + lib/stat.c | 104 + lib/stdarg.in.h | 37 + lib/stdbool.in.h | 124 + lib/stddef.in.h | 88 + lib/stdint.in.h | 570 + lib/stdio--.h | 41 + lib/stdio-safer.h | 36 + lib/stdio-write.c | 150 + lib/stdio.in.h | 1059 + lib/stdlib.in.h | 687 + lib/str-kmp.h | 152 + lib/strcasecmp.c | 65 + lib/streq.h | 178 + lib/strerror.c | 347 + lib/strftime.c | 1465 + lib/strftime.h | 34 + lib/striconv.c | 459 + lib/striconv.h | 78 + lib/string.in.h | 931 + lib/strings.in.h | 95 + lib/stripslash.c | 45 + lib/strncasecmp.c | 65 + lib/strndup.c | 39 + lib/strnlen.c | 33 + lib/strnlen1.c | 35 + lib/strnlen1.h | 39 + lib/strptime.c | 1141 + lib/strtoimax.c | 75 + lib/strtol.c | 434 + lib/strtoll.c | 33 + lib/strtoul.c | 19 + lib/strtoull.c | 27 + lib/strtoumax.c | 2 + lib/sys_stat.in.h | 642 + lib/sys_time.in.h | 97 + lib/sys_wait.in.h | 108 + lib/tempname.c | 311 + lib/tempname.h | 50 + lib/time.in.h | 221 + lib/time_r.c | 47 + lib/timegm.c | 41 + lib/timespec.h | 39 + lib/trim.c | 133 + lib/trim.h | 33 + lib/uinttostr.c | 4 + lib/umaxtostr.c | 4 + lib/unistd.in.h | 1294 + lib/unitypes.h | 28 + lib/uniwidth.h | 67 + lib/uniwidth/cjk.h | 39 + lib/uniwidth/width.c | 361 + lib/unlocked-io.h | 136 + lib/verify.h | 140 + lib/version-etc-fsf.c | 30 + lib/version-etc.c | 258 + lib/version-etc.h | 78 + lib/wchar.in.h | 430 + lib/wcrtomb.c | 53 + lib/wctype.in.h | 379 + lib/wcwidth.c | 50 + lib/xalloc-die.c | 41 + lib/xalloc.h | 281 + lib/xfreopen.c | 42 + lib/xfreopen.h | 2 + lib/xmalloc.c | 118 + lib/xstriconv.c | 62 + lib/xstriconv.h | 78 + lib/xstrndup.c | 36 + lib/xstrndup.h | 23 + lib/xstrtol-error.c | 98 + lib/xstrtol.c | 228 + lib/xstrtol.h | 83 + lib/xstrtoul.c | 6 + lib/xstrtoumax.c | 6 + m4/00gnulib.m4 | 30 + m4/alloca.m4 | 47 + m4/argmatch.m4 | 10 + m4/btowc.m4 | 107 + m4/c-stack.m4 | 349 + m4/clock_time.m4 | 31 + m4/codeset.m4 | 21 + m4/config-h.m4 | 13 + m4/dirname.m4 | 26 + m4/dos.m4 | 71 + m4/double-slash-root.m4 | 38 + m4/dup2.m4 | 58 + m4/eealloc.m4 | 32 + m4/environ.m4 | 36 + m4/errno_h.m4 | 115 + m4/error.m4 | 22 + m4/exclude.m4 | 11 + m4/extensions.m4 | 118 + m4/fcntl-o.m4 | 81 + m4/fcntl.m4 | 83 + m4/fcntl_h.m4 | 43 + m4/file-type.m4 | 10 + m4/fnmatch.m4 | 121 + m4/freopen.m4 | 24 + m4/getdtablesize.m4 | 15 + m4/getopt.m4 | 306 + m4/gettext_gl.m4 | 381 + m4/gettime.m4 | 15 + m4/gettimeofday.m4 | 120 + m4/glibc21_gl.m4 | 30 + m4/gnu-make.m4 | 19 + m4/gnulib-common.m4 | 201 + m4/gnulib-comp.m4 | 1309 + m4/hard-locale.m4 | 12 + m4/hash.m4 | 14 + m4/iconv.m4 | 199 + m4/iconv_h.m4 | 37 + m4/iconv_open.m4 | 240 + m4/include_next.m4 | 187 + m4/inline.m4 | 40 + m4/intlmacosx.m4 | 51 + m4/inttostr.m4 | 37 + m4/inttypes-pri.m4 | 36 + m4/inttypes.m4 | 302 + m4/langinfo_h.m4 | 77 + m4/lib-ld_gl.m4 | 110 + m4/lib-link.m4 | 774 + m4/lib-prefix_gl.m4 | 224 + m4/libsigsegv.m4 | 16 + m4/localcharset.m4 | 17 + m4/locale-fr.m4 | 185 + m4/locale-ja.m4 | 107 + m4/locale-tr.m4 | 97 + m4/locale-zh.m4 | 92 + m4/longlong_gl.m4 | 106 + m4/lstat.m4 | 28 + m4/malloc.m4 | 41 + m4/malloca.m4 | 15 + m4/manywarnings.m4 | 108 + m4/mbchar.m4 | 14 + m4/mbiter.m4 | 18 + m4/mbrlen.m4 | 197 + m4/mbrtowc.m4 | 385 + m4/mbsinit.m4 | 32 + m4/mbslen.m4 | 16 + m4/mbsrtowcs.m4 | 122 + m4/mbstate_t.m4 | 34 + m4/memchr.m4 | 85 + m4/mkstemp.m4 | 62 + m4/mktime.m4 | 234 + m4/mmap-anon.m4 | 59 + m4/mode_t.m4 | 26 + m4/multiarch.m4 | 65 + m4/nl_langinfo.m4 | 25 + m4/nls.m4 | 32 + m4/onceonly.m4 | 91 + m4/open.m4 | 74 + m4/pathmax.m4 | 13 + m4/po_gl.m4 | 449 + m4/progtest.m4 | 92 + m4/putenv.m4 | 41 + m4/quote.m4 | 14 + m4/quotearg.m4 | 10 + m4/regex.m4 | 230 + m4/setenv.m4 | 111 + m4/sigaction.m4 | 45 + m4/signal_h.m4 | 49 + m4/signalblocking.m4 | 42 + m4/sleep.m4 | 49 + m4/ssize_t.m4 | 21 + m4/stat-time.m4 | 85 + m4/stat.m4 | 63 + m4/stdarg.m4 | 67 + m4/stdbool.m4 | 115 + m4/stddef_h.m4 | 45 + m4/stdint.m4 | 472 + m4/stdio-safer.m4 | 25 + m4/stdio_h.m4 | 158 + m4/stdlib_h.m4 | 110 + m4/strcase.m4 | 44 + m4/strerror.m4 | 68 + m4/strftime.m4 | 32 + m4/string_h.m4 | 112 + m4/strings_h.m4 | 39 + m4/strndup.m4 | 49 + m4/strnlen.m4 | 32 + m4/strptime.m4 | 24 + m4/strtoimax.m4 | 35 + m4/strtol.m4 | 10 + m4/strtoll.m4 | 26 + m4/strtoul.m4 | 10 + m4/strtoull.m4 | 26 + m4/strtoumax.m4 | 35 + m4/symlink.m4 | 38 + m4/sys_stat_h.m4 | 82 + m4/sys_time_h.m4 | 72 + m4/sys_wait_h.m4 | 25 + m4/tempname.m4 | 22 + m4/time_h.m4 | 92 + m4/time_r.m4 | 54 + m4/timegm.m4 | 40 + m4/timespec.m4 | 15 + m4/tm_gmtoff.m4 | 14 + m4/unistd_h.m4 | 155 + m4/unlocked-io.m4 | 41 + m4/usleep.m4 | 37 + m4/vararrays.m4 | 35 + m4/version-etc.m4 | 33 + m4/warn-on-use.m4 | 45 + m4/warnings.m4 | 36 + m4/wchar_h.m4 | 152 + m4/wchar_t.m4 | 20 + m4/wcrtomb.m4 | 93 + m4/wctob.m4 | 114 + m4/wctype_h.m4 | 76 + m4/wcwidth.m4 | 94 + m4/wint_t.m4 | 28 + m4/xalloc.m4 | 25 + m4/xstrndup.m4 | 15 + m4/xstrtol.m4 | 12 + maint.mk | 1149 + man/Makefile.am | 32 + man/Makefile.in | 1086 + man/cmp.1 | 66 + man/diff.1 | 233 + man/diff3.1 | 81 + man/sdiff.1 | 93 + ms/Makefile.am | 18 + ms/Makefile.in | 993 + ms/README | 64 + ms/config.bat | 259 + ms/config.sed | 85 + ms/config.site | 79 + packaging/diffutils-cmp-s-empty.patch | 19 + packaging/diffutils.changes | 2 + packaging/diffutils.manifest | 5 + packaging/diffutils.spec | 59 + po/LINGUAS | 30 + po/Makefile.in.in | 431 + po/Makevars | 54 + po/POTFILES.in | 35 + po/Rules-quot | 47 + po/boldquot.sed | 10 + po/ca.gmo | Bin 0 -> 22706 bytes po/ca.po | 1242 + po/cs.gmo | Bin 0 -> 26905 bytes po/cs.po | 1204 + po/da.gmo | Bin 0 -> 19556 bytes po/da.po | 1217 + po/de.gmo | Bin 0 -> 20511 bytes po/de.po | 1243 + po/diffutils.pot | 1088 + po/el.gmo | Bin 0 -> 29085 bytes po/el.po | 1245 + po/en@boldquot.header | 25 + po/en@quot.header | 22 + po/eo.gmo | Bin 0 -> 21388 bytes po/eo.po | 1214 + po/es.gmo | Bin 0 -> 27830 bytes po/es.po | 1472 + po/fi.gmo | Bin 0 -> 22408 bytes po/fi.po | 1263 + po/fr.gmo | Bin 0 -> 23727 bytes po/fr.po | 1356 + po/ga.gmo | Bin 0 -> 22264 bytes po/ga.po | 1232 + po/gl.gmo | Bin 0 -> 20936 bytes po/gl.po | 1282 + po/he.gmo | Bin 0 -> 20327 bytes po/he.po | 1193 + po/hu.gmo | Bin 0 -> 22012 bytes po/hu.po | 1237 + po/id.gmo | Bin 0 -> 25416 bytes po/id.po | 1245 + po/insert-header.sin | 23 + po/it.gmo | Bin 0 -> 23429 bytes po/it.po | 1362 + po/ja.gmo | Bin 0 -> 18273 bytes po/ja.po | 1184 + po/lv.gmo | Bin 0 -> 22223 bytes po/lv.po | 1235 + po/ms.gmo | Bin 0 -> 21581 bytes po/ms.po | 1229 + po/nl.gmo | Bin 0 -> 27752 bytes po/nl.po | 1252 + po/pl.gmo | Bin 0 -> 26546 bytes po/pl.po | 1239 + po/pt_BR.gmo | Bin 0 -> 23168 bytes po/pt_BR.po | 1280 + po/quot.sed | 6 + po/remove-potcdate.sin | 19 + po/ro.gmo | Bin 0 -> 20868 bytes po/ro.po | 1242 + po/ru.gmo | Bin 0 -> 22536 bytes po/ru.po | 1237 + po/sr.gmo | Bin 0 -> 26644 bytes po/sr.po | 1232 + po/stamp-po | 1 + po/sv.gmo | Bin 0 -> 21015 bytes po/sv.po | 1216 + po/tr.gmo | Bin 0 -> 23364 bytes po/tr.po | 1278 + po/uk.gmo | Bin 0 -> 28317 bytes po/uk.po | 1228 + po/vi.gmo | Bin 0 -> 29317 bytes po/vi.po | 1240 + po/zh_CN.gmo | Bin 0 -> 21848 bytes po/zh_CN.po | 1194 + po/zh_TW.gmo | Bin 0 -> 22455 bytes po/zh_TW.po | 1237 + src/Makefile.am | 55 + src/Makefile.in | 1222 + src/analyze.c | 723 + src/cmp.c | 685 + src/context.c | 493 + src/diff.c | 1330 + src/diff.h | 373 + src/diff3.c | 1747 + src/dir.c | 283 + src/ed.c | 175 + src/ifdef.c | 430 + src/io.c | 845 + src/normal.c | 69 + src/sdiff.c | 1236 + src/side.c | 320 + src/system.h | 228 + src/util.c | 788 + tests/Makefile.am | 61 + tests/Makefile.in | 1302 + tests/basic | 43 + tests/binary | 18 + tests/function-line-vs-leading-space | 66 + tests/help-version | 270 + tests/init.sh | 357 + tests/label-vs-func | 32 + tests/no-newline-at-eof | 54 + tests/stdin | 25 + tests/t-local.sh | 0 647 files changed, 217342 insertions(+) create mode 100644 ABOUT-NLS create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 ChangeLog-2008 create mode 100644 GNUmakefile create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 README create mode 100644 THANKS create mode 100644 TODO create mode 100644 aclocal.m4 create mode 100755 bootstrap create mode 100755 build-aux/announce-gen create mode 100644 build-aux/arg-nonnull.h create mode 100644 build-aux/c++defs.h create mode 100755 build-aux/compile create mode 100755 build-aux/config.guess create mode 100755 build-aux/config.rpath create mode 100755 build-aux/config.sub create mode 100755 build-aux/depcomp create mode 100755 build-aux/do-release-commit-and-tag create mode 100755 build-aux/gendocs.sh create mode 100755 build-aux/git-version-gen create mode 100755 build-aux/gitlog-to-changelog create mode 100755 build-aux/gnu-web-doc-update create mode 100755 build-aux/gnupload create mode 100755 build-aux/install-sh create mode 100755 build-aux/mdate-sh create mode 100755 build-aux/missing create mode 100755 build-aux/mkinstalldirs create mode 100644 build-aux/texinfo.tex create mode 100755 build-aux/update-copyright create mode 100755 build-aux/useless-if-before-free create mode 100755 build-aux/vc-list-files create mode 100644 build-aux/warn-on-use.h create mode 100644 cfg.mk create mode 100755 configure create mode 100644 configure.ac create mode 100644 dist-check.mk create mode 100644 doc/Makefile.am create mode 100644 doc/Makefile.in create mode 100644 doc/diagmeet.note create mode 100644 doc/diff.info create mode 100644 doc/diff.texi create mode 100644 doc/fdl.texi create mode 100644 doc/stamp-vti create mode 100644 doc/version.texi create mode 100755 exgettext create mode 100644 gnulib-tests/Makefile.am create mode 100644 gnulib-tests/Makefile.in create mode 100644 gnulib-tests/argmatch.c create mode 100644 gnulib-tests/argmatch.h create mode 100644 gnulib-tests/binary-io.h create mode 100644 gnulib-tests/gnulib.mk create mode 100644 gnulib-tests/hash-pjw.c create mode 100644 gnulib-tests/hash-pjw.h create mode 100644 gnulib-tests/init.sh create mode 100644 gnulib-tests/locale/fr/LC_MESSAGES/test-quotearg.mo create mode 100644 gnulib-tests/locale/fr/LC_MESSAGES/test-quotearg.po create mode 100644 gnulib-tests/macros.h create mode 100644 gnulib-tests/pathmax.h create mode 100644 gnulib-tests/putenv.c create mode 100644 gnulib-tests/same-inode.h create mode 100644 gnulib-tests/setenv.c create mode 100644 gnulib-tests/signature.h create mode 100644 gnulib-tests/sleep.c create mode 100644 gnulib-tests/symlink.c create mode 100644 gnulib-tests/test-alloca-opt.c create mode 100644 gnulib-tests/test-argmatch.c create mode 100644 gnulib-tests/test-binary-io.c create mode 100755 gnulib-tests/test-binary-io.sh create mode 100644 gnulib-tests/test-bitrotate.c create mode 100644 gnulib-tests/test-btowc.c create mode 100755 gnulib-tests/test-btowc1.sh create mode 100755 gnulib-tests/test-btowc2.sh create mode 100644 gnulib-tests/test-c-ctype.c create mode 100644 gnulib-tests/test-c-stack.c create mode 100755 gnulib-tests/test-c-stack.sh create mode 100755 gnulib-tests/test-c-stack2.sh create mode 100755 gnulib-tests/test-c-strcase.sh create mode 100644 gnulib-tests/test-c-strcasecmp.c create mode 100644 gnulib-tests/test-c-strncasecmp.c create mode 100644 gnulib-tests/test-dirname.c create mode 100644 gnulib-tests/test-dup2.c create mode 100644 gnulib-tests/test-environ.c create mode 100644 gnulib-tests/test-errno.c create mode 100644 gnulib-tests/test-exclude.c create mode 100755 gnulib-tests/test-exclude1.sh create mode 100755 gnulib-tests/test-exclude2.sh create mode 100755 gnulib-tests/test-exclude3.sh create mode 100755 gnulib-tests/test-exclude4.sh create mode 100755 gnulib-tests/test-exclude5.sh create mode 100755 gnulib-tests/test-exclude6.sh create mode 100755 gnulib-tests/test-exclude7.sh create mode 100644 gnulib-tests/test-fcntl-h.c create mode 100644 gnulib-tests/test-fcntl.c create mode 100644 gnulib-tests/test-fnmatch.c create mode 100644 gnulib-tests/test-freopen-safer.c create mode 100644 gnulib-tests/test-freopen.c create mode 100644 gnulib-tests/test-getdtablesize.c create mode 100644 gnulib-tests/test-getopt.c create mode 100644 gnulib-tests/test-getopt.h create mode 100644 gnulib-tests/test-getopt_long.h create mode 100644 gnulib-tests/test-gettimeofday.c create mode 100644 gnulib-tests/test-hash.c create mode 100644 gnulib-tests/test-iconv-h.c create mode 100644 gnulib-tests/test-iconv.c create mode 100644 gnulib-tests/test-inttypes.c create mode 100644 gnulib-tests/test-langinfo.c create mode 100644 gnulib-tests/test-lstat.c create mode 100644 gnulib-tests/test-lstat.h create mode 100644 gnulib-tests/test-malloca.c create mode 100644 gnulib-tests/test-mbrtowc.c create mode 100755 gnulib-tests/test-mbrtowc1.sh create mode 100755 gnulib-tests/test-mbrtowc2.sh create mode 100755 gnulib-tests/test-mbrtowc3.sh create mode 100755 gnulib-tests/test-mbrtowc4.sh create mode 100644 gnulib-tests/test-mbscasecmp.c create mode 100755 gnulib-tests/test-mbscasecmp.sh create mode 100644 gnulib-tests/test-mbsinit.c create mode 100755 gnulib-tests/test-mbsinit.sh create mode 100644 gnulib-tests/test-mbsrtowcs.c create mode 100755 gnulib-tests/test-mbsrtowcs1.sh create mode 100755 gnulib-tests/test-mbsrtowcs2.sh create mode 100755 gnulib-tests/test-mbsrtowcs3.sh create mode 100755 gnulib-tests/test-mbsrtowcs4.sh create mode 100644 gnulib-tests/test-mbsstr1.c create mode 100644 gnulib-tests/test-mbsstr2.c create mode 100755 gnulib-tests/test-mbsstr2.sh create mode 100644 gnulib-tests/test-mbsstr3.c create mode 100755 gnulib-tests/test-mbsstr3.sh create mode 100644 gnulib-tests/test-memchr.c create mode 100644 gnulib-tests/test-nl_langinfo.c create mode 100755 gnulib-tests/test-nl_langinfo.sh create mode 100644 gnulib-tests/test-open.c create mode 100644 gnulib-tests/test-open.h create mode 100644 gnulib-tests/test-quotearg.c create mode 100755 gnulib-tests/test-quotearg.sh create mode 100644 gnulib-tests/test-setenv.c create mode 100644 gnulib-tests/test-sigaction.c create mode 100644 gnulib-tests/test-signal.c create mode 100644 gnulib-tests/test-sleep.c create mode 100644 gnulib-tests/test-stat-time.c create mode 100644 gnulib-tests/test-stat.c create mode 100644 gnulib-tests/test-stat.h create mode 100644 gnulib-tests/test-stdbool.c create mode 100644 gnulib-tests/test-stddef.c create mode 100644 gnulib-tests/test-stdint.c create mode 100644 gnulib-tests/test-stdio.c create mode 100644 gnulib-tests/test-stdlib.c create mode 100644 gnulib-tests/test-strerror.c create mode 100644 gnulib-tests/test-striconv.c create mode 100644 gnulib-tests/test-string.c create mode 100644 gnulib-tests/test-strings.c create mode 100644 gnulib-tests/test-symlink.c create mode 100644 gnulib-tests/test-symlink.h create mode 100644 gnulib-tests/test-sys_stat.c create mode 100644 gnulib-tests/test-sys_time.c create mode 100644 gnulib-tests/test-sys_wait.c create mode 100644 gnulib-tests/test-time.c create mode 100644 gnulib-tests/test-unistd.c create mode 100644 gnulib-tests/test-unsetenv.c create mode 100755 gnulib-tests/test-update-copyright.sh create mode 100644 gnulib-tests/test-usleep.c create mode 100755 gnulib-tests/test-vc-list-files-cvs.sh create mode 100755 gnulib-tests/test-vc-list-files-git.sh create mode 100644 gnulib-tests/test-version-etc.c create mode 100755 gnulib-tests/test-version-etc.sh create mode 100644 gnulib-tests/test-wchar.c create mode 100644 gnulib-tests/test-wcrtomb.c create mode 100755 gnulib-tests/test-wcrtomb.sh create mode 100644 gnulib-tests/test-wctype.c create mode 100644 gnulib-tests/test-wcwidth.c create mode 100644 gnulib-tests/test-xalloc-die.c create mode 100755 gnulib-tests/test-xalloc-die.sh create mode 100644 gnulib-tests/test-xstrtol.c create mode 100755 gnulib-tests/test-xstrtol.sh create mode 100644 gnulib-tests/test-xstrtoul.c create mode 100644 gnulib-tests/test-xstrtoumax.c create mode 100755 gnulib-tests/test-xstrtoumax.sh create mode 100644 gnulib-tests/uniwidth/test-uc_width.c create mode 100644 gnulib-tests/uniwidth/test-uc_width2.c create mode 100755 gnulib-tests/uniwidth/test-uc_width2.sh create mode 100644 gnulib-tests/unsetenv.c create mode 100644 gnulib-tests/usleep.c create mode 100644 gnulib-tests/wctob.c create mode 100644 gnulib-tests/zerosize-ptr.h create mode 100644 lib/Makefile.am create mode 100644 lib/Makefile.in create mode 100644 lib/alloca.c create mode 100644 lib/alloca.in.h create mode 100644 lib/basename-lgpl.c create mode 100644 lib/basename.c create mode 100644 lib/bitrotate.h create mode 100644 lib/btowc.c create mode 100644 lib/c-ctype.c create mode 100644 lib/c-ctype.h create mode 100644 lib/c-stack.c create mode 100644 lib/c-stack.h create mode 100644 lib/c-strcase.h create mode 100644 lib/c-strcasecmp.c create mode 100644 lib/c-strncasecmp.c create mode 100644 lib/cmpbuf.c create mode 100644 lib/cmpbuf.h create mode 100644 lib/config.charset create mode 100644 lib/config.hin create mode 100644 lib/diffseq.h create mode 100644 lib/dirname-lgpl.c create mode 100644 lib/dirname.c create mode 100644 lib/dirname.h create mode 100644 lib/dup2.c create mode 100644 lib/errno.in.h create mode 100644 lib/error.c create mode 100644 lib/error.h create mode 100644 lib/exclude.c create mode 100644 lib/exclude.h create mode 100644 lib/exitfail.c create mode 100644 lib/exitfail.h create mode 100644 lib/fcntl.c create mode 100644 lib/fcntl.in.h create mode 100644 lib/file-type.c create mode 100644 lib/file-type.h create mode 100644 lib/fnmatch.c create mode 100644 lib/fnmatch.in.h create mode 100644 lib/fnmatch_loop.c create mode 100644 lib/freopen-safer.c create mode 100644 lib/freopen.c create mode 100644 lib/getdtablesize.c create mode 100644 lib/getopt.c create mode 100644 lib/getopt.in.h create mode 100644 lib/getopt1.c create mode 100644 lib/getopt_int.h create mode 100644 lib/gettext.h create mode 100644 lib/gettime.c create mode 100644 lib/gettimeofday.c create mode 100644 lib/gnulib.mk create mode 100644 lib/hard-locale.c create mode 100644 lib/hard-locale.h create mode 100644 lib/hash.c create mode 100644 lib/hash.h create mode 100644 lib/iconv.in.h create mode 100644 lib/iconv_open-aix.gperf create mode 100644 lib/iconv_open-aix.h create mode 100644 lib/iconv_open-hpux.gperf create mode 100644 lib/iconv_open-hpux.h create mode 100644 lib/iconv_open-irix.gperf create mode 100644 lib/iconv_open-irix.h create mode 100644 lib/iconv_open-osf.gperf create mode 100644 lib/iconv_open-osf.h create mode 100644 lib/iconv_open-solaris.gperf create mode 100644 lib/iconv_open-solaris.h create mode 100644 lib/iconv_open.c create mode 100644 lib/ignore-value.h create mode 100644 lib/imaxtostr.c create mode 100644 lib/intprops.h create mode 100644 lib/inttostr.c create mode 100644 lib/inttostr.h create mode 100644 lib/inttypes.in.h create mode 100644 lib/langinfo.in.h create mode 100644 lib/localcharset.c create mode 100644 lib/localcharset.h create mode 100644 lib/lstat.c create mode 100644 lib/malloc.c create mode 100644 lib/malloca.c create mode 100644 lib/malloca.h create mode 100644 lib/malloca.valgrind create mode 100644 lib/mbchar.c create mode 100644 lib/mbchar.h create mode 100644 lib/mbiter.h create mode 100644 lib/mbrlen.c create mode 100644 lib/mbrtowc.c create mode 100644 lib/mbscasecmp.c create mode 100644 lib/mbsinit.c create mode 100644 lib/mbslen.c create mode 100644 lib/mbsrtowcs-state.c create mode 100644 lib/mbsrtowcs.c create mode 100644 lib/mbsstr.c create mode 100644 lib/mbuiter.h create mode 100644 lib/memchr.c create mode 100644 lib/memchr.valgrind create mode 100644 lib/mkstemp.c create mode 100644 lib/mktime-internal.h create mode 100644 lib/mktime.c create mode 100644 lib/nl_langinfo.c create mode 100644 lib/offtostr.c create mode 100644 lib/open.c create mode 100644 lib/prepargs.c create mode 100644 lib/prepargs.h create mode 100644 lib/progname.c create mode 100644 lib/progname.h create mode 100644 lib/propername.c create mode 100644 lib/propername.h create mode 100644 lib/quote.c create mode 100644 lib/quote.h create mode 100644 lib/quotearg.c create mode 100644 lib/quotearg.h create mode 100644 lib/ref-add.sin create mode 100644 lib/ref-del.sin create mode 100644 lib/regcomp.c create mode 100644 lib/regex.c create mode 100644 lib/regex.h create mode 100644 lib/regex_internal.c create mode 100644 lib/regex_internal.h create mode 100644 lib/regexec.c create mode 100644 lib/sh-quote.c create mode 100644 lib/sh-quote.h create mode 100644 lib/sig-handler.h create mode 100644 lib/sigaction.c create mode 100644 lib/signal.in.h create mode 100644 lib/sigprocmask.c create mode 100644 lib/stat-macros.h create mode 100644 lib/stat-time.h create mode 100644 lib/stat.c create mode 100644 lib/stdarg.in.h create mode 100644 lib/stdbool.in.h create mode 100644 lib/stddef.in.h create mode 100644 lib/stdint.in.h create mode 100644 lib/stdio--.h create mode 100644 lib/stdio-safer.h create mode 100644 lib/stdio-write.c create mode 100644 lib/stdio.in.h create mode 100644 lib/stdlib.in.h create mode 100644 lib/str-kmp.h create mode 100644 lib/strcasecmp.c create mode 100644 lib/streq.h create mode 100644 lib/strerror.c create mode 100644 lib/strftime.c create mode 100644 lib/strftime.h create mode 100644 lib/striconv.c create mode 100644 lib/striconv.h create mode 100644 lib/string.in.h create mode 100644 lib/strings.in.h create mode 100644 lib/stripslash.c create mode 100644 lib/strncasecmp.c create mode 100644 lib/strndup.c create mode 100644 lib/strnlen.c create mode 100644 lib/strnlen1.c create mode 100644 lib/strnlen1.h create mode 100644 lib/strptime.c create mode 100644 lib/strtoimax.c create mode 100644 lib/strtol.c create mode 100644 lib/strtoll.c create mode 100644 lib/strtoul.c create mode 100644 lib/strtoull.c create mode 100644 lib/strtoumax.c create mode 100644 lib/sys_stat.in.h create mode 100644 lib/sys_time.in.h create mode 100644 lib/sys_wait.in.h create mode 100644 lib/tempname.c create mode 100644 lib/tempname.h create mode 100644 lib/time.in.h create mode 100644 lib/time_r.c create mode 100644 lib/timegm.c create mode 100644 lib/timespec.h create mode 100644 lib/trim.c create mode 100644 lib/trim.h create mode 100644 lib/uinttostr.c create mode 100644 lib/umaxtostr.c create mode 100644 lib/unistd.in.h create mode 100644 lib/unitypes.h create mode 100644 lib/uniwidth.h create mode 100644 lib/uniwidth/cjk.h create mode 100644 lib/uniwidth/width.c create mode 100644 lib/unlocked-io.h create mode 100644 lib/verify.h create mode 100644 lib/version-etc-fsf.c create mode 100644 lib/version-etc.c create mode 100644 lib/version-etc.h create mode 100644 lib/wchar.in.h create mode 100644 lib/wcrtomb.c create mode 100644 lib/wctype.in.h create mode 100644 lib/wcwidth.c create mode 100644 lib/xalloc-die.c create mode 100644 lib/xalloc.h create mode 100644 lib/xfreopen.c create mode 100644 lib/xfreopen.h create mode 100644 lib/xmalloc.c create mode 100644 lib/xstriconv.c create mode 100644 lib/xstriconv.h create mode 100644 lib/xstrndup.c create mode 100644 lib/xstrndup.h create mode 100644 lib/xstrtol-error.c create mode 100644 lib/xstrtol.c create mode 100644 lib/xstrtol.h create mode 100644 lib/xstrtoul.c create mode 100644 lib/xstrtoumax.c create mode 100644 m4/00gnulib.m4 create mode 100644 m4/alloca.m4 create mode 100644 m4/argmatch.m4 create mode 100644 m4/btowc.m4 create mode 100644 m4/c-stack.m4 create mode 100644 m4/clock_time.m4 create mode 100644 m4/codeset.m4 create mode 100644 m4/config-h.m4 create mode 100644 m4/dirname.m4 create mode 100644 m4/dos.m4 create mode 100644 m4/double-slash-root.m4 create mode 100644 m4/dup2.m4 create mode 100644 m4/eealloc.m4 create mode 100644 m4/environ.m4 create mode 100644 m4/errno_h.m4 create mode 100644 m4/error.m4 create mode 100644 m4/exclude.m4 create mode 100644 m4/extensions.m4 create mode 100644 m4/fcntl-o.m4 create mode 100644 m4/fcntl.m4 create mode 100644 m4/fcntl_h.m4 create mode 100644 m4/file-type.m4 create mode 100644 m4/fnmatch.m4 create mode 100644 m4/freopen.m4 create mode 100644 m4/getdtablesize.m4 create mode 100644 m4/getopt.m4 create mode 100644 m4/gettext_gl.m4 create mode 100644 m4/gettime.m4 create mode 100644 m4/gettimeofday.m4 create mode 100644 m4/glibc21_gl.m4 create mode 100644 m4/gnu-make.m4 create mode 100644 m4/gnulib-common.m4 create mode 100644 m4/gnulib-comp.m4 create mode 100644 m4/hard-locale.m4 create mode 100644 m4/hash.m4 create mode 100644 m4/iconv.m4 create mode 100644 m4/iconv_h.m4 create mode 100644 m4/iconv_open.m4 create mode 100644 m4/include_next.m4 create mode 100644 m4/inline.m4 create mode 100644 m4/intlmacosx.m4 create mode 100644 m4/inttostr.m4 create mode 100644 m4/inttypes-pri.m4 create mode 100644 m4/inttypes.m4 create mode 100644 m4/langinfo_h.m4 create mode 100644 m4/lib-ld_gl.m4 create mode 100644 m4/lib-link.m4 create mode 100644 m4/lib-prefix_gl.m4 create mode 100644 m4/libsigsegv.m4 create mode 100644 m4/localcharset.m4 create mode 100644 m4/locale-fr.m4 create mode 100644 m4/locale-ja.m4 create mode 100644 m4/locale-tr.m4 create mode 100644 m4/locale-zh.m4 create mode 100644 m4/longlong_gl.m4 create mode 100644 m4/lstat.m4 create mode 100644 m4/malloc.m4 create mode 100644 m4/malloca.m4 create mode 100644 m4/manywarnings.m4 create mode 100644 m4/mbchar.m4 create mode 100644 m4/mbiter.m4 create mode 100644 m4/mbrlen.m4 create mode 100644 m4/mbrtowc.m4 create mode 100644 m4/mbsinit.m4 create mode 100644 m4/mbslen.m4 create mode 100644 m4/mbsrtowcs.m4 create mode 100644 m4/mbstate_t.m4 create mode 100644 m4/memchr.m4 create mode 100644 m4/mkstemp.m4 create mode 100644 m4/mktime.m4 create mode 100644 m4/mmap-anon.m4 create mode 100644 m4/mode_t.m4 create mode 100644 m4/multiarch.m4 create mode 100644 m4/nl_langinfo.m4 create mode 100644 m4/nls.m4 create mode 100644 m4/onceonly.m4 create mode 100644 m4/open.m4 create mode 100644 m4/pathmax.m4 create mode 100644 m4/po_gl.m4 create mode 100644 m4/progtest.m4 create mode 100644 m4/putenv.m4 create mode 100644 m4/quote.m4 create mode 100644 m4/quotearg.m4 create mode 100644 m4/regex.m4 create mode 100644 m4/setenv.m4 create mode 100644 m4/sigaction.m4 create mode 100644 m4/signal_h.m4 create mode 100644 m4/signalblocking.m4 create mode 100644 m4/sleep.m4 create mode 100644 m4/ssize_t.m4 create mode 100644 m4/stat-time.m4 create mode 100644 m4/stat.m4 create mode 100644 m4/stdarg.m4 create mode 100644 m4/stdbool.m4 create mode 100644 m4/stddef_h.m4 create mode 100644 m4/stdint.m4 create mode 100644 m4/stdio-safer.m4 create mode 100644 m4/stdio_h.m4 create mode 100644 m4/stdlib_h.m4 create mode 100644 m4/strcase.m4 create mode 100644 m4/strerror.m4 create mode 100644 m4/strftime.m4 create mode 100644 m4/string_h.m4 create mode 100644 m4/strings_h.m4 create mode 100644 m4/strndup.m4 create mode 100644 m4/strnlen.m4 create mode 100644 m4/strptime.m4 create mode 100644 m4/strtoimax.m4 create mode 100644 m4/strtol.m4 create mode 100644 m4/strtoll.m4 create mode 100644 m4/strtoul.m4 create mode 100644 m4/strtoull.m4 create mode 100644 m4/strtoumax.m4 create mode 100644 m4/symlink.m4 create mode 100644 m4/sys_stat_h.m4 create mode 100644 m4/sys_time_h.m4 create mode 100644 m4/sys_wait_h.m4 create mode 100644 m4/tempname.m4 create mode 100644 m4/time_h.m4 create mode 100644 m4/time_r.m4 create mode 100644 m4/timegm.m4 create mode 100644 m4/timespec.m4 create mode 100644 m4/tm_gmtoff.m4 create mode 100644 m4/unistd_h.m4 create mode 100644 m4/unlocked-io.m4 create mode 100644 m4/usleep.m4 create mode 100644 m4/vararrays.m4 create mode 100644 m4/version-etc.m4 create mode 100644 m4/warn-on-use.m4 create mode 100644 m4/warnings.m4 create mode 100644 m4/wchar_h.m4 create mode 100644 m4/wchar_t.m4 create mode 100644 m4/wcrtomb.m4 create mode 100644 m4/wctob.m4 create mode 100644 m4/wctype_h.m4 create mode 100644 m4/wcwidth.m4 create mode 100644 m4/wint_t.m4 create mode 100644 m4/xalloc.m4 create mode 100644 m4/xstrndup.m4 create mode 100644 m4/xstrtol.m4 create mode 100644 maint.mk create mode 100644 man/Makefile.am create mode 100644 man/Makefile.in create mode 100644 man/cmp.1 create mode 100644 man/diff.1 create mode 100644 man/diff3.1 create mode 100644 man/sdiff.1 create mode 100644 ms/Makefile.am create mode 100644 ms/Makefile.in create mode 100644 ms/README create mode 100644 ms/config.bat create mode 100644 ms/config.sed create mode 100644 ms/config.site create mode 100644 packaging/diffutils-cmp-s-empty.patch create mode 100644 packaging/diffutils.changes create mode 100644 packaging/diffutils.manifest create mode 100755 packaging/diffutils.spec create mode 100644 po/LINGUAS create mode 100644 po/Makefile.in.in create mode 100644 po/Makevars create mode 100644 po/POTFILES.in create mode 100644 po/Rules-quot create mode 100644 po/boldquot.sed create mode 100644 po/ca.gmo create mode 100644 po/ca.po create mode 100644 po/cs.gmo create mode 100644 po/cs.po create mode 100644 po/da.gmo create mode 100644 po/da.po create mode 100644 po/de.gmo create mode 100644 po/de.po create mode 100644 po/diffutils.pot create mode 100644 po/el.gmo create mode 100644 po/el.po create mode 100644 po/en@boldquot.header create mode 100644 po/en@quot.header create mode 100644 po/eo.gmo create mode 100644 po/eo.po create mode 100644 po/es.gmo create mode 100644 po/es.po create mode 100644 po/fi.gmo create mode 100644 po/fi.po create mode 100644 po/fr.gmo create mode 100644 po/fr.po create mode 100644 po/ga.gmo create mode 100644 po/ga.po create mode 100644 po/gl.gmo create mode 100644 po/gl.po create mode 100644 po/he.gmo create mode 100644 po/he.po create mode 100644 po/hu.gmo create mode 100644 po/hu.po create mode 100644 po/id.gmo create mode 100644 po/id.po create mode 100644 po/insert-header.sin create mode 100644 po/it.gmo create mode 100644 po/it.po create mode 100644 po/ja.gmo create mode 100644 po/ja.po create mode 100644 po/lv.gmo create mode 100644 po/lv.po create mode 100644 po/ms.gmo create mode 100644 po/ms.po create mode 100644 po/nl.gmo create mode 100644 po/nl.po create mode 100644 po/pl.gmo create mode 100644 po/pl.po create mode 100644 po/pt_BR.gmo create mode 100644 po/pt_BR.po create mode 100644 po/quot.sed create mode 100644 po/remove-potcdate.sin create mode 100644 po/ro.gmo create mode 100644 po/ro.po create mode 100644 po/ru.gmo create mode 100644 po/ru.po create mode 100644 po/sr.gmo create mode 100644 po/sr.po create mode 100644 po/stamp-po create mode 100644 po/sv.gmo create mode 100644 po/sv.po create mode 100644 po/tr.gmo create mode 100644 po/tr.po create mode 100644 po/uk.gmo create mode 100644 po/uk.po create mode 100644 po/vi.gmo create mode 100644 po/vi.po create mode 100644 po/zh_CN.gmo create mode 100644 po/zh_CN.po create mode 100644 po/zh_TW.gmo create mode 100644 po/zh_TW.po create mode 100644 src/Makefile.am create mode 100644 src/Makefile.in create mode 100644 src/analyze.c create mode 100644 src/cmp.c create mode 100644 src/context.c create mode 100644 src/diff.c create mode 100644 src/diff.h create mode 100644 src/diff3.c create mode 100644 src/dir.c create mode 100644 src/ed.c create mode 100644 src/ifdef.c create mode 100644 src/io.c create mode 100644 src/normal.c create mode 100644 src/sdiff.c create mode 100644 src/side.c create mode 100644 src/system.h create mode 100644 src/util.c create mode 100644 tests/Makefile.am create mode 100644 tests/Makefile.in create mode 100755 tests/basic create mode 100644 tests/binary create mode 100755 tests/function-line-vs-leading-space create mode 100755 tests/help-version create mode 100644 tests/init.sh create mode 100755 tests/label-vs-func create mode 100644 tests/no-newline-at-eof create mode 100755 tests/stdin create mode 100644 tests/t-local.sh diff --git a/ABOUT-NLS b/ABOUT-NLS new file mode 100644 index 0000000..83bc72e --- /dev/null +++ b/ABOUT-NLS @@ -0,0 +1,1068 @@ +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. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +1.1 Quick configuration advice +============================== + +If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias, message inheritance, automatic +charset conversion or plural form handling) as the implementation here. +It is also not possible to offer this additional functionality on top +of a `catgets' implementation. Future versions of GNU `gettext' will +very likely convey even more functionality. So it might be a good idea +to change to GNU `gettext' as soon as possible. + + So you need _not_ provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +1.2 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. If not, the included GNU +`gettext' library will be used. This library is wholly contained +within this package, usually in the `intl/' subdirectory, so prior +installation of the GNU `gettext' package is _not_ required. +Installers may use special options at configuration time for changing +the default behaviour. The commands: + + ./configure --with-included-gettext + ./configure --disable-nls + +will, respectively, bypass any pre-existing `gettext' to use the +internationalizing routines provided within this package, or else, +_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.a' file and +will decide to use this. This might not be desirable. You should use +the more recent version of the GNU `gettext' library. I.e. if the file +`intl/VERSION' shows that the library which comes with this package is +more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + The configuration process will not test for the `catgets' function +and therefore it will not be used. The reason is that even an +emulation of `gettext' on top of `catgets' could not provide all the +extensions of the GNU `gettext' library. + + 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.3 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.4 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.5 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of November +2007. 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 ar az be bg bs ca cs cy da de el en en_GB eo + +----------------------------------------------------+ + Compendium | [] [] [] [] | + a2ps | [] [] [] [] [] | + aegis | () | + ant-phone | () | + anubis | [] | + ap-utils | | + aspell | [] [] [] [] [] | + bash | [] | + bfd | | + bibshelf | [] | + binutils | | + bison | [] [] | + bison-runtime | [] | + bluez-pin | [] [] [] [] [] | + cflow | [] | + clisp | [] [] [] | + console-tools | [] [] | + coreutils | [] [] [] [] | + cpio | | + cpplib | [] [] [] | + cryptonit | [] | + dialog | | + diffutils | [] [] [] [] [] [] | + doodle | [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] | + fetchmail | [] [] () [] [] | + findutils | [] | + findutils_stable | [] [] [] | + flex | [] [] [] | + fslint | | + gas | | + gawk | [] [] [] | + gcal | [] | + gcc | [] | + gettext-examples | [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] | + gettext-tools | [] [] | + gip | [] | + gliv | [] [] | + glunarclock | [] | + gmult | [] [] | + gnubiff | () | + gnucash | [] [] () () [] | + gnuedu | | + gnulib | [] | + gnunet | | + gnunet-gtk | | + gnutls | [] | + gpe-aerial | [] [] | + gpe-beam | [] [] | + gpe-calendar | | + gpe-clock | [] [] | + gpe-conf | [] [] | + gpe-contacts | | + gpe-edit | [] | + gpe-filemanager | | + gpe-go | [] | + gpe-login | [] [] | + gpe-ownerinfo | [] [] | + gpe-package | | + gpe-sketchbook | [] [] | + gpe-su | [] [] | + gpe-taskmanager | [] [] | + gpe-timesheet | [] | + gpe-today | [] [] | + gpe-todo | | + gphoto2 | [] [] [] [] | + gprof | [] [] | + gpsdrive | | + gramadoir | [] [] | + grep | [] [] | + gretl | () | + gsasl | | + gss | | + gst-plugins-bad | [] [] | + gst-plugins-base | [] [] | + gst-plugins-good | [] [] [] | + gst-plugins-ugly | [] [] | + gstreamer | [] [] [] [] [] [] [] | + gtick | () | + gtkam | [] [] [] [] | + gtkorphan | [] [] | + gtkspell | [] [] [] [] | + gutenprint | [] | + hello | [] [] [] [] [] | + herrie | [] | + hylafax | | + idutils | [] [] | + indent | [] [] [] [] | + iso_15924 | | + iso_3166 | [] [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | | + iso_4217 | [] [] [] | + iso_639 | [] [] [] [] | + jpilot | [] | + jtag | | + jwhois | | + kbd | [] [] [] [] | + keytouch | [] [] | + keytouch-editor | [] | + keytouch-keyboa... | [] | + latrine | () | + ld | [] | + leafpad | [] [] [] [] [] | + libc | [] [] [] [] | + libexif | [] | + libextractor | [] | + libgpewidget | [] [] [] | + libgpg-error | [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] | + libgsasl | | + libiconv | [] [] | + libidn | [] [] [] | + lifelines | [] () | + lilypond | [] | + lingoteach | | + lprng | | + lynx | [] [] [] [] | + m4 | [] [] [] [] | + mailfromd | | + mailutils | [] | + make | [] [] | + man-db | [] [] [] | + minicom | [] [] [] | + nano | [] [] [] | + opcodes | [] | + parted | [] [] | + pilot-qof | | + popt | [] [] [] | + psmisc | [] | + pwdutils | | + qof | | + radius | [] | + recode | [] [] [] [] [] [] | + rpm | [] | + screem | | + scrollkeeper | [] [] [] [] [] [] [] [] | + sed | [] [] [] | + shared-mime-info | [] [] [] [] () [] [] [] | + sharutils | [] [] [] [] [] [] | + shishi | | + skencil | [] () | + solfege | | + soundtracker | [] [] | + sp | [] | + system-tools-ba... | [] [] [] [] [] [] [] [] [] | + tar | [] [] | + texinfo | [] [] [] | + tin | () () | + tuxpaint | [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] [] | + util-linux-ng | [] [] [] [] | + vorbis-tools | [] | + wastesedge | () | + wdiff | [] [] [] [] | + wget | [] [] [] | + xchat | [] [] [] [] [] [] [] | + xkeyboard-config | [] | + xpad | [] [] [] | + +----------------------------------------------------+ + af am ar az be bg bs ca cs cy da de el en en_GB eo + 6 0 2 1 8 26 2 40 48 2 56 88 15 1 15 18 + + es et eu fa fi fr ga gl gu he hi hr hu id is it + +--------------------------------------------------+ + Compendium | [] [] [] [] [] | + a2ps | [] [] [] () | + aegis | | + ant-phone | [] | + anubis | [] | + ap-utils | [] [] | + aspell | [] [] [] | + bash | [] | + bfd | [] [] | + bibshelf | [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] [] [] | + bison-runtime | [] [] [] [] [] | + bluez-pin | [] [] [] [] [] | + cflow | [] | + clisp | [] [] | + console-tools | | + coreutils | [] [] [] [] [] [] | + cpio | [] [] [] | + cpplib | [] [] | + cryptonit | [] | + dialog | [] [] [] | + diffutils | [] [] [] [] [] [] [] [] [] | + doodle | [] [] | + e2fsprogs | [] [] [] | + enscript | [] [] [] | + fetchmail | [] | + findutils | [] [] [] | + findutils_stable | [] [] [] [] | + flex | [] [] [] | + fslint | | + gas | [] [] | + gawk | [] [] [] [] () | + gcal | [] [] | + gcc | [] | + gettext-examples | [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] | + gettext-tools | [] [] [] [] | + gip | [] [] [] [] | + gliv | () | + glunarclock | [] [] [] | + gmult | [] [] [] | + gnubiff | () () | + gnucash | () () () | + gnuedu | [] | + gnulib | [] [] [] | + gnunet | | + gnunet-gtk | | + gnutls | | + gpe-aerial | [] [] | + gpe-beam | [] [] | + gpe-calendar | | + gpe-clock | [] [] [] [] | + gpe-conf | [] | + gpe-contacts | [] [] | + gpe-edit | [] [] [] [] | + gpe-filemanager | [] | + gpe-go | [] [] [] | + gpe-login | [] [] [] | + gpe-ownerinfo | [] [] [] [] [] | + gpe-package | [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] [] [] | + gpe-taskmanager | [] [] [] | + gpe-timesheet | [] [] [] [] | + gpe-today | [] [] [] [] | + gpe-todo | [] | + gphoto2 | [] [] [] [] [] | + gprof | [] [] [] [] [] | + gpsdrive | [] | + gramadoir | [] [] | + grep | [] [] [] | + gretl | [] [] [] () | + gsasl | [] [] | + gss | [] [] | + gst-plugins-bad | [] [] [] [] | + gst-plugins-base | [] [] [] [] | + gst-plugins-good | [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] | + gstreamer | [] [] [] | + gtick | [] [] [] | + gtkam | [] [] [] [] | + gtkorphan | [] [] | + gtkspell | [] [] [] [] [] [] [] | + gutenprint | [] | + hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | + herrie | [] | + hylafax | | + idutils | [] [] [] [] [] | + indent | [] [] [] [] [] [] [] [] [] [] | + iso_15924 | [] | + iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | [] | + iso_4217 | [] [] [] [] [] [] | + iso_639 | [] [] [] [] [] [] | + jpilot | [] [] | + jtag | [] | + jwhois | [] [] [] [] [] | + kbd | [] [] | + keytouch | [] [] [] | + keytouch-editor | [] | + keytouch-keyboa... | [] [] | + latrine | [] [] | + ld | [] [] [] [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | [] | + libgpewidget | [] [] [] [] [] | + libgpg-error | [] | + libgphoto2 | [] [] [] | + libgphoto2_port | [] [] | + libgsasl | [] [] | + libiconv | [] [] [] | + libidn | [] [] | + lifelines | () | + lilypond | [] [] [] | + lingoteach | [] [] [] | + lprng | | + lynx | [] [] [] | + m4 | [] [] [] [] | + mailfromd | | + mailutils | [] [] | + make | [] [] [] [] [] [] [] [] | + man-db | [] | + minicom | [] [] [] [] | + nano | [] [] [] [] [] [] [] | + opcodes | [] [] [] [] | + parted | [] [] [] | + pilot-qof | | + popt | [] [] [] [] | + psmisc | [] [] | + pwdutils | | + qof | [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] [] | + rpm | [] [] | + screem | | + scrollkeeper | [] [] [] | + sed | [] [] [] [] [] | + shared-mime-info | [] [] [] [] [] [] | + sharutils | [] [] [] [] [] [] [] [] | + shishi | [] | + skencil | [] [] | + solfege | [] | + soundtracker | [] [] [] | + sp | [] | + system-tools-ba... | [] [] [] [] [] [] [] [] [] | + tar | [] [] [] [] [] | + texinfo | [] [] [] | + tin | [] () | + tuxpaint | [] [] | + unicode-han-tra... | | + unicode-transla... | [] [] | + util-linux | [] [] [] [] [] [] [] | + util-linux-ng | [] [] [] [] [] [] [] | + vorbis-tools | | + wastesedge | () | + wdiff | [] [] [] [] [] [] [] [] | + wget | [] [] [] [] [] [] [] [] | + xchat | [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] | + xpad | [] [] [] | + +--------------------------------------------------+ + es et eu fa fi fr ga gl gu he hi hr hu id is it + 85 22 14 2 48 101 61 12 2 8 2 6 53 29 1 52 + + ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl nn + +--------------------------------------------------+ + Compendium | [] | + a2ps | () [] [] | + aegis | () | + ant-phone | [] | + anubis | [] [] [] | + ap-utils | [] | + aspell | [] [] | + bash | [] | + bfd | | + bibshelf | [] | + binutils | | + bison | [] [] [] | + bison-runtime | [] [] [] | + bluez-pin | [] [] [] | + cflow | | + clisp | [] | + console-tools | | + coreutils | [] | + cpio | [] | + cpplib | [] | + cryptonit | [] | + dialog | [] [] | + diffutils | [] [] [] | + doodle | | + e2fsprogs | [] | + enscript | [] | + fetchmail | [] [] | + findutils | [] | + findutils_stable | [] | + flex | [] [] | + fslint | | + gas | | + gawk | [] [] | + gcal | | + gcc | | + gettext-examples | [] [] [] | + gettext-runtime | [] [] [] | + gettext-tools | [] [] | + gip | [] [] | + gliv | [] | + glunarclock | [] [] | + gmult | [] [] [] | + gnubiff | | + gnucash | () () () | + gnuedu | | + gnulib | [] [] | + gnunet | | + gnunet-gtk | | + gnutls | [] | + gpe-aerial | [] | + gpe-beam | [] | + gpe-calendar | [] | + gpe-clock | [] [] [] | + gpe-conf | [] [] [] | + gpe-contacts | [] | + gpe-edit | [] [] [] | + gpe-filemanager | [] [] | + gpe-go | [] [] [] | + gpe-login | [] [] [] | + gpe-ownerinfo | [] [] | + gpe-package | [] [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] [] | + gpe-taskmanager | [] [] [] [] | + gpe-timesheet | [] | + gpe-today | [] [] | + gpe-todo | [] | + gphoto2 | [] [] | + gprof | [] | + gpsdrive | [] | + gramadoir | () | + grep | [] [] | + gretl | | + gsasl | [] | + gss | | + gst-plugins-bad | [] | + gst-plugins-base | [] | + gst-plugins-good | [] | + gst-plugins-ugly | [] | + gstreamer | [] | + gtick | [] | + gtkam | [] [] | + gtkorphan | [] | + gtkspell | [] [] | + gutenprint | [] | + hello | [] [] [] [] [] [] [] | + herrie | [] | + hylafax | | + idutils | [] | + indent | [] [] | + iso_15924 | [] | + iso_3166 | [] [] [] [] [] [] [] [] | + iso_3166_2 | [] | + iso_4217 | [] [] [] | + iso_639 | [] [] [] [] | + jpilot | () () | + jtag | | + jwhois | [] | + kbd | [] | + keytouch | [] | + keytouch-editor | [] | + keytouch-keyboa... | | + latrine | [] | + ld | | + leafpad | [] [] | + libc | [] [] [] | + libexif | | + libextractor | | + libgpewidget | [] | + libgpg-error | | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | [] | + libiconv | [] | + libidn | [] [] | + lifelines | [] | + lilypond | [] | + lingoteach | [] | + lprng | | + lynx | [] [] | + m4 | [] [] | + mailfromd | | + mailutils | | + make | [] [] [] | + man-db | | + minicom | [] | + nano | [] [] [] | + opcodes | [] | + parted | [] [] | + pilot-qof | | + popt | [] [] [] | + psmisc | [] [] [] | + pwdutils | | + qof | | + radius | | + recode | [] | + rpm | [] [] | + screem | [] | + scrollkeeper | [] [] [] [] | + sed | [] [] | + shared-mime-info | [] [] [] [] [] [] [] | + sharutils | [] [] | + shishi | | + skencil | | + solfege | () () | + soundtracker | | + sp | () | + system-tools-ba... | [] [] [] [] | + tar | [] [] [] | + texinfo | [] [] | + tin | | + tuxpaint | () [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] | + util-linux-ng | [] [] | + vorbis-tools | | + wastesedge | [] | + wdiff | [] [] | + wget | [] [] | + xchat | [] [] [] [] | + xkeyboard-config | [] [] [] | + xpad | [] [] [] | + +--------------------------------------------------+ + ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl nn + 51 2 25 3 2 0 6 0 2 2 20 0 11 1 103 6 + + or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta + +--------------------------------------------------+ + Compendium | [] [] [] [] [] | + a2ps | () [] [] [] [] [] [] | + aegis | () () | + ant-phone | [] [] | + anubis | [] [] [] | + ap-utils | () | + aspell | [] [] [] | + bash | [] [] | + bfd | | + bibshelf | [] | + binutils | [] [] | + bison | [] [] [] [] [] | + bison-runtime | [] [] [] [] [] | + bluez-pin | [] [] [] [] [] [] [] [] [] | + cflow | [] | + clisp | [] | + console-tools | [] | + coreutils | [] [] [] [] | + cpio | [] [] [] | + cpplib | [] | + cryptonit | [] [] | + dialog | [] | + diffutils | [] [] [] [] [] [] | + doodle | [] [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] [] | + fetchmail | [] [] [] | + findutils | [] [] [] | + findutils_stable | [] [] [] [] [] [] | + flex | [] [] [] [] [] | + fslint | [] | + gas | | + gawk | [] [] [] [] | + gcal | [] | + gcc | [] [] | + gettext-examples | [] [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] [] [] | + gip | [] [] [] [] | + gliv | [] [] [] [] [] [] | + glunarclock | [] [] [] [] [] [] | + gmult | [] [] [] [] | + gnubiff | () [] | + gnucash | () [] | + gnuedu | | + gnulib | [] [] [] | + gnunet | | + gnunet-gtk | [] | + gnutls | [] [] | + gpe-aerial | [] [] [] [] [] [] [] | + gpe-beam | [] [] [] [] [] [] [] | + gpe-calendar | [] [] [] [] | + gpe-clock | [] [] [] [] [] [] [] [] | + gpe-conf | [] [] [] [] [] [] [] | + gpe-contacts | [] [] [] [] [] | + gpe-edit | [] [] [] [] [] [] [] [] [] | + gpe-filemanager | [] [] | + gpe-go | [] [] [] [] [] [] [] [] | + gpe-login | [] [] [] [] [] [] [] [] | + gpe-ownerinfo | [] [] [] [] [] [] [] [] | + gpe-package | [] [] | + gpe-sketchbook | [] [] [] [] [] [] [] [] | + gpe-su | [] [] [] [] [] [] [] [] | + gpe-taskmanager | [] [] [] [] [] [] [] [] | + gpe-timesheet | [] [] [] [] [] [] [] [] | + gpe-today | [] [] [] [] [] [] [] [] | + gpe-todo | [] [] [] [] | + gphoto2 | [] [] [] [] [] [] | + gprof | [] [] [] | + gpsdrive | [] [] | + gramadoir | [] [] | + grep | [] [] [] [] | + gretl | [] [] [] | + gsasl | [] [] [] | + gss | [] [] [] [] | + gst-plugins-bad | [] [] [] | + gst-plugins-base | [] [] | + gst-plugins-good | [] [] | + gst-plugins-ugly | [] [] [] | + gstreamer | [] [] [] [] | + gtick | [] | + gtkam | [] [] [] [] [] | + gtkorphan | [] | + gtkspell | [] [] [] [] [] [] [] [] | + gutenprint | [] | + hello | [] [] [] [] [] [] [] [] | + herrie | [] [] [] | + hylafax | | + idutils | [] [] [] [] [] | + indent | [] [] [] [] [] [] [] | + iso_15924 | | + iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | | + iso_4217 | [] [] [] [] [] [] [] | + iso_639 | [] [] [] [] [] [] [] | + jpilot | | + jtag | [] | + jwhois | [] [] [] [] | + kbd | [] [] [] | + keytouch | [] | + keytouch-editor | [] | + keytouch-keyboa... | [] | + latrine | | + ld | [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] | + libexif | [] [] | + libextractor | [] [] | + libgpewidget | [] [] [] [] [] [] [] [] | + libgpg-error | [] [] [] | + libgphoto2 | [] | + libgphoto2_port | [] [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] | + libidn | [] [] () | + lifelines | [] [] | + lilypond | | + lingoteach | [] | + lprng | [] | + lynx | [] [] [] | + m4 | [] [] [] [] [] | + mailfromd | [] | + mailutils | [] [] [] | + make | [] [] [] [] | + man-db | [] [] [] [] | + minicom | [] [] [] [] [] | + nano | [] [] [] [] | + opcodes | [] [] | + parted | [] | + pilot-qof | | + popt | [] [] [] [] | + psmisc | [] [] | + pwdutils | [] [] | + qof | [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] | + rpm | [] [] [] [] | + screem | | + scrollkeeper | [] [] [] [] [] [] [] | + sed | [] [] [] [] [] [] [] [] [] | + shared-mime-info | [] [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] | + skencil | [] [] [] | + solfege | [] | + soundtracker | [] [] | + sp | | + system-tools-ba... | [] [] [] [] [] [] [] [] [] | + tar | [] [] [] [] | + texinfo | [] [] [] [] | + tin | () | + tuxpaint | [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] [] | + util-linux-ng | [] [] [] [] | + vorbis-tools | [] | + wastesedge | | + wdiff | [] [] [] [] [] [] [] | + wget | [] [] [] [] | + xchat | [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + xpad | [] [] [] | + +--------------------------------------------------+ + or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta + 0 5 77 31 53 4 58 72 3 45 46 9 45 122 3 + + tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu + +---------------------------------------------------+ + Compendium | [] [] [] [] | 19 + a2ps | [] [] [] | 19 + aegis | [] | 1 + ant-phone | [] [] | 6 + anubis | [] [] [] | 11 + ap-utils | () [] | 4 + aspell | [] [] [] | 16 + bash | [] | 6 + bfd | | 2 + bibshelf | [] | 7 + binutils | [] [] [] [] | 9 + bison | [] [] [] [] | 20 + bison-runtime | [] [] [] [] | 18 + bluez-pin | [] [] [] [] [] [] | 28 + cflow | [] [] | 5 + clisp | | 9 + console-tools | [] [] | 5 + coreutils | [] [] [] | 18 + cpio | [] [] [] [] | 11 + cpplib | [] [] [] [] [] | 12 + cryptonit | [] | 6 + dialog | [] [] [] | 9 + diffutils | [] [] [] [] [] | 29 + doodle | [] | 6 + e2fsprogs | [] [] | 10 + enscript | [] [] [] | 16 + fetchmail | [] [] | 12 + findutils | [] [] [] | 11 + findutils_stable | [] [] [] [] | 18 + flex | [] [] | 15 + fslint | [] | 2 + gas | [] | 3 + gawk | [] [] [] | 16 + gcal | [] | 5 + gcc | [] [] [] | 7 + gettext-examples | [] [] [] [] [] [] | 29 + gettext-runtime | [] [] [] [] [] [] | 28 + gettext-tools | [] [] [] [] [] | 20 + gip | [] [] | 13 + gliv | [] [] | 11 + glunarclock | [] [] [] | 15 + gmult | [] [] [] [] | 16 + gnubiff | [] | 2 + gnucash | () [] | 5 + gnuedu | [] | 2 + gnulib | [] | 10 + gnunet | | 0 + gnunet-gtk | [] [] | 3 + gnutls | | 4 + gpe-aerial | [] [] | 14 + gpe-beam | [] [] | 14 + gpe-calendar | [] [] | 7 + gpe-clock | [] [] [] [] | 21 + gpe-conf | [] [] [] | 16 + gpe-contacts | [] [] | 10 + gpe-edit | [] [] [] [] [] | 22 + gpe-filemanager | [] [] | 7 + gpe-go | [] [] [] [] | 19 + gpe-login | [] [] [] [] [] | 21 + gpe-ownerinfo | [] [] [] [] | 21 + gpe-package | [] | 6 + gpe-sketchbook | [] [] | 16 + gpe-su | [] [] [] [] | 21 + gpe-taskmanager | [] [] [] [] | 21 + gpe-timesheet | [] [] [] [] | 18 + gpe-today | [] [] [] [] [] | 21 + gpe-todo | [] [] | 8 + gphoto2 | [] [] [] [] | 21 + gprof | [] [] | 13 + gpsdrive | [] | 5 + gramadoir | [] | 7 + grep | [] | 12 + gretl | | 6 + gsasl | [] [] [] | 9 + gss | [] | 7 + gst-plugins-bad | [] [] [] | 13 + gst-plugins-base | [] [] | 11 + gst-plugins-good | [] [] [] [] [] | 16 + gst-plugins-ugly | [] [] [] | 13 + gstreamer | [] [] [] | 18 + gtick | [] [] | 7 + gtkam | [] | 16 + gtkorphan | [] | 7 + gtkspell | [] [] [] [] [] [] | 27 + gutenprint | | 4 + hello | [] [] [] [] [] | 38 + herrie | [] [] | 8 + hylafax | | 0 + idutils | [] [] | 15 + indent | [] [] [] [] [] | 28 + iso_15924 | [] [] | 4 + iso_3166 | [] [] [] [] [] [] [] [] [] | 54 + iso_3166_2 | [] [] | 4 + iso_4217 | [] [] [] [] [] | 24 + iso_639 | [] [] [] [] [] | 26 + jpilot | [] [] [] [] | 7 + jtag | [] | 3 + jwhois | [] [] [] | 13 + kbd | [] [] [] | 13 + keytouch | [] | 8 + keytouch-editor | [] | 5 + keytouch-keyboa... | [] | 5 + latrine | [] [] | 5 + ld | [] [] [] [] | 10 + leafpad | [] [] [] [] [] | 24 + libc | [] [] [] | 19 + libexif | [] | 5 + libextractor | [] | 5 + libgpewidget | [] [] [] | 20 + libgpg-error | [] | 6 + libgphoto2 | [] [] | 9 + libgphoto2_port | [] [] [] | 11 + libgsasl | [] | 8 + libiconv | [] [] | 11 + libidn | [] [] | 11 + lifelines | | 4 + lilypond | [] | 6 + lingoteach | [] | 6 + lprng | [] | 2 + lynx | [] [] [] | 15 + m4 | [] [] [] | 18 + mailfromd | [] [] | 3 + mailutils | [] [] | 8 + make | [] [] [] | 20 + man-db | [] | 9 + minicom | [] | 14 + nano | [] [] [] | 20 + opcodes | [] [] | 10 + parted | [] [] [] | 11 + pilot-qof | [] | 1 + popt | [] [] [] [] | 18 + psmisc | [] [] | 10 + pwdutils | [] | 3 + qof | [] | 4 + radius | [] [] | 7 + recode | [] [] [] | 25 + rpm | [] [] [] [] | 13 + screem | [] | 2 + scrollkeeper | [] [] [] [] | 26 + sed | [] [] [] [] | 23 + shared-mime-info | [] [] [] | 29 + sharutils | [] [] [] | 23 + shishi | [] | 3 + skencil | [] | 7 + solfege | [] | 3 + soundtracker | [] [] | 9 + sp | [] | 3 + system-tools-ba... | [] [] [] [] [] [] [] | 38 + tar | [] [] [] | 17 + texinfo | [] [] [] | 15 + tin | | 1 + tuxpaint | [] [] [] | 19 + unicode-han-tra... | | 0 + unicode-transla... | | 2 + util-linux | [] [] [] | 20 + util-linux-ng | [] [] [] | 20 + vorbis-tools | [] [] | 4 + wastesedge | | 1 + wdiff | [] [] | 23 + wget | [] [] [] | 20 + xchat | [] [] [] [] | 29 + xkeyboard-config | [] [] [] | 14 + xpad | [] [] [] | 15 + +---------------------------------------------------+ + 76 teams tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu + 163 domains 0 3 1 74 51 0 143 21 1 57 7 45 0 2036 + + 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 November 2007 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.6 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 Library 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/AUTHORS b/AUTHORS new file mode 100644 index 0000000..611aa7f --- /dev/null +++ b/AUTHORS @@ -0,0 +1,51 @@ +GNU diff was written by Paul Eggert, Mike Haertel, David Hayes, +Richard Stallman, and Len Tower. + +GNU diff3 was written by Randy Smith. + +GNU sdiff was written by Thomas Lord. + +GNU cmp was written by Torbjorn Granlund and David MacKenzie. + +The diffutils manual was written by David MacKenzie, Paul Eggert, and +Richard Stallman. Parts are adapted by from a manual page written by +Larry Wall, with his permission. + +Many other people have contributed to GNU diffutils, including Wayne +Davison, Patrick D'Cruze, F. Thomas May, Greg McGary, Chip Rosenthal, +and Eli Zaretskii. + +The following contributions warranted legal paper exchanges with the +Free Software Foundation. Also see the files ChangeLog and THANKS. + +Leonard H. Tower Jr. +Torbjorn Granlund +Mike Haertel +David S. Hayes +Randall Smith +Richard Stallman +F. Thomas May +Wayne Davison +Paul R. Eggert +Chip Rosenthal +Wayne Davison +Patrick D'Cruze +Eli Zaretskii + + +Copyright (C) 2001, 2006, 2009-2010 Free Software Foundation, Inc. + +This file is part of GNU diffutils. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + 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. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +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: + + Copyright (C) + 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 +. + + 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 +. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..2f62027 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,662 @@ +2010-05-03 Jim Meyering + + version 3.0 + * NEWS: Record release date. + + build: update gnulib submodule to latest + +2010-05-01 Jim Meyering + + build: use gnulib's sys_wait module + * bootstrap.conf (gnulib_modules): Use gnulib's sys_wait module, + now that we assume its presence. + +2010-04-30 Jim Meyering + + build: update gnulib submodule to latest + * bootstrap: Also update from gnulib. + * tests/init.sh: Likewise + + maint: remove now-useless #if HAVE_HEADER_H guards + * src/system.h: Include unconditionally, + now that gnulib guarantees its presence. + * lib/cmpbuf.c: Likewise for and . + +2010-04-17 Jim Meyering + + tests: use original no-newline-at-eof test, but with -U1, not -U2 + * tests/no-newline-at-eof: Revert to the smaller test, but with + -U1 rather than -U2, since that actually triggers the bug. + +2010-04-17 Paul Eggert + + Followon improvements for the fix for Debian bug 577832. + * src/io.c (find_and_hash_each_line): Omit the inserted newline in + a simpler way. + * tests/no-newline-at-eof: Fix the test case so that it rejects + the old, buggy behavior. + +2010-04-16 Jim Meyering + + build: update gnulib submodule to latest + + tests: test for the no-newline-at-EOF bug + * tests/no-newline-at-eof: New file. + * tests/Makefile.am (TESTS): Add it. + + diff: fix a regression when at least one input lacks a newline-at-EOF, + and the final hunk plus context-length aligns exactly with the end + of the newline-lacking file. Diff would fail to output the required + "\ No newline at end of file" line, thus rendering the output invalid. + This bug appears to have been introduced by 2006-05-07 + commit 58d0483b, "(find_identical_ends): Fix huge performance bug...", + at least to the extent that reverting that change fixes the bug. + Considering the stated effect of that change and lack of metrics, + reverting it is not an option, so here we take a more direct approach. + + Given these inputs, + + printf '\n1'>a; printf '\n0\n\n1'>b + + and running diff like this: + + ./diff -U1 a b + + for input file "b", the pointer, files[1].linbuf[4][-1], to + the last byte on the final line was mistakenly pointing at the + sentinel newline at EOF, rather than at the preceding byte. + + (gdb) p files[1].linbuf[4][-1] + $3 = 10 '\n' + + Thus, this test in the final print_1_line call: + + if ((!line_flag || line_flag[0]) && limit[-1] != '\n') + fprintf (out, "\n\\ %s\n", _("No newline at end of file")); + + would fail, because limit[-1] (which is files[1].linbuf[4][-1]) + was mistakenly '\n', rather than the desired '1'. + + My first thought was simply to adjust the final linbuf[line] setting, + at the end of io.c's find_and_hash_each_line function function: + + if (p == bufend) + - break; + + { + + if (current->missing_newline) + + --linbuf[line]; + + break; + + } + + But that would make diff misbehave with this input + (same as above, but with a newline appended to "a"), + + printf '\n1\n'>a; printf '\n0\n\n1'>b + ./diff -U1 a b + + due to the block (100 lines above) that is triggered in that case + (but not in the both-files-missing-newline case): + + if (p == bufend + && current->missing_newline + && ROBUST_OUTPUT_STYLE (output_style)) + { + /* This line is incomplete. If this is significant, + put the line into buckets[-1]. */ + if (ignore_white_space < IGNORE_SPACE_CHANGE) + bucket = &buckets[-1]; + + /* Omit the inserted newline when computing linbuf later. */ + p--; + bufend = suffix_begin = p; + } + + Note how "p" is decremented and "bufend" adjusted. + When that happens, we certainly don't want to decrement + "bufend" yet again. + + Since there is no other way to determine at the end whether "bufend" + was already decremented, add a new variable to serve as witness. + + * NEWS (Bug fixes): Mention it. + Reported by Timo Juhani Lindfors in http://bugs.debian.org/577832. + Forwarded by Santiago Vila. + + tests: update init.sh from gnulib + * tests/init.sh: Update from gnulib. + +2010-04-08 Jim Meyering + + build: include cfg.mk and dist-check.mk in the distribution tarball + * Makefile.am (EXTRA_DIST): Add cfg.mk and dist-check.mk. + + maint: update to latest gnulib + * cfg.mk (sc_cross_check_PATH_usage_in_tests): Remove rule, + now that it's in gnulib's maint.mk. + * gnulib: Update to latest. + +2010-04-07 Jim Meyering + + tests: make new PATH-crosschecking syntax-check tighter + * cfg.mk (sc_cross_check_PATH_usage_in_tests): Use grep's -x (match + entire line) option with -F. + + tests: pull latest help-version from gzip + * tests/help-version: Update from gzip. + * Makefile.am (TESTS_ENVIRONMENT): Export VERSION, + as required for this new help-version script. + + tests: add syntax-check rule to verify that tests use proper PATH + * cfg.mk (sc_cross_check_PATH_usage_in_tests): New rule, that is + useful only in conjunction with the help-version script. + + tests: use path_prepend_ consistently; remove unnecessary VERBOSE check + * tests/basic: Likewise. + * tests/binary: Likewise. + * tests/function-line-vs-leading-space: Likewise. + * tests/label-vs-func: Likewise. + * tests/stdin: Likewise. + +2010-04-06 Eric Blake + + maint: ignore generated files + * .gitignore: Ignore recent gnulib additions. + + maint: update to latest bootstrap + * bootstrap: Copy from gnulib/build-aux. + +2010-04-05 Jim Meyering + + tests: get latest init.sh from gnulib + * tests/init.sh: Update from gnulib. + + build: update gnulib submodule to latest; adapt + * cfg.mk (local-checks-to-skip): Add new sc_texinfo_acronym, to skip it. + + diff -F/-p: don't depend on locale-specific white-space definition + * src/context.c: Include "c-ctype.h". + Use c_isspace, not isspace. + +2010-03-18 Jim Meyering + + tests: exercise new behavior of -F RE + * tests/function-line-vs-leading-space: New file. + * tests/Makefile.am (TESTS): Add it. + +2010-03-18 Yannick Moy + + with -F or -p, emit better function lines: no leading white space + * src/diff.c (print_context_function): For languages like Ada + that allow local functions and procedures, the plain context + function line may start with enough blank characters that the + function name does not get completely printed in the 40 + characters limit. This patch solves this problem by removing + these useless initial blank characters. + * NEWS (Changes in behavior): Mention this change. + +2010-03-17 Jim Meyering + + build: don't require a specific version of help2man + * bootstrap.conf (buildreq): Bootstrap can't deal with it, + perhaps because the command name contains a digit. + + build: make bootstrap ensure that help2man is available + * bootstrap.conf (buildreq): Add help2man. + +2010-02-23 Jim Meyering + + tests: test for the "Binary files A and B differ" diagnostic + * tests/binary: New script. + * tests/Makefile.am (TESTS): Add it. + + revert 2002 change that removed "Binary " from "files A and B differ" + With this change, "printf '\0'|diff - /dev/null" now prints + "Binary files - and /dev/null differ" once again. + This reverts 2002-06-28 commit a352f0980, + "(briefly_report): Don't say "Binary files differ", ...". + * src/analyze.c (briefly_report): Do include the "Binary " prefix + in the diagnostic, when !brief. + * NEWS (Changes in behavior): Mention the diagnostic change. + Reported by Andreas Hoenen in http://bugs.debian.org/570064. + +2010-02-14 Juan Manuel Guerrero + + avoid compilation failure on systems lacking both fork and vfork + * src/sdiff.c [!HAVE_WORKING_FORK && !HAVE_WORKING_VFORK] (main): + Pass the right number of arguments to shell_quote_copy. + * src/util.c [!HAVE_WORKING_FORK && !HAVE_WORKING_VFORK] (begin_output): + Likewise. + +2010-02-11 Jim Meyering + + post-release administrivia + * NEWS: Add header line for next release. + * .prev-version: Record previous version. + * cfg.mk (old_NEWS_hash): Auto-update. + + version 2.9 + * NEWS: Record release date. + + doc: document the release procedure + * README-release: New file. + +2010-02-10 Jim Meyering + + maint: change use of "|" to more maintainable "||" (no semantic change) + * src/analyze.c (diff_2_files): Using the "||" operator happens to + be equivalent to using "|" in this case. It is also clearer and + less prone to inadvertent bug introduction, in case the variable, + "changes" were ever to take on a value not in {0,1}. + Patch by Tim Waugh, via Mike Frysinger. + + portability: avoid "diff - ..." failure at least on *BSD and Solaris + The new "stdin" test was failing on many types of systems. + * src/diff.c (compare_files): Guard use of xfreopen (NULL, "rb", ... + also with O_BINARY, so as to avoid this unnecessary call on + systems where it's not needed (on some it fails with "Bad address". + + tests: honor VERBOSE + * tests/basic: Enable "set -x" if $VERBOSE. + * tests/help-version: Likewise. + * tests/label-vs-func: Likewise. + * tests/stdin: Likewise. + +2010-02-05 Jim Meyering + + build: update gnulib submodule to latest + + sync with gnulib + * gl/lib/regcomp.c.diff: Adjust to apply to the latest in gnulib. + * gnulib: Update submodule to latest. + +2010-02-04 Jim Meyering + + build: do not override gnulib-provided AM_CFLAGS options + Avoid a warning from automake: + lib/Makefile.am:23: AM_CFLAGS multiply defined in condition TRUE ... + lib/gnulib.mk:30: ... `AM_CFLAGS' previously defined here + lib/Makefile.am:18: `lib/gnulib.mk' included from here + + * lib/Makefile.am (AM_CFLAGS): Append $(WARN_CFLAGS) and + $(WERROR_CFLAGS), i.e., use "+=", not "=". + This was introduced via 2009-12-17 commit e58efa5b + "build: enable warnings and -Werror.", + but fortunately is not a bug, because the definition + it would have overridden was always empty. + +2010-01-17 Jim Meyering + + maint: add to .gitignore + * .gitignore: Ignore more. + +2010-01-16 Jim Meyering + + doc: add to TODO + * TODO: Add an item, suggested by Dan Jacobson. + +2010-01-13 Jim Meyering + + tests: ensure that an argument of "-" is treated as standard input + * tests/stdin: New test. + * tests/Makefile.am (TESTS): Add it. + +2010-01-10 Jim Meyering + + tests: now "make distcheck" runs more tests, incl. syntax-check + * cfg.mk: Include dist-check.mk, from coreutils. + * Makefile.am (distcheck-hook): Define rule, to hook to... + * dist-check.mk: New file. + +2010-01-09 Jim Meyering + + build: update gnulib to latest, for fixed syntax-check rule + + maint: record updated NEWS hash + * cfg.mk (old_NEWS_hash): Update to account for GFDL change. + + build: update gnulib submodule to latest + + tests: add a test of basic functionality + * tests/basic: Start adding tests. + * tests/Makefile.am (TESTS): Add it. + + maint: udpate GFDL license to 1.3 + * doc/diff.texi: Update to use GFDL version 1.3. + +2010-01-04 Eric Blake + + build: allow compilation on cygwin + * src/Makefile.am (cmp_LDADD): Move LIBICONV... + (LDADD): ...into global flags, since all programs need it. + +2010-01-03 Jim Meyering + + maint: record update-copyright options for this package + * cfg.mk: Next time, just run "make update-copyright". + + tests: prepend ../src, not "." to PATH + * tests/help-version: Correct PATH. + +2010-01-01 Jim Meyering + + maint: update all FSF copyright year lists to include 2010 + Use this command: + git ls-files |grep -vE '^(\..*|COPYING|gnulib)$' |xargs \ + env UPDATE_COPYRIGHT_USE_INTERVALS=1 build-aux/update-copyright + +2009-12-31 Jim Meyering + + maint: newer gnulib; don't hard-code my GPG key ID + * cfg.mk (gpg_key_ID): Remove definition, now that maint.mk automates it. + * gnulib: Update to latest. + + tests: exercise diff -p's function-name matching + * tests/label-vs-func: New file. + * tests/Makefile.am (TESTS): Add label-vs-func. + Reported by Simon Arlott + http://article.gmane.org/gmane.linux.kernel.janitors/14260 + + tests: use gnulib's init.sh + * tests/Makefile.am (EXTRA_DIST): Add init.sh. + Remove test-lib.sh. + * tests/init.sh: New file. + * tests/test-lib.sh: Remove file. + * tests/help-version: Use init.sh, not test-lib.sh. + +2009-11-28 Jim Meyering + + maint: don't let trailing spaces in diffs perturb make syntax-check + * .x-sc_space_tab: New file. + +2009-11-22 Jim Meyering + + build: enable warnings and -Werror. + * src/Makefile.am (AM_CFLAGS): Enable warnings and -Werror. + Set to this: $(WARN_CFLAGS) $(WERROR_CFLAGS) + * lib/Makefile.am (AM_CFLAGS): Similarly, but use this: + $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS) + * configure.ac (GNULIB_WARN_CFLAGS): Don't turn off -Wuninitialized. + + build: avoid a warning from gnulib's sh-quote.c + * gl/lib/sh-quote.c.diff: New file, to avoid a warning. + + maint: avoid warnings via patched versions of gnulib's regex functions + * gl/lib/regcomp.c.diff: New file. + * gl/lib/regex_internal.c.diff: Likewise. + * gl/lib/regex_internal.h.diff: Likewise. + * gl/lib/regexec.c.diff: Likewise. + + build: update gnulib submodule to latest + +2009-11-20 Eric Blake + + build: ignore more files + * .gitignore: Add config.cache, *.exe. + + build: fix test run on cygwin + This, plus a gnulib update for xalloc-die-tests, are necessary + for make check to pass on cygwin. + + * tests/Makefile.am (built_programs): Ignore $(EXEEXT). + * src/Makefile.am (paths.h): Add missing dependency. + +2009-11-20 Jim Meyering + + maint: remove vestiges of nanosleep + * src/Makefile.am (LDADD): Remove $(LIB_NANOSLEEP), now + that we no longer use the nanosleep module. + Spotted by Eric Blake. + + maint: don't pull in gnulib's nanosleep unnecessarily + * bootstrap.conf (gnulib_modules): Remove nanosleep. Not needed. + Spotted by Eric Blake. + + maint: cfg.mk: remove factored-out ftp host/dir definitions + * cfg.mk (gnu_ftp_host-alpha, gnu_ftp_host-beta gnu_ftp_host-stable): + (gnu_rel_host, url_dir_list): Remove definitions. The defaults, + now provided by maint.mk, are the same. + * gnulib: Update for latest, including those maint.mk additions. + + build: link with now-required libraries + * src/Makefile.am (LDADD): Add gnulib-required libraries. + (cmp_LDADD): Add $(LIBICONV), for cmp's use of proper_name_utf8. + + maint: lib/xfreopen.c contains translatable strings + * po/POTFILES.in: Add lib/xfreopen.c. + + maint: remove hard-coded macro definitions provided by intprops.h + * lib/cmpbuf.c: Include "intprops.h" rather than open-coding macros + like TYPE_SIGNED and TYPE_MINIMUM. + + maint: add gnulib's announce-gen module + * bootstrap.conf (gnulib_modules): Add announce-gen + + build: suppress warnings about bindtextdomain and textdomain + * src/system.h (bindtextdomain, textdomain) [!ENABLE_NLS]: Define away. + + build: use more gnulib modules + * bootstrap.conf (gnulib_modules): Add mktime, nanosleep, strptime + and timegm. + + use xfreopen rather than freopen + * src/cmp.c: Include "xfreopen.h". + Use xfreopen in place of freopen. + * src/diff.c Likewise, and... + (main): Set exit_failure to EXIT_TROUBLE, rather than to 2. + * src/diff3.c: Likewise. + * bootstrap.conf (gnulib_modules): Add xfreopen. + + build: enable many warnings + * configure.ac: Add support for --enable-gcc-warnings. + * bootstrap.conf (gnulib_modules): Add manywarnings. + * Makefile.am (AM_CFLAGS): Add $(WARN_CFLAGS) $(WERROR_CFLAGS) + + build: update gnulib submodule to latest + + maint: add an assertion to suppress clang-detected warning + The clang static analyzer reported that a NULL parent could be + dereferenced. However, that cannot happen, because for all callers, + the parameter, parent, is always non-NULL at that point. + * src/diff.c: Include . + Assert that parent is not NULL. + + maint: remove dead assignment from diff3.c + * src/diff3.c (make_3way_diff): Remove dead assignment. + +2009-11-18 Jim Meyering + + build: update gnulib submodule to latest + + maint: hide build commands behind $(AM_V_GEN) + * src/Makefile.am (paths.h): Use $(AM_V_GEN), and split a long line. + * man/Makefile.am ($(dist_man1_MANS)): Use $(AM_V_GEN) here, too. + +2009-11-16 Jim Meyering + + build: let automake generate better man-installation rules + * man/Makefile.am (dist_man1_MANS): Rename from dist_man_MANS, + to enable better automake-generated installation rules. + + admin: ignore all of gnulib-tests + * .gitignore: Add gnulib-tests + +2009-11-16 Eric Blake + + build: avoid link failure when libsigsegv is used + * src/Makefile.am (LDADD): Link against LIBSIGSEGV. + +2009-11-16 Jim Meyering + + maint: define/use PROGRAM_NAME and AUTHORS; use propername module + * bootstrap.conf (gnulib_modules): Add propername. + * src/cmp.c (PROGRAM_NAME, AUTHORS): Define. + (main): Use them in use of version_etc. + * src/diff.c (PROGRAM_NAME, AUTHORS, main): Likewise. + * src/diff3.c (PROGRAM_NAME, AUTHORS, main): Likewise. + * src/sdiff.c (PROGRAM_NAME, AUTHORS, main): Likewise. + * src/system.h: Include "propername.h". + + maint: no longer define *_FILENO constants + * src/system.h (STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO): + Remove definitions. Now guaranteed by gnulib. + + maint: bug-diffutils@gnu.org is the new bug-reporting address + * configure.ac (AC_INIT): Use bug-diffutils@..., not bug-gnu-utils + as the bug-reporting address. + * NEWS (Administrivia): Mention this. + * src/cmp.c (usage): Remove hard-coded address. + Instead, use gnulib's emit_bug_reporting_address function. + * src/diff.c (usage, option_help_msgid): Likewise. + * src/diff3.c (usage): Likewise. + * src/sdiff.c (usage): Likewise. + + sdiff, diff3: exec diff, not $(bindir)/diff + * src/Makefile.am (paths.h): Emit a definition of DEFAULT_DIFF_PROGRAM + that is simply "diff" (or whatever $(transform) would convert that to, + e.g., "gdiff"). This makes it so that tests can work without first + installing diff, and so that the binaries do not hard-code $(prefix). + * NEWS (Changes in behavior): Mention this. + +2009-11-14 Jim Meyering + + tests: add the first script; hook up gnulib-tests + * configure.ac (AC_CONFIG_FILES): Add tests/Makefile and + gnulib-tests/Makefile. + * tests/help-version: New file, from coreutils. + * tests/test-lib.sh: Likewise. + * tests/Makefile.am: New file, from gzip. + * Makefile.am (SUBDIRS): Add tests and gnulib-tests. + * tests/t-local.sh: New, empty(for now) file. + +2009-11-13 Jim Meyering + + build: require gettext-0.17 + * configure.ac: Require gettext-0.17; it was released two years ago. + + build: correct gettext configure-time support + * configure.ac: Use AM_GNU_GETTEXT([external], [need-ngettext]), + rather than AM_GNU_GETTEXT([external], [need-formatstring-macros]). + Reported by Martin Jacobs in + http://thread.gmane.org/gmane.comp.parsers.bison.bugs/3181 + +2009-11-12 Jim Meyering + + build: generalize autoheader check + * bootstrap: Look for AC_CONFIG_HEADER as well as AC_CONFIG_HEADERS. + + maint: use a git submodule for gnulib + * .gitmodules: New file, to track gnulib. + * gnulib: New file, created by running this: + git submodule add git://git.sv.gnu.org/gnulib.git gnulib + + maint: tell git what it can ignore + * .gitignore: Ignore generated files. + +2009-11-11 Jim Meyering + + build: generate ChangeLog (from git logs) into distribution tarball + * Makefile.am (dist-hook, gen-ChangeLog): New rules. + (gen_start_date): Define. + * bootstrap.conf (gnulib_modules): Add gitlog-to-changelog. + + admin: update all copyright notices to include the year 2009 + + maint/sc: enable the m4 quote check + * m4/vararrays.m4 (AC_C_VARARRAYS): Quote AC_DEFINE argument. + * cfg.mk (local-checks-to-skip): Add sc_m4_quote_check. + + build: rely on gnulib's progname module + * bootstrap.conf (gnulib_modules): Add progname. + * cfg.mk (local-checks-to-skip): Add sc_program_name. + * src/cmp.c: Include progname.h. + (program_name): Remove declaration. + (main): Call set_program_name. + * src/diff.c (main): Likewise. + * src/diff3.c (main): Likewise. + * src/sdiff.c (main): Likewise. + * src/diff.h (program_name): Remove extern declaration. + + maint/sc: enable the space-TAB check + * doc/diagmeet.note: Use no TABs. + * ms/config.sed: Use TAB-space, not space-TAB in []. + * cfg.mk (local-checks-to-skip): Remove sc_space_tab. + + build: rely on gnulib's mbrtowc module + * bootstrap.conf (gnulib_modules): Add mbrtowc. + * src/side.c [!HAVE_MBRTOWC]: Remove now-useless code, + since gnulib guarantees working and mbrtowc. + * cfg.mk (local-checks-to-skip): Remove sc_prohibit_HAVE_MBRTOWC. + + maint/sc: enable check for unmarked diagnostics + * cfg.mk (local-checks-to-skip): Remove sc_unmarked_diagnostics. + * src/dir.c (diff_dirs): Mark a diagnostic for translation. + + maint/sc: enable two config.h-checking rules + * cfg.mk (local-checks-to-skip): Remove sc_require_config_h and + sc_require_config_h_first. + (config_h_header): Define. + + maint/sc: enable the po check + * cfg.mk (local-checks-to-skip): Add sc_po_check. + * po/POTFILES.in: Update. + + maint/sc: use STREQ, not strcmp(a,b) == 0 + Run this command: + git grep -l 'strcmp *([^=]*== *0'|xargs \ + perl -pi -e 's/\bstrcmp( *\(.*?\)) *== *0/STREQ$1/g' + and then add the new definition. + * src/system.h (STREQ): Define. + * src/cmp.c (main): Use STREQ, not strcmp. + * src/diff.c (main, compare_files): Likewise. + * src/diff3.c (main): Likewise. + * src/sdiff.c (expand_name): Likewise. + * cfg.mk (local-checks-to-skip): Add sc_prohibit_strcmp. + + maint/sc: enforce "file system" spelling + * src/system.h: Spell it as two words, not one. + * ms/config.sed: Likewise. + * cfg.mk (local-checks-to-skip): Remove sc_file_system. + + maint/sc: enable check for CVS keyword expansion + * doc/diff.texi: Remove $Id$. + * cfg.mk (local-checks-to-skip): Remove sc_prohibit_cvs_keyword. + + maint: record previous version + * .prev-version: New file. + + maint/sc: enable check for duplicate "the"; fix one + * NEWS: s/the the/the/. + Adjust style to fit what some of the hooks and release tools expect. + * cfg.mk (local-checks-to-skip): Remove sc_the_the. + (old_NEWS_hash): Update. + + maint/sc: remove cast of xmalloc return value + * lib/prepargs.c (prepend_default_options): Remove useless cast. + * cfg.mk (local-checks-to-skip): Remove sc_cast_of_x_alloc_return_value. + + maint: rename ChangeLog to ChangeLog-2008 + * ChangeLog-2008: Rename from ChangeLog. + * Makefile.am (EXTRA_DIST): Add ChangeLog-2008. + * .gitignore: Ignore ChangeLog. + + maint/sc: remove useless if-before-free tests + * src/diff.c (compare-files): Remove useless if stmts. + * src/dir.c (diff_dirs): Likewise. + * cfg.mk (local-checks-to-skip): Remove sc_avoid_if_before_free. + + maint: require newer automake, new non-major version string, dist-xz + * configure.ac: Drop -cvs suffix. Switch to git-based format. + Distribute xz-compressed tarballs, too. + Require automake-1.11. + Enable automake's --enable-silent-rules option. + + build: update build/release infrastructure + * bootstrap: Update from gnulib. + * bootstrap.conf (gnulib-modules): Add do-release-commit-and-tag, + git-version-gen, gnu-make, gnu-web-doc-update, gnumakefile, gnupload, + maintainer-makefile, update-copyright. + * gnulib-tests/Makefile.am: New file. + * cfg.mk: New file. + (local-checks-to-skip): List currently-failing tests, + so that "syntax-check" passes initially. + (manual_title): Define. diff --git a/ChangeLog-2008 b/ChangeLog-2008 new file mode 100644 index 0000000..f42ae0a --- /dev/null +++ b/ChangeLog-2008 @@ -0,0 +1,4273 @@ +2008-01-30 Paul Eggert + + * doc/diff.texi: Update Back-Cover text to reflect new GNU wording. + +2008-01-24 Paul Eggert + + * src/side.c [!HAVE_MBRTOWC]: Supply defns for mbstate_t and mbrtowc. + Problem reported by Bruno Haible. + +2008-01-23 Paul Eggert + + * src/side.c (print_half_line): Don't convert to unsigned char + unnecessarily. + + Don't mishandle multibyte characters in side-by-side format. + Problem reported by Erik Karlsson in + . + * bootstrap.conf (gnulib_modules): Add wcwidth. + * src/side.c: Include . + (print_half_line): Compute number of bytes and print widths of + multibyte characters. Inspired by an alternative solution from + Bruno Haible in + . + +2007-12-04 Paul Eggert + + * NEWS: New diff option --suppress-blank-empty (no longer -u default). + * doc/diff.texi (Detailed Unified): Trailing spaces are no longer + omitted. + (Trailing Blanks): New section. + (diff Options) Mention new option. + * src/diff.h (suppress_blank_entry): New decl. + * src/context.c (pr_unidiff_hunk): Support --suppress-blank-empty. + * src/util.c (print_1_line): Likewise. + * src/diff.c (longopts, main, option_help_msgid): Likewise. + (SUPPRESS_BLANK_EMPTY_OPTION): New constant. + + * configure.ac: Invoke gl_USE_SYSTEM_EXTENSIONS after gl_EARLY, + since gnulib now requires this order. + + * bootstrap: Import from gnulib. + +2007-08-17 Paul Eggert + + Break out diffseq.h into a separate file, so that gettext can use + this code. Idea and code from Bruno Haible. + * bootstrap.conf (gnulib_modules): Add diffseq. + * src/analyze.c (xvec, yvec, fdiag, bdiag, too_expensive, SNAKE_LIMIT): + (struct partition, diag, compareseq): Remove; now in diffseq.h. + (ELEMENT, EQUAL, OFFSET, EXTRA_CONTEXT_FIELDS, NOTE_DELETE, NOTE_INSERT): + (USE_HEURISTIC): New macros. + Include "diffseq.h". + (diff_2_files): Rewrite to use new diffseq.h interface. + + * bootstrap: Import from gnulib. + +2007-08-15 Paul Eggert + + * src/diff.c (compare_files): Use last_component rather than base_name, + adjusting to gnulib API change. This avoids a memory leak. + * src/sdiff.c (expand_name): Likewise. + * src/util.c (dir_file_pathname): Likewise. + + * doc/diff.texi (Copying This Manual): Adjust to new fdl.texi layout. + +2007-07-19 Paul Eggert + + * doc/diff.texi (White Space): Note that newline always ends a line, + so -w doesn't ignore newline-related changes. Problem reported by + David Kastrup. + + * COPYING: New file. + * AUTHORS: Update from GPLv2 to GPLv3. + * Makefile.am: Likewise. + * NEWS: Likewise. + * README: Likewise. + * README-hacking: Likewise. + * bootstrap: Likewise. + * bootstrap.conf: Likewise. + * configure.ac: Likewise. + * exgettext: Likewise. + * doc/Makefile.am: Likewise. + * lib/Makefile.am: Likewise. + * lib/cmpbuf.c: Likewise. + * lib/cmpbuf.h: Likewise. + * lib/prepargs.c: Likewise. + * m4/vararrays.m4: Likewise. + * man/Makefile.am: Likewise. + * ms/Makefile.am: Likewise. + * ms/README: Likewise. + * ms/config.bat: Likewise. + * ms/config.sed: Likewise. + * ms/config.site: Likewise. + * po/POTFILES.in: Likewise. + * src/Makefile.am: Likewise. + * src/analyze.c: Likewise. + * src/cmp.c: Likewise. + * src/context.c: Likewise. + * src/diff.c: Likewise. + * src/diff.h: Likewise. + * src/diff3.c: Likewise. + * src/dir.c: Likewise. + * src/ed.c: Likewise. + * src/io.c: Likewise. + * src/normal.c: Likewise. + * src/sdiff.c: Likewise. + * src/system.h: Likewise. + * src/util.c: Likewise. + + * src/ifdef.c: Fix typo: "GNU DIFF General Public License" should be + "GNU General Public License". Reported by Erich Guenther. + * src/side.c: Likewise. + +2007-06-18 Paul Eggert + + * bootstrap.conf (gnulib_modules): Add inttypes. + * src/context.c (print_context_label): Don't assume that time_t + fits in long int, since it doesn't in FreeBSD/arm. Problem + reported by Xin Li in + . + +2007-06-06 Paul Eggert + + * NEWS: Mention new sdiff aliases 1 and 2 for l and r. + * doc/diff.texi (Merge Commands): Likewise. + * src/sdiff.c (give_help): Give help for them. + (edit): Support them. + +2007-04-11 Paul Eggert + + * doc/diff.texi (Detailed diff3 Normal): "range is a singleton" -> + "there is only one line", for clarity. Suggested by Jerry Peek. + +2007-04-04 Paul Eggert + + * TODO: Mention possible sdiff improvement. + + * bootstrap: Sync from gnulib. + * src/cmp.c: Don't include exit.h; no longer needed. + * src/diff.c: Likewise. + * src/sdiff.c: Likewise. + * src/dir.c: Don't include strcase.h; no longer needed. + * README-alpha: Remove, replacing with: + * README-hacking: New file, taken from coreutils with some changes. + The rename is required by the change to 'bootstrap'. + +2006-11-15 Paul Eggert + + * src/analyze.c (build_reverse_script): Fix typo in comment. + Problem and fix reported by Daniel Hipschman. + +2006-11-14 Paul Eggert + + Don't assume SIGPIPE exists, and that sigblock and sigsetmask + exist if sigprocmask does not. Problem reported by Paul Edwards + for MVS 3.8. + * configure.ac (sigblock): Check whether this function is + available, if sigprocmask is not. + * src/sdiff.c (sigs): Omit SIGPIPE if it's not defined. + Put SIGINT last; all uses changed. + (handler_index_of_SIGPIPE): Omit if SIGPIPE is not defined. + (sigblock, sigsetmask) [!HAVE_SIGBLOCK]: New macros. + (sigprocmask): Don't dump core if O is null. + +2006-11-04 Paul Eggert + + * src/sdiff.c (sigprocmask) [! HAVE_SIGPROCMASK]: Cast 2nd arg to + sigset_t *, since it might be a literal 0. Problem reported by + Paul Edwards for MVS 3.8. + +2006-09-05 Paul Eggert + + * NEWS: diff -u no longer outputs trailing white space unless the + input data has it. Suggested by Jim Meyering. + * doc/diff.texi (Detailed Unified): Document this. + * src/context.c (pr_unidiff_hunk): Implement this. + + Modernize bootstrap procedure to match current gnulib. + * bootstrap: Sync with coreutils bootstrap, except check that + the directory build-aux exists before trying to copy to it. + * bootstrap.conf: New file. + (gnulib_modules): Add config-h, dup2, extensions, fcntl, fdl, + stat-macros, unistd. + * configure.ac: Invoke gl_EARLY and gl_INIT rather than + GNULIB_AUTOCONF_SNIPPET. + (AC_CONFIG_HEADER): Rename config.h to lib/config.h. + (AC_CHECK_HEADERS_ONCE): Don't check for fcntl.h, locale.h, + sys/file.h, unistd.h. We now use the fcntl and unistd modules, + and locale.h can be assumed for any C89 compiler. + (DIFFUTILS_PREREQUISITES): Remove. No longer needed now that + we use the stdint module. + (AC_CHECK_FUNCS_ONCE): Remove dup2, which is no longer needed + now that we use the dup2 module. + (AM_GNU_GETTEXT): Use need-formatstring-macros, and ... + (AM_GNU_GETTEXT_VERSION): specify version 0.15 instead of 0.14.5, + to be consistent with coreutils. + * lib/Makefile.am (noinst_LIBRARIES): + (lib_SOURCES, libdiffutils_a_LIBADD): + (libdiffutils_a_DEPENDENCIES, BUILT_SOURCES, EXTRA_DIST): + (MOSTLYCLEANFILES): Remove; now computed automatically. + (noinst_HEADERS, libdiffutils_a_SOURCES): Just append + our special files now. + * lib/cmpbuf.c: Include config.h unconditionally, since we + no longer define HAVE_CONFIG_H. + * lib/prepargs.c: Likewise. + * src/Makefile.am (LDADD): Use $(LIBINTL), not @LIBINTL@. + (diff_LDADD): Use $(LIB_CLOCK_GETTIME), not @LIB_CLOCK_GETTIME@. + * src/dir.c (dir_read): Use _D_EXACT_NAMLEN, not NAMELEN. + * src/system.h (volatile): Remove, since we assume C89 or better. + Include stat-macros.h. + (S_IRWXU, S_IRWXG, S_IRWXO, S_IRUSR, S_IWUSR): + Remove, since we now use stat-macros.h. + (SEEK_SET, SEEK_CUR): Remove, since we assume C89 or better. + Include unistd.h unconditionally, since we use unistd. + Likewise for fcntl.h. + (dup2): Remove, since we now use dup2. + (O_RDONLY, O_RWDR, O_BINARY): Remove, since we now use + fcntl. + Include dirent.h unconditionally. + (NAMLEN): Remove, replacing with.... + (_D_EXACT_NAMLEN): New macro. + Include inttypes.h unconditionally. + (PTRDIFF_MAX, SIZE_MAX, UINTMAX_MAX, strtoumax): Remove, since + we now use inttypes. + Include locale.h unconditionally. + (setlocale): Remove, since we now assume locale.h. + +2006-09-04 Jim Meyering + + * src/context.c (print_context_function): Do not print + trailing white space in a context header. + +2006-05-09 Paul Eggert + + * src/cmp.c (cmp): The previous fix wasn't quite right either, as + it mishandled 'cmp A B >/dev/null' when A is shorter than B and + differs before A's end-of-file, by outputting a bogus EOF message. + Also, it was inefficient if A and B were large. + +2006-05-07 Jim Meyering (tiny change) + + Fix bug introduced in 2006-03-09 change: + cmp always exits successfully, when stdout is redirected to /dev/null. + * src/cmp.c (cmp): When there's a difference, arrange to return nonzero + also when comparison_type is the new (from 2006-03-09) type_no_stdout. + +2006-05-07 Paul Eggert + + * src/context.c (pr_context_hunk, pr_unidiff_hunk): + Prefer fputs or fputc to fprintf, since it's a tad more efficient + with unlocked-IO on glibc. Long ago we avoided fputs to + work around an ancient SunOS bug, but that's no longer relevant. + * src/diff3.c (output_diff3, dotlines, undotlines): + (output_diff3_edscript, output_diff3_merge): Likewise. + This also avoids a gcc -Wformat-security warning reported + by Jim Meyering. + * src/ed.c (print_ed_hunk, print_forward_ed_hunk, print_rcs_hunk): + Likewise. + * src/normal.c (print_normal_hunk): Likewise. + +2006-05-06 Paul Eggert + + * src/io.c (find_identical_ends): Fix huge performance bug that I + introduced in the 2001-11-25 change: the code to remove the + identical suffix also looked at the trailing sentinel, which meant + the common suffix length was always incorrectly calculated to be + zero. Problem and fix reported by Daniel Hipschman. Instead of + his fix, revert to the pre-2001 code. + + * doc/diff.texi: Switch from GFDL 1.1 to 1.2. + +2006-03-13 Paul Eggert + + * src/system.h (PARAMS, PROTOTYPES): Remove; no longer needed. + (IF_LINT): New macro, to pacify GCC. + * src/analyze.c (diag, compareseq): Use IF_LINT. + * src/cmp.c (cmp): Likewise. + * src/diff3.c (process_diff): Likewise. Also, prefer NULL to 0. + * src/ifdef.c (do_printf_spec, scan_char_literal): Likewise. + * src/sdiff.c (edit): Likewise. + +2006-03-09 Paul Eggert + + * src/cmp.c (type_no_stdout): New constant. + (main): Use it to avoid bug when the "EOF on foo" message is + generated and stdout is /dev/null. + Problem reported by Vincent Lefevre (Debian bug 356083). + +2006-01-04 Paul Eggert + + * README-alpha: Describe CVS access better, using the README-alpha + from GNU tar. + * AUTHORS: Simplify list by removing legalisms. + * THANKS: Add Larry Wall, who contributed to manual. Update email + addresses. + * Makefile.am (SUBDIRS): Remove m4. Put lib first, then other + source files, so documentation can rely on programs being built. + * bootstrap: Import changes from Bison bootstrap. Add gettext, + gettime, sh-quote, stat-time, verify, version-etc-fsf modules. + Remove posixver module. Retrieve doc/fdl.texi from gnulib. + Handle gettext.m4 like glibc21.m4. Don't remove po/en.po. + * configure.ac (AC_PREREQ): Bump to 2.59. + (AC_INIT): Bump version to 2.8.7-cvs. + (AC_CONFIG_AUX_DIR): Change from config to build-aux. + Prefer AC_CHECK_HEADERS_ONCE to AC_CHECK_HEADERS + and AC_CHECK_FUNCS_ONCE to AC_CHECK_FUNCS. + Remove jm_AC_TYPE_INTMAX_T, jm_AC_TYPE_UINTMAX_T, + AC_STRUCT_ST_MTIM_NSEC. + (DIFFUTILS_PREREQUISITES): New macro. Call it. + (REGEX_MALLOC): Remove; no longer needed. + (AM_GNU_GETTEXT_VERSION): Now 0.14.15. + (AM_GNU_GETTEXT): Call. + (LIB_CLOCK_GETTIME): Remove; bootstrap now does that. + (AC_FUNC_SETMODE_DOS): Remove. + (AC_CONFIG_FILES): Remove m4/Makefile. + * doc/diff.texi: Use @- at end of lines that should end in white space, + so that Emacs doesn't remove the white space. + (diff Options): "diff -NUM" is a pure extension to POSIX, so support + it unconditionally. + * lib/Makefile.am (noinst_HEADERS): Remove quotesys.h. + (lib_SOURCES): Remove quotesys.c. + (DISTCLEANFILES): Remove. + (EXTRA_DIST): Remove setmode.h, waitpid.c. + * lib/cmpbuf.c (block_read): Reword to avoid gcc -W warning. + * lib/setmode.c, lib/setmode.h: Remove. + * m4/setmode.m4, m4/gnu-source.m4, m4/Makefile.am.in: Remove. + * m4/jm-glibc-io.m4: Remove. + * src/cmp.c: Don't include . + (specify_ignore_initial): Reword to avoid gcc -W warnings. + (main): Use freopen instead of setmode, since freopen is in POSIX. + * src/context.c: Revert most 2004-09-01 changes. Then: + (TIMESPEC_NS): Remove. All uses replaced by + get_stat_mtime_ns. + Include stat-time.h, strftime.h. + (nstrtime): Remove decl. + * src/diff.c: Revert most 2004-09-01 changes. Then: + Don't include , , . + Include , , . + All uses of quotesys replaced by sh-quote. + (main, compare_files): + Use freopen instead of setmode, since freopen is in POSIX. + (main): Don't complain about "diff -NUM'. + (main, set_mtime_to_now): + Adjust to stat-time.h macros when accessing nanoseconds. + * src/diff3.c: Include sh-quote.h rather than quotesys. All uses + changed. + * src/dir.c (dir_read): excluded_filename renamed to + excluded_file_name. + * src/io.c: Don't include . + (sip, read_files): Remove binary file stuff, leaving a FIXME behind. + A DOS expert needs to look at this. + * src/diff.c: Include sh-quote.h rather than quotesys.h. + All uses changed. + * src/system.h: Include verify.h. + (verify): Remove. All uses changed to verify.h version. + Include . + (TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM): Remove. Now uses + intprops.h versions. + (O_BINARY): New defns, taken from coreutils. + * src/util.c: Include sh-quote.h rather than quotesys.h. + All uses changed. + +2004-09-01 Paul Eggert + + * src/diff.c (recursive, new_file, unidirectional_new_file): + (report_identical_files): + Move into struct diffopt. All uses changed. + (exclude_options, compare_files, specify_style, check_stdout): + New arg OPT. All uses changed. + (GDIFF_MAIN): Remove. All uses removed. + (function_regexp_list, ignore_regexp_list): No longer static; now + locals in 'main'. + (main): Set opt.function_regexp, opt.ignore_regexp if using regexps; + all other code now tests these pointers rather than inspecting fastmap + internals. + New local OPT to hold former statics; initialize it. + (init_regexp_list): New function, used by main. + (summarize_regexp_list): Now returns struct re_pattern_buffer *, and + assumes reglist->regexps is not NULL. All uses changed. + + * src/context.c (find_function_last_search): Move into struct diffopt. + All uses changed. + (pr_context_label, pr_context_header, + print_context_script, find_function, find_hunk, mark_ignorable, + pr_context_hunk, pr_unidiff_hunk): New arg OPT. All uses changed. + (print_context_number_range, + print_unidiff_number_range): New arg OUT. All uses changed. + +2004-07-19 Stepan Kasal + + * src/ed.c (print_ed_hunk): Optimize the case where an insert's + last line is a single-dot line. + +2004-06-30 Paul Eggert + + * lib/setmode.c: + Don't include , since setmode.h now does this. + Include setmode.h first, to catch interface errors. + Assume HAVE_SETMODE_DOS is defined. + + * lib/setmode.h: Include stdbool.h. + +2004-04-26 Paul Eggert + + * bootstrap: Don't remove po/en.po. + +2004-04-13 Paul Eggert + + * NEWS, configure.ac (AC_INIT): Version 2.8.7. + * configure.ac (AM_GNU_GETTEXT_VERSION): Add. + (XGETTEXT): Restore from pre-2004-04-12 version. This fixes + a bug that lost many msgids in doc/diffutils.pot. + * bootstrap: New file. + * exgettext: Don't generate a temporary file, as this runs afoul + of "make distcheck" which operates with read-only directories. + * Makefile.am (EXTRA_DIST): Add bootstrap. + Remove config/config.rpath as it is deduced automatically these days. + +2004-04-12 Paul Eggert + + * NEWS, configure.ac (AC_INIT): Version 2.8.6. + + * NEWS: Add news for 2.8.4, 2.8.6. + + * README: Move copyright notice to end. Defer to "configure + --help" for special "configure" options. Suggest latest libiconv. + Update version numbers of Autoconf etc. to current. + + * configure.ac: Quote various arguments better. + (AC_CONFIG_MACRO_DIR): Add call, specifying "m4". + (AC_CONFIG_HEADER): Replaces AM_CONFIG_HEADER. + (gl_USE_SYSTEM_EXTENSIONS): Replaces AC_GNU_SOURCE. + (AC_ISC_POSIX): Remove; nobody ports to ancient ISC any more. + (AC_PROG_CPP, AC_PROG_INSTALL, AC_C_INLINE, + AC_HEADER_STDBOOL, AC_HEADER_STDC, AM_GNU_GETTEXT, XGETTEXT, + AC_HEADER_STAT, AC_FUNC_VPRINTF, jm_FUNC_GLIBC_UNLOCKED_IO, + jm_FUNC_GNU_STRFTIME, jm_FUNC_MALLOC, jm_FUNC_REALLOC, + jm_PREREQ_C_STACK, jm_PREREQ_ERROR, jm_PREREQ_HARD_LOCALE, + jm_PREREQ_QUOTEARG, jm_PREREQ_REGEX, AC_FUNC_FNMATCH_GNU, jm_AC_DOS): + Remove; not needed here, as our files don't use them directly + or we rely on gnulib modules. + (AC_C_CONST): Remove; we assume C89 now. + (AC_CHECK_HEADERS): Remove libintl.h, limits.h, stdlib.h, string.h, + time.h. + (AC_CHECK_TYPE): Remove ptrdiff_t, ssize_t. + (AC_CHECK_FUNCS): Remove diraccess, strchr, strerror, tmpnam). + (AC_REPLACE_FUNCS): Remove memchr, mkstemp, strcasecmp. + (GNULIB_AUTOCONF_SNIPPET): Add call. This replaces much of + the above. + (AC_CONFIG_FILES): Remove lib/posix/Makefile. + (AC_CONFIG_COMMANDS): Remove. + + * doc/diff.texi (dircategory): Change to "Text creation and + manipulation" from "GNU packages". + (Translations): New node. + (Overview): Improve quality of algorithm citations. + (Binary): -q doesn't exactly cause diff to assume files are binary. + (Normal): Place after Side by Side, since it's less important. + (Detailed Context, Detailed Unified, Detailed ed, + Detailed if-then-else, diff3 Hunks, Detailed diff3 Normal): + Place at end of menu. + (Detailed Unified): Mention that fractional timestamps are + omitted on hosts that don't support them. + Mention what happens when hunks contain just one line. + (Line Group Formats, Reject Names): Fix duplicate-word typos. + (Comparing Directories): Trailing white space and empty lines are + ignored in the -X file. + (diff Options): Add --strip-trailing-cr. + (Projects): gnu -> gvc@gnu.org. + + * lib/Makefile.am (SUBDIRS): Remove. + (EXTRA_DIST, noinst_HEADERS): Remove most entries. + (libdiffutils_a_SOURCES): Now just lib_SOURCES. + (lib_SOURCES): New macro. + (DISTCLEANFILES, MOSTLYCLEANFILES): Set to empty now. + (gnulib.mk): Include: this does most of the work eliminated + by the above changes. + + * lib/inttostr.c (inttostr): Protect i < 0 by compile-time + test intended to suppress compiler warnings. + * lib/inttostr.h: Include limits.h unilaterally. + (CHAR_BIT): Remove. + (PARAMS): Remove; all uses changed. + * lib/setmode.c (__attribute__): New macro. + (set_binary_mode): Define only if HAVE_SETMODE_DOS. + Otherwise define a dummy static char, as C89 requires + that we define something. + * lib/setmode.h (set_binary_mode): Return true, not 1. + + * src/analyze.c, src/context.c, src/diff.c, src/io.c, src/util.c: + Do not include regex.h, as diff.h does this now. + + * src/cmp.c: Sort includes. Include , . + (specify_comparison_type): Don't report an error if the comparison + type has already been specified the same way as this one. + + * src/cmp.c (usage): Mention exit status. + * src/diff.c (option_help_msgid): Likewise. + * src/diff3.c (usage): Likewise. + * src/sdiff.c (usage): Likewise. + + * src/cmp.c (main): Adjust to latest gnulib c_stack_action + calling conventions. + * src/diff.c (main): Likewise. + * src/diff3.c (main): Likewise. + * src/sdiff.c (main): Likewise. + + * src/cmp.c (main): Adjust to latest version_etc calling conventions. + * src/diff.c (main): Likewise. + * src/diff3.c (main): Likewise. + * src/sdiff.c (main): Likewise. + + * src/diff.c: Include . + (binary): Define to true if not declared. + (longopts): Set tabsize flag to 1. + (main): Don't output nanoseconds if platform lacks them. + Don't treat files as binary if !binary. + (set_mtime_to_now): Use 0, not NULL. + (compare_files): Mark files as nonexistent if it looks like + 'patch' created inaccessible regular empty files to denote + nonexistent backups. Don't compare such files. + Clear st_* members of status of nonexistent file. + Remove now-unnecessary tests. + + * src/diff.h: Include regex.h, unlocked-io.h. + (struct file_data.changed): Now char *, not bool *, to save + space on hosts where bool takes more space than char. + All uses changed. + + * src/diff3.c: Include unlocked-io.h. + (strip_trailing_cr): New var. + (STRIP_TRAILING_CR_OPTION): New enum. + (longopts, main, option_help_msgid, read_diff): + Add --strip-trailing-cr support. + (read_diff): Exit with status 126 (not 127) if errno != ENOENT + after failed execvp in child. Report this in parent. + + * src/dir.c: Include . + (failed_locale_specific_sorting): Renamed from failed_strcoll. + All uses changed. + (compare_names): Don't invoke strcasecmp first thing when + ignore_file_name_case; if locale_specific_sorting, we should + just use that. + + * src/ifdef.c (next_line): Remove; replace with... + (next_line0, next_line1): New vars. + (print_ifdef_script, print_ifdef_hunk): + Use them to fix line-number computation bug. + + * src/io.c (find_and_hash_each_line): Don't convert char * + to unsigned char *; just leave pointers as char *. This + lessens the number of potentially-dangerous casts. + * src/util.c (lines_differ): Likewise. + + * src/sdiff.c: Include , . + (check_child_status): Renamed from ck_editor_status, and + accept a new arg MAX_OK_STATUS. All callers changed. + Handle status 126/127 as per POSIX. + (edit): Likewise. + (main): Likewise. Fix getopt typo: -E wasn't supported. + + * src/system.h (S_IRWXU, S_IRWXG, S_IRWXO): Define if not defined. + (S_IXUSR, S_IXGRP, S_IXOTH): Remove. + Include unconditionally, since we can assume C89 now. + Likewise for , . + (getenv, EXIT_SUCCESS, EXIT_FAILURE, SSIZE_MAX, strchr, strrchr, + memcmp, memcpy): Remove decl; no longer needed. + (strcasecoll, strcasecmp): Define if not built in. + (CTYPE_DOMAIN, ISPRINT, ISSPACE, TOLOWER, _tolower, errno): Remove; + we now assume C89 or better. All uses changed. + Include unconditionally now, since gnulib supports it + if the C compiler doesn't. All boolean uses of 0 and 1 now + changed to false and true. + (lin_is_printable_as_long_int): Renamed from lin_is_printable_as_long. + + * src/util.c (begin_output): Fix bug: 0 wasn't cast to char * arg, + which led to undefined behavior on 64-bit hosts. + Use more-standard test for exit status 126 versus 127. + (finish_output): Likewise. + (analyze_hunk): Do not cast bool to int. + +2004-03-15 Paul Eggert + + * src/cmp.c (main): Don't consider two files with the same name to + be the same, if their initial skip values differ. This fixes a + bug reported by Hideki Iwamoto in + . + +2004-03-11 Paul Eggert + + * src/analyze.c (diag): Return void, not lin, since the return + value wasn't needed. All callers changed. + (diag, diff_2_files): + Use 'true' and 'false' instead of '1' and '0', when appropriate. + (compareseq): Use lin const * local variables instead of lin *. + Don't bother checking diag's return value. + (shift_boundaries, build_reverse_script, build_script, diff_2_files): + Use char arrays, not bool arrays, since + sizeof (bool) might be greater than 1. + +2004-02-09 Paul Eggert + + * m4/setmode.m4 (AC_FUNC_SETMODE_DOS): AC_LIBOBJ(setmode) if + we would return true. + +2002-10-14 Paul Eggert + + * src/Makefile.am (diff3.$(OBJEXT), diff.$(OBJEXT), + sdiff.$(OBJEXT)): Rename from (misspelled) diff3.$(OBJECT), + diff.$(OBJECT), sdiff.$(OBJECT). Patch by Paul D. Smith in + . + Bug reported by Chris Bainbridge. + +2002-10-13 Paul Eggert + + * src/Makefile.am (MOSTLYCLEANFILES): Add paths.ht. + (paths.h): Send output to paths.ht first, and then rename to + paths.h at the end. This avoids problems if the disk is full. + It also works around what appears to be a bug with GNU make -j + (3.79.1); see . + +2002-06-27 Paul Eggert + + * NEWS, configure.ac (AC_INIT): Version 2.8.4. + + * config/config.sub: Sync with latest version maintained in other + packages. + + * lib/file-type.h: Protect against double inclusion. Detect + whether has been included. Fix from Jim Meyering. + + * src/analyze.c (briefly_report): Don't say "Binary files differ", + since one of the files may not be a binary file. + Bug reported by Dan Jacobson. + +2002-06-22 Paul Eggert + + * lib/c-stack.c (segv_handler, c_stack_action) [! defined + SA_SIGINFO]: Do not assume SA_SIGINFO behavior. + Bug reported by Jim Meyering on NetBSD 1.5.2. + +2002-06-16 Paul Eggert + + * NEWS, configure.ac (AC_INIT): Version 2.8.3. + + * config/depcomp, config/missing, README: Update to automake 1.6.2. + + * po/LINGUAS: Add en_US. + * po/en_US.po: New file. + * po/POTFILES.in: Remove lib/freesoft.c. + Add lib/file-type.c, lib/version-etc.c, lib/xmalloc.c. + +2002-06-15 Paul Eggert + + * doc/diff.texi (Special Files): Document behavior of symlink + loops. + + * lib/Makefile.am (noinst_HEADERS): Remove freesoft.h. + Add version-etc.h. + (libdiffutils_a_SOURCES): Remove freesoft.c. Add version-etc.c. + * lib/freesoft.c, lib/freesoft.h: Remove. + * lib/version-etc.h (PARAMS): Remove; we now assume C89 at least. + + * lib/version-etc.h (version_etc): Remove package and version args. + (version_etc_copyright): Remove. + * lib/version-etc.c: Likewise. + Do not include unlocked-io.h; no longer needed. + Include gettext.h rather than libinto.h. + (_): Define unconditionally. + (version_etc): Adjust wording to match current GNU coding standards. + Translate "(C)" if possible. + + * lib/version-etc.c, lib/version-etc.h: New files, taken from + fileutils. + + * src/Makefile.am (cmp_SOURCES, diff3_SOURCES, sdiff_SOURCES, + diff_SOURCES): Remove version.c. + (MAINTAINERCLEANFILES, $(srcdir)/version.c): Remove. + + * src/cmp.c: Include version-etc.h, not freesoft.h. + (copyright_notice): Remove. + (main): Use version_etc to print version. + * src/diff.c, src/diff3.c, src/sdiff.c: Likewise. + + * src/cmp.c (version_string): Remove decl. + * src/diff.h, src/diff3.c, src/sdiff.c: Likewise. + +2002-06-11 Paul Eggert + + * lib/fnmatch.c, lib/fnmatch_loop.c (WIDE_CHAR_SUPPORT): + New macro. Use it uniformly instead of + (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H). + It also uses HAVE_BTOWC, to fix a porting bug on Solaris 2.5.1 + reported by Vin Shelton. + * m4/fnmatch.m4 (_AC_LIBOBJ_FNMATCH): Check for btowc. + + * NEWS, configure.ac (AC_INIT): Version 2.8.2. + + * ABOUT-NLS, config/config.guess, config/config.sub, + config/depcomp, config/texinfo.tex, lib/posix/regex.h, + m4/c-bs-a.m4, m4/gettext.m4, m4/gnu-source.m4, m4/lib-link.m4, + m4/malloc.m4: + Update to recent version (maintained in other packages). + * m4/prereq.m4 (jm_PREREQ_EXCLUSIVE): AC_FUNC_FNMATCH_GNU + no longer takes a lib. + + * README: Incorporate contents from INSTALLME. + * INSTALLME: Remove. + * Makefile.am (EXTRA_DIST): Remove INSTALLME. + + * configure.ac (AC_GNU_SOURCE): Move up, so that it affects + later compilations properly. + (DEFAULT_DIFF_PROGRAM, AC_TYPE_SIGNAL): Remove. + (jm_AC_TYPE_INTMAX_T): Add. + (AC_FUNC_FNMATCH_GNU): Use this, instead of AC_FUNC_FNMATCH. + (AC_CONFIG_LINKS): regex.hin renamed from regex_.h. + + * doc/diff.texi: Reword "@option{-f} and @option{--foo}" to + "@option{-f} or @option{--foo}". + Use @acronym instead of @sc where appropriate. + (Specified Lines): Renamed from Specified Folding. + (Comparison, Blank Lines): + Clarify wordings for Blank Lines and Specified Lines nodes. + (Binary): Mention --verbose and --print-bytes. + (Tabs, sdiff Option Summary, diff Options): + New option --tabsize=COLUMNS. + + * lib/Makefile.am (EXTRA_DIST): Add fnmatch_loop.c. + (noinst_HEADERS): fnmatch_.h renamed from fnmatch.hin. + regex_.h renamed from regex.hin. + Add file-type.h. + (libdiffutils_a_SOURCES): Add file-type.c. + (DISTCLEANFILES): Remove fnmatch.hno, regex.hno. + + * lib/c-stack.c (__attribute__): New macro. + (EOVERFLOW): Define if not defined. + (stack_t): Define to struct sigaltstack if not defined or declared. + Include , if available. + Include if DEBUG. + Do not include or . + (c_stack_die): Remove info and context args. All uses changed. + (segv_action): Likewise. + (alternate_signal_stack): Change uintmax_t to long, to ease porting. + (get_stack_location, min_address_from_argv, max_address_from_argv, + null_action): New functions. + (stack_base, stack_size): New vars. + (segv_handler): context arg may not be used. + Use global stack_base, stack_size if + ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC. + Add debug code. + Invoke die (rather than segv_action) to exit. + (c_stack_action): Accept new argv arg, and simpler handler arg. + All uses changed. Move code into new functions above. + Allow null action. + [! (defined SA_ONSTACK && defined _SC_PAGESIZE)]: Assume all segvs + are stack overflows. + (main) [DEBUG]: Describe what output should be like. + + * lib/c-stack.h (siginfo_t, c_stack_die): Remove decl. + + * lib/file-type.c, lib/file-type.h: New files. These contain code + that was in src/diff.c, but is now librarified and spiffed up a + bit. Jim Meyering suggested this. + + * lib/fnmatch.c (alloca, __builtin_expect): Define for non-GCC hosts. + : Include only if HAVE_STRINGS_H. + : Include if we include stdlib.h. + Do not comment out all code if ! HAVE_FNMATCH_GNU. + (getenv): Do not declare if HAVE_DECL_GETENV. + (__strchrnul, __wcschrnul): Remove; not used. + (MEMPCPY): Use mempcpy if not _LIBC; use memcpy if neither _LIBC + nor HAVE_MEMPCPY. + (FOLD) [HANDLE_MULTIBYTE]: Do not pass wide char to ISUPPER. + (STRLEN, STRCAT, MEMPCPY) [HANDLE_MULTIBYTE && !defined _LIBC]: + Use wcslen rather than __wcslen, and likewise for wcscat, wmempcpy. + (MEMPCPY) [HANDLE_MULTIBYTE]: Use wmempcpy if not _LIBC; use wmemcpy + if neither _LIBC nor HAVE_WMEMPCPY. + * lib/fnmatch_.h (__const): Do not define to empty, as this breaks + Sun cc. The code doesn't work with K&R anyway. + * lib/fnmatch_loop.c (struct patternlist.str): Size 1, not 0, + as C89 requires this. + (NEW_PATTERN): Use offsetof, not sizeof, since str now has size 1. + * lib/fnmatch_.h: Import from glibc fnmatch.h. + * lib/fnmatch.c, lib/fnmatch_loop.c: Import from glibc. + + * lib/posixver.c: Include posixver.h. + + * lib/regex_.h: Renamed from lib/regex.hin. + + * m4/c-stack.m4 (jm_PREREQ_C_STACK): Do not AC_REQUIRE + jm_AC_TYPE_UINTMAX_T and do not use uintmax_t. + Check for sys/resource.h, uccontext.h. + Check for decls and existence of getcontext, sigaltstack. + Check for stack_t. + + * m4/codeset.m4, m4/glibc21.m4, m4/lcmessage.m4: Remove. + + * m4/fnmatch.m4: Update to latest Autoconf CVS for AC_FUNC_FNMATCH_GNU. + * m4/gnu-source.m4: Likewise, for AC_GNU_SOURCE (renamed from + AC__GNU_SOURCE). + + * m4/mbstate_t.m4 (AC_TYPE_MBSTATE_T): Renamed from AC_MBSTATE_T. + All uses changed. Upgrade to recent Autoconf CVS. + + * m4/stdbool.m4 (AC_HEADER_STDBOOL): Do not cast pointer to + bool in integer constant expression; C99 does not allow it. + Reported by Bruno Haible. + + * po/LINGUAS: Add hu, pt_BR. + * po/hu.po, po/pt_BR.po: New files. + + * src/Makefile.am (noinst_HEADERS): Remove diff.h. + (DEFS): Remove. + (diff_sources): Add diff.h. + (MOSTLYCLEANFILES): New macro. + (cmp.$(OBJEXT) diff3.$(OBJECT) diff.$(OBJECT) sdiff.$(OBJECT)): Depend + on paths.h. + (paths.h): New rule. + + * src/analyze.c, src/cmp.c, src/diff.c, src/diff3.c, src/io.c, + src/sdiff.c: Include . + + * src/cmp.c: Include paths.h. + (copyright_notice): Renamed from copyright_string. + Now a msgid, so that copyright symbol can be translated. + All uses changed. + * src/diff.c, src/diff3.c, src/sdiff.c: Likewise. + + * src/diff.c: Include posixver.h. + (TABSIZE_OPTION): New constant. + (main): Allow widths up to SIZE_MAX. + (filetype): Move to lib/file-type.c and rename to file_type. + All uses changed. + + * src/diff.c (longopts, main, usage): New option --tabsize=COLUMNS. + * src/io.c (find_and_hash_each_line): Likewise. + + * src/diff.h (TAB_WIDTH): Remove. + (tabsize): New decl. + (sdiff_half_width, sdiff_column2_offset): Now size_t rather than + unsigned int. + + * src/diff3.c (skipwhite, readnum): New functions. + (process_diff_control): Use them. + (SKIPWHITE, READNUM): Remove. + (read_diff): Don't worry about errno == ENOEXEC. + + * src/sdiff.c (catchsig, signal_handler, initial_action): Signal + handlers return void, not RETSIGTYPE, since we no longer support + K&R. + (TABSIZE_OPTION): New constant. + (longopts, usage, main): New option --tabsize=COLUMNS. + (cleanup): New arg signo. All uses changed. + (ck_editor_status, main, edit): Don't worry about ENOEXEC. + + * src/side.c (tab_from_to, print_half_line, print_1sdiff_line): + New option --tabsize=COLUMNS. + + * src/system.h (S_ISBLK, S_ISCHR, S_ISDIR, S_ISFIFO, S_ISREG, + S_ISSOCK): Remove; now in lib/file-type.h. + + * src/util.c (finish_output): Check for ENOEXEC. + (lines_differ, output_1_line): New option --tabsize=COLUMNS. + (analyze_hunk): If -b or -w is also specified, -B now considers + lines to be empty if they contain only white space. + +2002-04-05 Paul Eggert + + * NEWS, configure.ac (AC_INIT): Version 2.8.1. + + * configure.ac (AC_HEADER_STDBOOL): Add. + (AC_CHECK_HEADERS): Remove stdbool.h. + * m4/stdbool.m4: New file. + * m4/prereq.m4 (jm_PREREQ_EXCLUDE): + Use AC_HEADER_STDBOOL rather than AC_CHECK_HEADERS(stdbool.h). + (jm_PREREQ_HASH): Likewise. + + * src/system.h (SSIZE_MAX): Define if limits.h doesn't. + + * src/analyze.c (diff_2_files): Assign PTRDIFF_MAX - 1 to a + size_t variable, just in case there's a problem with ptrdiff_t + versus size_t. + + * lib/cmpbuf.c (errno): Remove decl; K&R C is no longer supported. + Include limits.h. + (SIZE_MAX, SSIZE_MAX): Define if standard headers don't. + (MIN): New macro. + (block_read): Do not attempt to read more than SSIZE_MAX bytes, as the + resulting behavior is implementation-defined. Work around bug in + Tru64 5.1, which can't read more than INT_MAX bytes at a time. + * src/cmp.c (cmp): Use block_read instead of read, to work + around Tru64 5.1 bug. + * src/diff3.c (read_diff): Likewise. + * src/diff3.c: Include cmpbuf.h. + + * THANKS: Add Ulrich Drepper. + + * INSTALLME: Mention GNU texinfo. + + * doc/diff.texi: + Use new @copying directive. + Put @contents first, not last, since Texinfo now suggests this. + Fix bug in -w documentation noted by Karl Berry. + Mention links for speedup. + New node "Speedups" for future speedups. + Just say "Index", not "Concept Index". + +2002-03-26 Paul Eggert + + * src/Makefile.am: + (INCLUDES): Remove this obsolete macro, replacing it with: + (AM_CPPFLAGS): New macro. + +2002-03-26 Albert Chin-A-Young + + * src/Makefile.am (datadir): Remove, as it conflicts with --datadir. + +2002-03-26 Paul Eggert + + * doc/diff.texi (dircategory GNU packages): Fix typo: a "* " was + missing before the menu entry. Bug diagnosed by Adam Heath. + Also, put this dircategory after the Individual utilities dircategory, + to work around a compatibility problem with Debian install-info. + +2002-03-24 Eli Zaretskii + + * src/io.c (sip): Do not mishandle buffered count when reverting + to text mode. + +2002-03-23 Paul Eggert + + * NEWS, configure.ac (AC_INIT): Version 2.8. + * configure.ac (AC_PREREQ): 2.53. + * INSTALLME: Upgrade to gettext 0.11.1 and help2man 1.27. + + * doc/diff.texi: Upgrade the description of `patch' to GNU patch + 2.5.4, and revamp the documentation accordingly. + + * src/diff.c (main): Fix typo that prevented diff -y from working. + Bug reported by Mitsuru Chinen. + +2002-03-15 Paul Eggert + + * lib/c-stack.c (c_stack_die) [!HAVE_SIGINFO_T]: Don't use info. + Bug reported by Eli Zaretskii. + +2002-03-15 Eli Zaretskii + + * ms/config.sed: Tweak editing of install-info-am target. + +2002-03-12 Paul Eggert + + * NEWS, configure.ac (AC_INIT): Version 2.7.10. + + * NEWS: cmp -l -s and cmp -s -l are not allowed. + Deprecate diff -h, -H, -L, -P, --inhibit-hunk-merge. + + * configure.ac (jm_PREREQ_HARD_LOCALE): Add. + (AM_INIT_AUTOMAKE): Do not distribute shar file. + + * doc/diff.texi (Overview): byte != character. + (Detailed Context, Detailed Unified, Alternate Names, diff Options): + Do not document diff -L. + (Comparing Directories, Making Patches, diff Options): + Do not document diff -P. + (diff Performance, sdiff Option Summary, diff Options, sdiff Options): + Do not document diff -H. + (diff Performance, diff Options): Do not document --horizon-lines. + (cmp Options): Prefer -b to -c. + (cmp Options, diff Options, diff3 Options, patch Options, + sdiff Options): Put short options next to the similar long options. + Document --help, and use the same wording for --verbose. + (diff3 Options): Fix typo in description of -E, which used wrongly used + "-e" instead of "-E". + + * lib/hard-locale.c (alloca): Remove. + Include stdlib.h if available, for malloc. + (hard_locale): Use malloc, not alloca, so that we need not worry about + alloca issues. Test for storage allocation failure. + + * m4/prereq.m4 (jm_PREREQ): Add jm_PREREQ_HARD_LOCALE. + (jm_PREREQ_HARD_LOCALE): New macro. + + * src/cmp.c (specify_comparison_type): New function. + (check_stdout): "indices and codes" -> "byte numbers and values" + (main): Detect clashing options. + (cmp): Use "byte" rather than "char" if a translation for "byte" + is available, even when in the POSIX locale. + + * src/diff.c (option_help_msgid): Do not document -L, -P, + --horizon-lines, --inhibit-hunk-merge, -H. + * src/diff.h: -L -> --label + +2002-03-11 Paul Eggert + + * NEWS, configure.ac (AC_INIT): Version 2.7.9. + + * INSTALLME: Update to autoconf 2.53, automake 1.6, help2man + 1.25 with patch. + + * configure.ac (AC_INIT): + Change package name from diff to diffutils. + (AM_INIT_AUTOMAKE): Use new form, with option gnits, + rather than old from that duplicated AC_INIT. + (AM_MISSING_PROG): Add help2man. + (REGEX_MALLOC): Define. + (AC_CONFIG_FILES): Add man/Makefile. + + * Makefile.am (AUTOMAKE_OPTIONS): Remove. + * doc/Makefile.am (AUTOMAKE_OPTIONS): Remove. + * lib/Makefile.am (AUTOMAKE_OPTIONS): Likewise. + * ms/Makefile.am (AUTOMAKE_OPTIONS): Likewise. + * src/Makefile.am (AUTOMAKE_OPTIONS): Likewise. + + * lib/c-stack.c: Include + (ENOTSUP): Define if errno.h doesn't. + (SA_NODEFER, SA_ONSTACK, SA_RESETHAND, SA_SIGINFO, SIGSTKSZ, + _SC_PAGESIZE, ALTERNATE_STACK_SIZE, stack_t, sigaltstack): + Remove; we now assume them all when + HAVE_XSI_STACK_OVERFLOW_HEURISTIC, so we don't need + substitutes. + (): Include only if HAVE_XSI_STACK_OVERFLOW_HEURISTIC. + (alternate_signal_stack): Now of size SIGSTKSZ. + (segv_handler): Simplify, under the assumption that + HAVE_XSI_STACK_OVERFLOW_HEURISTIC is nonzero. + (c_stack_action): Likewise. + (exit_failure) [DEBUG]: Initialize to 0, not 1. + (recurse, main) [DEBUG]: Remove main args. + + * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Change + wording of message. Do not check for stdbool.h or ucontext.h, + or for ucontext_t or sigaction or sigaltstack. + + * po/LINGUAS: Add zh_TW. + + * Makefile.am (SUBDIRS): Add man. + * man/Makefile.am: New file. + * src/cmp.c (usage): Reword for help2man. + * src/diff.c (option_help_msgid): Likewise. + * src/diff3.c (option_help_msgid, usage): Likewise. + * src/sdiff3.c (option_help_msgid, usage): Likewise. + Reword for help2man. + + * THANKS: Add email address for Tower. + + * config/config.guess, config/config.sub, config/depcomp, + config/install-sh, config/mdate-sh, config/missing, + config/mkinstalldirs, config/texinfo.tex: Update + to recent version (maintained in other packages). + +2002-03-04 Bruno Haible + + * m4/gettext.m4 (AM_GNU_GETTEXT): Set LIBINTL and LTLIBINTL to empty if + no preinstalled GNU gettext was found. + +2002-03-02 Eli Zaretskii + + * ms/config.sed: Tweak editing of install-info-am and + uninstall-info-am targets, to include 8+3-butchered names of Info + files. + +2002-02-28 Paul Eggert + + * NEWS, configure.ac (AC_INIT, AM_INIT_AUTOMAKE): Version 2.7.8. + + * doc/diff.texi: Add vr index. + Update copyright to 2002. + (Standards conformance): New chapter. + (Binary): Differing binary files are trouble unless the user asked for + brief output. + (Detailed Context): Prefer ISO time stamp format in discussion. + (Detailed Unified, Pagination): Likewise. + (Less Context): Likewise. Also use short option. + (Alternate Names): Separate option from arg. + (Making Patches): Mention -U 2. + (diff Options): Deprecate -LINES, as POSIX 1003.1-2001 does not + allow it. + + * INSTALLME: Update advice for Solaris installation problems. + We no longer use a test version of gettext. + Autoconf test version updated from 2.52f to 2.52h. + POSIX 1003.1-2001 patch for Automake. + + * configure.ac (AC__GNU_SOURCE): Add this, + replacing AH_VERBATIM of _GNU_SOURCE. + (tempname): Use AC_LIBOBJS, not LIBOBJS=, as now required by autoconf. + (jm_PREREQ_C_STACK): Add. + (AC_CONFIG_FILES): Remove intl/Makefile. + (AM_GNU_GETTEXT): Add external arg, from gettext 0.11. + + * lib/c-stack.c, lib/c-stack.h, lib/exitfail.c, lib/exitfail.h, + lib/posixver.c, lib/posixver.h, m4/c-stack.m4, m4/gnu-source.m4, + po/cs.po, po/ja.po: New files. + + * intl/ChangeLog, intl/Makefile.in, intl/VERSION, + intl/bindtextdom.c, intl/config.charset, intl/dcgettext.c, + intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c, + intl/dngettext.c, intl/explodename.c, intl/finddomain.c, + intl/gettext.c, intl/gettextP.h, intl/gmo.h, intl/hash-string.h, + intl/intl-compat.c, intl/l10nflist.c, intl/libgnuintl.h, + intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, + intl/locale.alias, intl/localealias.c, intl/localename.c, + intl/ngettext.c, intl/os2compat.c, intl/os2compat.h, intl/osdep.c, + intl/plural-eval.c, intl/plural-exp.c, intl/plural-exp.h, + intl/plural.c, intl/plural.y, intl/ref-add.sin, intl/ref-del.sin, + intl/textdomain.c, m4/isc-posix.m4, m4/libtool.m4: Remove. + + * ABOUT-NLS: Update to Gettext 0.11. + + * Makefile.am (SUBDIRS): Remove intl. + + * config/config.guess, config/config.rpath, config/config.sub, + config/texinfo.tex, config/depcomp, config/texinfo.tex, + lib/tempname.c: Update to latest version from other packages. + + * lib/xalloc.h (xalloc_exit_failure): Remove; subsumed by exit_failure. + * lib/xmalloc.c: Include exitfail.h. + (xalloc_exit_failure): Remove; subsumed by exit_failure. + All uses changed. + + * lib/Makefile.am (noinst_HEADERS): Add c-stack.h, exitfail.h. + (libdiffutils_a_SOURCES): Add c-stack.c, exitfail.c, quotesys.c. + (INCLUDES): Remove. + + * lib/cmpbuf.h (buffer_lcm): New arg LCM_MAX. + * lib/cmpbuf.c: Include errno.h. + (errno): Declare if !STDC_HEADERS. + Include signal.h. + (SA_RESTART): Define if not already defined. + Include . + (PTRDIFF_MAX): Define if not already defined. + (TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM): Likewise. + (block_read): Accommodate ancient AIX hosts that set errno to EINTR + after uncaught SIGCONT. + (buffer_lcm): Return a reasonable size if the multiple is too large. + New arg LCM_MAX. All callers changed. + + * lib/hard-locale.c: Include "hard-locale.h". + (hard_locale): Ignore ENABLE_NLS, since we want to operate on + locales other than LC_MESSAGES. + + * m4/prereq.m4 (jm_PREREQ): Add jm_PREREQ_POSIXVER. + (jm_PREREQ_POSIXVER): New macro. + + * m4/setmode.m4 (AC_FUNC_SETMODE_DOS): + Check for fcntl.h and unistd.h unconditionally. + Suggested by Bruno Haible. + + * po/LINGUAS: Add cs, ja. + * po/POTFILES.in: Add lib/c-stack.c, src/dir.c. + + * src/Makefile.am (datadir): @DATADIRNAME@ -> share. + (INCLUDES): Remove intl. + (LDADD): Change INTLLIBS to LIBINTL. + No longer need to link libdiffutils.a twice. + + * src/analyze.c (diff_2_files): + Avoid arithmetic overflow in buffer size calculation. + + * src/cmp.c: Include c-stack.h, exitfail.h. + (hard_locale_LC_MESSAGES): Depend on ENABLE_NLS. + (try_help, check_stdout, main, cmp): 2 -> EXIT_TROUBLE. + (main): Check for stack overflow. + 0 -> EXIT_SUCCESS. + 1 -> EXIT_FAILURE. + (cmp): Likewise. + Accommodate ancient AIX hosts that set errno to + EINTR after uncaught SIGCONT. + + * src/context.c (pr_context_hunk): + Do not dump core if an enormous context causes an + arithmetic overflow. + (pr_unidiff_hunk): Likewise. + (find_hunk): Likewise. + + * src/diff.h: unsigned -> unsigned int. + * src/diff.c: Include c-stack.h, exitfail.h. + Do not include signal.h. + (specify_style, specify_value): Bring these routines back, as POSIX + requires that the order of options not matter. + (shortopts): New constant. + (group_format_option, line_format_option): New constants. + (main): 0 -> EXIT_SUCCESS, 1 -> EXIT_FAILURE, 2 -> EXIT_TROUBLE. + Ensure that order of options does not matter. + Check for stack overflow. + If contexts overflow, substitute LIN_MAX, as that's good enough. + If multiple contexts are specified, use their maximum. + -c is equivalent to -C 3 now, instead of having an implicit context; + likewise for -u and -U 3. + Use specify_style and specify_value. + (SIGCHLD): Do not define; now done in a header. + Use new style time stamp format for -u / -U. + Reject numeric-string options if operating in POSIX 1003.1-2001 mode. + Avoid overflow problems with tab width. + Simplify from-file and to-file code. + (usage): Do not mention obsolete options. + (filetype): Do not mention whether a file is executable. + Add typed memory objects. + (compare_files): 0 -> EXIT_SUCCESS, 1 -> EXIT_FAILURE, 2 -> + EXIT_TROUBLE. + + * src/diff3.c: Include c-stack.h, exitfail.h. + (ALLOCATE): Remove. All uses changed to xmalloc, or to xmalloc plus + an overflow check. + (myread): Remove. + (main): Check for stack overflow. + 0 -> EXIT_SUCCESS, 1 -> EXIT_FAIULRE, 2 -> EXIT_TROUBLE. + (try_help): Likewise. + (process_diff): Check for integer overflow, to avoid core dumps. + 2 -> EXIT_TROUBLE. + (read_diff): Exit with status 126 if the file is not executable, + for compatibility with POSIX 1003.1-2001. + Accommodate ancient AIX hosts that set errno to EINTR after uncaught + SIGCONT. + Check for integer overflow to avoid core dumps. + (fatal, perror_with_exit): 2 -> EXIT_TROUBLE. + + * src/dir.c (dir_read): + Ignore st_size of directories: POSIX says it's garbage. + Check for integer overflow to avoid core dumps. + (diff_dirs): 0 -> EXIT_SUCCESS, 2 -> EXIT_TROUBLE. + + * src/ifdef.c: Include . + (format_group, print_ifdef_lines): Avoid core dumps with bad formats. + (do_printf_spec): Avoid alloca. + + * src/io.c (sip): + Avoid integer overflow and core dumps if buffer alignments are + preposterously incompatible. + (slurp): Do not dump core if the file is growing as we read it. + If a regular file grows, keep reading until we catch up with its EOF. + (find_and_hash_each_line): Check for integer overflow to avoid cores. + (GUESS_LINES): Remove. + (guess_lines): New function. Avoid integer overflow. + (find_identical_ends): Use it. + Avoid integer overflow and possible core dumps. + + * src/sdiff.c: Include c-stack.h, exitfail.h. Do not include signal.h. + 0 -> EXIT_SUCCESS, 1 -> EXIT_FAILURE, 2 -> EXIT_TROUBLE. + (ck_editor_status): New function. + (main): Check for stack overflow. + Adopt POSIX convention for subsidiary programs not found. + (diffarg): Check for integer overflow to avoid core dumps. + (trapsigs): Remove SA_INTERRUPT special case; now done by header. + (SIGCHLD): Likewise. + (edit): Adopt POSIX convention for subsidiary programs not found. + + * src/side.c: unsigned -> unsigned int. + + * src/system.h: Don't use alloca or include . + unsigned -> unsigned int + (EXIT_SUCCESS, EXIT_FAILURE, EXIT_TROUBLE): Define if not defined. + Include signal.h. + (SA_RESTART): Define if not defined. + (SIGCHLD): Likewise. + + * src/util.c: 2 -> EXIT_TROUBLE. + Adopt POSIX convention for ENOEXEC and exit status 126. + unsigned -> unsigned int + +2002-01-24 Paul Eggert + + * NEWS, configure.ac (AC_INIT, AM_INIT_AUTOMAKE): Version 2.7.7. + + * intl/plural.c: Regenerate with Bison 1.31. + + * ABOUT-NLS, intl/*: Update to Gettext 0.11-pre5++. + * INSTALL: Update to Autoconf 2.52f. + + * INSTALLME: New file. + * Makefile.am (EXTRA_DIST): Add config/config.rpath, INSTALLME. + (DISTCLEANFILES): Remove. + * NEWS: Reformat for imminent 2.8 release. + * README: Mention INSTALLME. + * README-alpha: Move most of contents to INSTALLME. + * THANKS: Add Bruno Haible, Jim Meyering, and Eli Zaretskii. + + * config: New subdirectory, containing the following files from .: + config.guess, config.sub, depcomp, missing, install-sh, mkinstalldirs. + Move the following files here from doc: texinfo.tex, mdate-sh. + * config/config.guess, config/config.sub, config/texinfo.tex: + Update to latest version from FSF. + * config/config.rpath: New file, from Gettext 0.11-pre5++. + + * configure.ac (AC_INIT): Use new 3-arg form. + (AC_CONFIG_SRCDIR): Specify src/diff.c here, not in AC_INIT. + (ALL_LINGUAS): Remove: now in po/LINGUAS as per Gettext 0.11. + (AC_CONFIG_AUX_DIR): New macro invocation. + + * lib/Makefile.am (noinst_HEADERS): Add gettext.h. + * lib/gettext.h: New file, from Gettext 0.11-pre5++. + * lib/prepargs.c: Include . Reported by Bruno Haible. + + * m4/codeset.m4, m4/gettext.m4, glibc21.m4, iconv.m4, isc-posix.m4, + lcmessage.m4, progtest.m4: Upgrade to Gettext 0.11-pre5++. + * m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4: New files, from + Gettext 0.11-pre5++. + + * po/LINGUAS: New file. + * po/Makefile.in.in: Upgrade to Gettext 0.11-pre5++. + * po/Makevars, po/Rules-quot, po/boldquot.sed: New files, + from Gettext 0.11-pre5++. + + * src/cmp.c (copyright_string): Update to 2002. + * src/diff.c (copyright_string): Likewise. + * src/diff3.c (copyright_string): Likewise. + * src/sdiff.c (copyright_string): Likewise. + + * src/cmp.c (specify_ignore_initial): Renamed from + parse_ignore_initial, with different signature, to take the + maximum of multiple options rather than the last one. + All uses changed. + + * src/cmp.c (bytes, specify_ignore_initial, cmp): Use UINTMAX_MAX + instead of (uintmax_t) -1, to avoid warnings on some compilers. + * src/io.c (file_block_read): Likewise, for SIZE_MAX. + + * src/cmp.c (usage): Reformat messages to ease translation. + * src/diff3.c (usage): Likewise. + * src/sdiff.c (usage): Likewise. + + * src/cmp.c (main): Two files with the same name are identical + only if the same offset is specified. + (block_compare_and_count): Avoid cast to unsigned char. + + * src/diff3.c (main): Remove unused variable. + + * src/dir.c: Include + (struct dirdata): New member nnames. + (locale_specific_sorting, failed_strcoll): New vars. + (dir_read): Renamed from dir_sort. Don't sort the dir. + Set new nnames member of struct dirdata. All callers changed. + (compare_names): Don't check for errno after strcasecmp. + Use strcoll only if locale_specific_sorting is nonzero. + If strcoll fails, longjmp out rather than returning a value + that might result in an invalid comparison function that might + make qsort dump core. + (diff_dirs): Sort the directory ourselves. Use setjmp to recover + from strcoll failure, falling back on native byte comparison. + Make local variables volatile if they need to preserve their value + after setjmp/longjmp. + + * src/sdiff.c (handler_index_of_SIGINT, handler_index_of_SIGPIPE): + New macros. + (main): Do not confuse signal numbers with their indices. + Bug reported by Bruno Haible. + (edit): Cat lin to long before printing with %ld, since lin might + be narrow than long. + + * src/system.h (UINTMAX_MAX): New macro. + Include gettext.h, not libgettext.h. + (N_): Do not wrap arg in parentheses. Fix from Bruno Haible. + + * src/util.c (finish_output): Ensure that werrno is initialized. + (lines_differ): Have an explicit do-nothing case for + IGNORE_NO_WHITE_SPACE, to pacify gcc -Wall. + +2001-12-29 Eli Zaretskii + + * src/sdiff.c (interact): After extracting rlen from the editor + command, test for a terminating null character, not for a newline. + + * ms/config.bat: Allow longer source directory names without + overflowing the line length limits. Create the cache in the + build directory, not in the source directory + * ms/config.sed: Fix AC_CONFIG_LINKS for when symlinks are + unavailable. + +2001-12-23 Paul Eggert + + * NEWS, configure.ac (AM_INIT_AUTOMAKE): Version 2.7.6. + + * configure.ac (ALL_LINGUAS): Add tr. + + * src/util.c (begin_output): + Have child exit with status 127 rather than reporting + failure on its own. Set errno to 0 before invoking popen. + (finish_output): Report errno on pclose failure. + Distinguish between subsidiary program not found, and failure. + + * src/sdiff.c (not_found, execdiff): Remove. + (DIFF_PROGRAM_OPTION): New constant. + (longopts, option_help_msgid, main): Add --diff-program=PROGRAM. + (check_stdout): New function. + (main): Remove DIFF_PROGRAM. Check stdout after printing version. + Use check_stdout after printing help. Use execvp/perror_fatail rather + than execdiff. Set errno to 0 before invoking popen. + Check for pclose failure properly. + (main, edit): If child exec fails, exit with 127 rather than trying to + print diagnostic. + Distinguish between subsidiary program failing and not being found. + (edit): Handle signals the same way, regardless of whether we're using + system or fork+exec. Check for system returning -1. + + * src/diff3.c (DIFF_PROGRAM_OPTION, HELP_OPTION): New constants. + (longopts, main): Use them. + (longopts, main, option_help_msgid): New option --diff-option=PROGRAM. + (main): Remove DIFF_PROGRAM support. + Check stdout after printing version. + (check_stdout): Report errno info if fclose fails. + (read_diff): Have child exit with status 127 when program is not found, + rather than trying to have the child report failure. Check for + pclose returning -1. + + * src/diff.c (DEFAULT_WIDTH): Remove. + (main): Use 130 instead of DEFAULT_WIDTH, since it's not really + builder-settable. Do not prepend DIFF_OPTIONS. + (check-stdout): If fclose (stdout) fails, print errno info. + (option_help_msgid): Default context is 3, not 2. + (usage): Work even if ptrdiff_t is wider than int. + + * doc/diff.texi (diff Options): Remove DIFF_OPTIONS. + (Invoking diff3, Invoking sdiff): Remove DIFF_PROGRAM. + (diff3 Options, sdiff Options): Add --diff-program. + + * src/cmp.c (valid_suffixes): + Add '0', to support suffixes like "MB" and "MiB". + (check_stdout): Don't assume that the translations of "write failed" + and of "standard output" lack '%'. + (main): Check stdout after printing version. + + * lib/setmode.c: [HAVE_FCNTL_H && HAVE_SETMODE_DOS]: Include . + [!HAVE_SETMODE_DOS]: Do not include . + (set_binary_mode): Return mode (not 1) if fd is a tty. + Do not assume that O_TEXT is zero. + + * doc/diff.texi (cmp Options): + In byte counts, a plain suffix (without any integer) + is assumed to modify the integer 1. Index terms like "kibibyte". + Document plain "k". + + (Reporting Bugs): Mention bug-report archive and test version + location. Ask for "diff --version" in bug reports. + +2001-12-13 Paul Eggert + + * src/diff.c (DEFAULT_WIDTH): Remove; couldn't be changed without + also changing option_help_msgid. All uses replaced with 130. + + * lib/setmode.c: Include fcntl.h and unistd.h only if + HAVE_SETMODE_DOS. + (setmode): Assume a file is binary unless the mode is O_TEXT. + * ms/README: Fix minor typos. + +2001-12-13 Eli Zaretskii + + * ms/README: New file. + + * lib/setmode.c (set_binary_mode) [HAVE_SETMODE_DOS]: Don't assume + O_TEXT has a zero value. If FD is a terminal device, do nothing + and return MODE, thus pretending that it was already in the + requested MODE. + [HAVE_FCNTL_H]: Include fcntl.h (needed for O_BINARY). + + * ms/config.sed: Remove the split prevention of config.status. + Fix Sed commands for converting absolute file names into + top_srcdir-relative ones. + + * ms/config.bat: Fix typos. + +2001-12-12 Neal H Walfield + + * diff.c (option_help_msgid): Correct the default context width + from 2 to 3. + +2001-12-11 Paul Eggert + + * m4/Makefile.am.in: Remove jm-glibc-io.m4 + + * NEWS, configure.ac (AM_INIT_AUTOMAKE): Version 2.7.5. + + * configure.ac (PR_PROGRAM): Use AC_DEFINE_UNQUOTED, so that + $PR_PROGRAM is expanded by sh. + (ptrdiff_t, ssize_t): Use AC_CHECK_TYPE with a default of int, + not AC_CHECK_TYPES. + (jm_AC_DOS, AC_FUNC_SETMODE_DOS): New macros. + (AC_CONFIG_FILES): Add ms/Makefile. + + * doc/diff.texi: Add --no-ignore-file-name-case. + File name case sensitivity now affects file name exclusion. + Fix typos. + + * src/util.c: Include dirname.h. + (dir_file_pathname): Use base_name rather than file_name_lastdirchar. + + * src/system.h (S_IXUSR, S_IXGRP, S_IXOTH): New macros. + Include rather than rolling it ourselves. + (file_name_lastdirchar, HAVE_SETMODE, set_binary_mode): Remove. + + * src/sdiff.c: Include . + (expand_name): Use base_name rather than file_name_lastdirchar, for + portability to DOS. + (main): Initialize xalloc_exit_failure before possibly invoking + any memory allocator. + + * src/io.c: Include setmode.h. + + * src/diff3.c (main): + Initialize xalloc_exit_failure before possibly invoking any memory + allocator. + + * src/diff.c: Include dirname.h, setmode.h. + + (main): Later values and/or styles now silently override earlier. + (specify_value, specify_style): Likewise. All callers changed. + Remove. + (binary, main, option_help_msgid, compare_files): + HAVE_SETMODE -> HAVE_SETMODE_DOS. + (NO_IGNORE_FILE_NAME_CASE_OPTION): New constant. + (longopts, main, option_help_msgid): Support it. + (exclude_options): New function. + (main): Use it. Initialize xalloc_exit_failure before potentially + allocating memory. + + (filetype): Distinguish executable files from others, as POSIX + suggests. + + (compare_files): Use base_name instead of file_name_lastdirchar. + + * src/cmp.c: Include , . + (hard_locale_LC_MESSAGES): New macro. + (sprintc): Remove int width arg; it's now the caller's responsibility + to pad. All callers changed. + (stat_buf): New static var; was formerly a local var in 'main'. + (valid_suffixes): Add 'K', for 'KiB'. + (option_help_msgid): Don't confuse bytes with characters. + (main): Set xalloc_exit_failure before invoking anything that might + allocate memory. Fix bug: -n was incorrectly ignored when optimizing + the case of regular files with different lengths. + (cmp): Use an index column wide enough to store this comparison's + indexes. In locales other than the POSIX locale, say "byte" + rather than "char". + + * ms/config.bat: pc -> ms + + * ms/Makefile.am, m4/setmode.m4, lib/setmode.c, lib/setmode.h: + New file. + + * lib/Makefile.am (noinst_HEADERS): Add dirname.h, setmode.h. + (libdiffutils_a_SOURCES): Add basename.c, setmode.c. + + * Makefile.am (SUBDIRS): Add ms. + +2001-12-10 Paul Eggert + + * m4/fnmatch.m4: Test for FNM_CASEFOLD. + +2001-12-03 Paul Eggert + + * lib/posix/regex.h: Fix copyright notice. + +2001-12-03 Paul Eggert + + * NEWS, configure.ac (AM_INIT_AUTOMAKE): Version 2.7.4. + + * diff.texi (direntry, Overview, Comparison, Binary, Invoking cmp): + Use "byte" rather than "character" when talking about cmp, since + it compares bytes, not character. + (Invoking cmp): New trailing operands FROM-SKIP and TO-SKIP. + -i or --ignore-initial now accepts FROM-SKIP:TO-SKIP. + New option -n or --bytes. + Count operands now may be in octal or hex, and may be followed by a + size multiplier. + + * configure.ac (DEFAULT_DIFF_PROGRAM): + Define to "diff", not "$bindir/diff" (which didn't work anyway). + (AC_CHECK_MEMBERS): Add struct stat.st_blksize, struct stat.st_rdev. + (AC_STRUCT_ST_BLKSIZE, AC_STRUCT_ST_RDEV): Remove; obsolescent. + (AC_FUNC_FORK): Use this, instead of obsolescent AC_FUNC_VFORK. + (AC_CONFIG_FILES, AC_CONFIG_COMMANDS): Add. + (AC_OUTPUT): Remove args; they were obsolescent. + + * util.c (setup_output, begin_output, finish_output): + HAVE_FORK -> HAVE_WORKING_FORK || HAVE_WORKING_VFORK. + * sdiff.c (diffpid, cleanup, main, edit): Likewise. + * diff3.c (read_diff): Likewise. + + * system.h (STAT_BLOCKSIZE): + Use HAVE_STRUCT_STAT_ST_BLKSIZE, not HAVE_ST_BLKSIZE. + (vfork): New macro. + (HAVE_FORK): Remove. + (set_binary_mode): New macro. + + * sdiff.c (main): HAVE_VFORK -> HAVE_WORKING_VFORK. + (edit): Reopen the temporary file after the editor has run, in case + the editor operates by unlinking the old file and linking a new one. + (P_tmpdir): Rename from PVT_tmpdir; this fixes a typo. + All uses changed. + + * io.c (sip, read_files): + Remove tests for HAVE_SETMODE; use set_binary_mode + instead of setmode. + (sip): Fix typo in backward lseek when reverting to text mode. + + * config.site, config.sed, config.bat: New file. + + * Makefile.am (EXTRA_DIST): Add xstrtol.c. + (noinst_HEADERS): Add xstrtol.h. + (libdiffutils_a_SOURCES): Add xstrtoumax.c. + + * cmp.c: : Include. + (ignore_initial): Now an array with 2 elements. All uses changed. + (bytes): New var. + (HELP_OPTION): New constant. + (long_options, main): Use it. + (long_options, option_help_msgid, main, cmp): + Add support for -n or --bytes. + (parse_ignore_initial): New function. + (option_help_msgid, main): Add -i M:N. + (usage, main): Add two optional trailing operands, a la BSD. + (main): setmode -> set_binary_mode. + (cmp): Report byte number of what we've seen, not of the entire file. + This is to be consistent with the line number, which is always relative + with what we've seen. + +2001-12-02 Paul Eggert + + * diff.c (main, compare_files): setmode -> set_binary_mode. + + * xstrtol.c (__xstrtol): Don't accept 'Ki'; require 'KiB'. + + * xstrtol.c (__xstrtol): Add support for IEC 60027-2. + +2001-11-25 Paul Eggert + + * NEWS, configure.ac (AM_INIT_AUTOMAKE): Version 2.7.3. + + * README-alpha: New file. + + * src/Makefile.am (INCLUDES): Add -I../lib, for regex.h. + + * configure.ac: + Don't set LIB_CLOCK_GETTIME to 'none required'; set it to + the empty string instead. + + * lib/Makefile.am (EXTRA_DIST): Add strtoimax.c, strtol.c. + + * Makefile.am (SUBDIRS): Put intl before lib, so that libintl.h exists. + + * lib/Makefile.am (noinst_HEADERS): Add unlocked-io.h. + + * configure.ac (__EXTENSIONS__): New define, for the unlocked macros. + + * README: Add copyright notice. + Remove stuff that doesn't apply any more. + + * doc/diff.texi: offsets -> indices for cmp + + * src/cmp.c (option_help_msgid): offsets -> indices + + * src/diff.c (option_help_msgid): + Don't mention --binary on POSIX hosts. + + * src/sdiff.c (STRIP_TRAILING_CR_OPTION): New constant. + (longopts, option_help_msgid, main): Add -E, --ignore-tab-expansion, + --strip-trailing-cr. + + * doc/diff.texi: Change direcategory from Utilities to GNU Packages. + Add individual utilities. + Switch to Free Documentation License. + @code -> @command + @samp -> @option + GNU -> @sc{gnu} + Expand tabs to spaces, except when in an example that actually + uses tabs. + Prefer @node with just one arg. + Document -E or --ignore-tab-expansion, --strip-trailing-cr, + --ignore-file-name-case. + Regular expressions are now grep style, not Emacs style. + cmp's -c or --print-chars option is now -b or --print-bytes. + Time stamps now depend on LC_TIME. + -p now implies ^[[:alpha:]$_]. + Flags now include ' and 0. + cmp -i is an alias for --ignore-initial + Document --from-file, --to-file. + Document DIFF_OPTIONS. + + * configure.ac (AC_CHECK_FUNCS): Add gettimeofday, clock_gettime. + (LIB_CLOCK_GETTIME): New subst. + + * src/system.h: Assume C89 or better. + (_GNU_SOURCE): Remove; config.h now defines it. + (alloca): Declare like coreutils does it. + (verify, TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM, O_RDWR, + S_IRUSR, S_IWUSR): New macros. + (STAT_BLOCKSIZE): Parenthesize definiens. + : Include if HAVE_INTTYPES_H. + (CHAR_MAX, INT_MAX): Remove. + (PTRDIFF_MAX, SIZE_MAX): New macros. + (strtoumax): New decl. + Include stddef.h. + (bzero): Remove. + (bindtextdomain, textdomain, N_): New macros. + (ISPRINT, ISSPACE): Remove ifndef wrappers. + (ISUPPER, ISDIGIT): Remove. + (TOLOWER): New macro. + (MIN): Renamed from min; all callers changed. + (MAX): Likewise, from max. + (lin): New type. + (LIN_MAX): New macro. + (file_name_cmp): Renamed from filename_cmp. All callers changed. + (file_name_lastdirchar): Renamed from file_name_lastdirchar. + All callers changed. + (could_be_mvfs_stat_bug, could_be_nfs_stat_bug, + dev_may_have_duplicate_ino): Remove. + (HAVE_SETMODE, NULL_DEVICE): New macros. + (same_file): Do not check attributes. + (same_file_attributes): New macro. + + * src/util.c: Assume C89 or better. + int -> bool for booleans. + int -> lin for line numbers. + int -> size_t for sizes. + Use angle-brackets when including quotesys.h. + Include error.h, regex.h, xalloc.h. + (message5): sizeof -> offsetof + (begin_output): Invoke pr without -f. + (lines_differ): Renamed from line_cmp, and return bool not 3-way int. + All callers changed. + Add support for IGNORE_TAB_EXPANSION. + (change_letter): Now an array rather than a function. All + callers changed. + (translate_range): Translate line numbers to long, not lin, + for convenience with printf. + (analyze_hunk): Return enum changes instead of a count of + inserts and deletes. All callers changed. + (zalloc): New function. + + * src/side.c: Assume C89 or better. + int -> bool for booleans. + int -> lin for line numbers. + + * src/sdiff.c: Assume C89 or better. + int -> bool for booleans. + int -> lin for line numbers. + Use angle-brackets when including getopt.h, quotesys.h. + Include error.h, freesoft.h, stdio.h, xalloc.h. + (copyright_string): Use only most recent year. + (authorship_msgid, option_help_msgid): Wrap in N_(). + + (tmpname): Now volatile. + (tmpmade): Remove. + (tmp): New var. + (private_tempnam, exists, letters): Remove. + (temporary_file): New function. + (edit): Use it. + (interact): Use strtoumax, not atoi. + + * src/normal.c: Assume C89 or better. + int -> lin for line numbers. + + * src/io.c: Assume C89 or better. + int -> bool for booleans. + int -> lin for line numbers. + int -> size_t for sizes. + Use angle-brackets when including cmpbuf.h. + Include regex.h, xalloc.h. + (word): Remove; now done in system.h. + (hash_value): New type; use it instead of 'unsigned' for hash values. + (file_block_read): New function. + (sip, slurp): Use it. Now static. + (sip): Ensure block size is a multiple of word size. Clear eof flag. + (slurp): Use xalloc_die to report memory exhaustion. + (find_and_hash_each_line): Use TOLOWER instead of _tolower. + Add support for IGNORE_TAB_EXPANSION. + (prepare_text_end): Strip trailing CR if requested. + (find_identical_ends): Prepare the text only once, + if they're duplicates. + Let the compiler take advantage more of the fact that the buffers are + word-aligned. + (primes): Remove. + (prime_offset): New var. + (read_var): Use prime_offset instead of primes. + Use zalloc instead of xmalloc + bzero. + + * src/ifdef.c: Assume C89 or better. + int -> lin for line numbers. + (format_group): Use strtoumax to parse line numbers. + (format_group, print_ifdef_lines): Use do_printf_spec to + handle printf specs. + (groups_letter_value): Don't use _tolower; it's locale-dependent. + (do_printf_spec): Renamed from scan_printf_spec; now does the printing. + + * src/ed.c: Assume C89 or better. + int -> lin for line numbers (or 'long' when that's more convenient). + (print_ed_hunk): Fix bug when handling double-dot inserts. + + * src/dir.c: Assume C89 or better. + int -> bool for booleans. + Include error.h, exclude.h, xalloc.h. + + (dir_sort): Return 0 on error, 1 on success. All callers changed. + compare_names -> compare_names_for_qsort. + + (compare_names): Try strcasecmp if ignore_file_name_case. Then try + strcoll. Use file_name_cmp only as a last resort. Warn about + strcasecmp or strcoll failure. + (compare_names_for_qsort): New function. + + (diff_dirs): Use compare_names rather than filename_cmp. + + * src/diff3.c: Assume C89 or better. + int -> bool for booleans. + int -> lin for line numbers. + Use angle-brackets when including getopt.h, quotesys.h. + Include error.h, freesoft.h, inttostr.h, xalloc.h. + (copyright_string): Use only most recent year. + (authorship_msgid, option_help_msgid): Wrap in N_(). + + Rename the following variables for consistency with user-visible + option spellings. All uses changed. + (text): Renamed from always_text. + (initial_tab): Renamed from tab_align_flag. + + (horizon_lines): Remove. Remove all uses. + + (main): Invoke bindtextdomain and textdomain after setlocale. + Rename "DIFF" to "DIFF_PROGRAM". + + Try to compare file0 to file1, because this is where changes are + expected to come from. Diffing between these pairs of files is more + likely to avoid phantom changes from file0 to file1. + However, use file2 as the common file if this is a 3-way diff, + for backward compatibility. Suggested by Karl Tomlinson. + + (create_diff3_block): Use xcalloc instead of malloc + bzero. + + (INT_STRLEN_BOUND): Remove; now in system.h. + + (read_diff): Always use --horizon-lines=100 rather than trying + to guess it. + Do not pass --inhibit-hunk-merge. + Minimum chunk size is 1, not 8KiB. + Use xalloc_die to report memory exhaustion. + (undotlines): Use long for start, not int. + + * src/diff.h: Assume C89 or better. + int -> bool for booleans. + int -> lin for line numbers. + Don't include regex.h. + (enum changes): New enum. + (enum line_class): Remove; subsumed by enum changes. + (enum output_style): New constant OUTPUT_UNSPECIFIED. + + (ignore_space_change_flag, ignore_all_space_flag): Remove. + (ignore_white_space): New decl, subsuming the above two. All + uses changed. + + Rename the following decls for consistency with user-visible + option spellings. All uses changed. + (text): Renamed from always_text_flag. + (ignore_blank_lines): Renamed from ignore_blank_lines_flag. + (ignore_case): Renamed from ignore_case_flag. + (brief): Renamed from no_details_flag. + (initial_tab): Renamed from tab_align_flag. + (expand_tabs): Renamed from tab_expand_flag. + (starting_file): Renamed from dir_start_file. + (paginate): Renamed from paginate_flag. + (sdiff_merge_assist): Renamed from sdiff_help_sdiff. + (left_column): Renamed from sdiff_left_only. + (suppress_common_lines): Renamed from sdiff_skip_common_lines. + (speed_large_files): Renamed from heuristic. + (minimal): Renamed from no_discards. + + (inhibit_hunk_merge): Remove. + + (strip_trailing_cr, excluded, time_format): New decls. + + (files_can_be_treated_as_binary): Renamed from ignore_some_changes. + + (group_format, line_format): Now char const *[], not char *[]. + + (struct file_data): Buffer is now word*, not char*, as it's always + aligned and this can help the compiler. buffered_chars -> buffered + (since it's a byte count, not a char count). All uses changed. + New member `eof'. + + (FILE_BUFFER): New macro. + + (excluded_filename, error, free_software_msgid): Remove decls; now in + other .h files. + + (sip, slurp): Remove decls. + (file_block_read): New decl. + (change_letter): Now an array, not a function. + (lines_differ): Renamed from line_cmp. + (analyze_hunk): Now returns enum changes rather than two change counts. + + * src/Makefile.am (diff_LDADD): New symbol. + + * src/diff.c: Assume C89 or better. + int -> bool for booleans. + long -> off_t for line numbers. + Use angle-brackets when including getopt.h, fnmatch.h, quotesys.h. + Include error.h, exclude.h, freesoft.h, hard-locale.h, prepargs.h, + regex.h, signal.h, xalloc.h. + (copyright_string): Use only most recent year. + (authorship_msgid, option_help_msgid): Wrap in N_(). + + Rename the following variables for consistency with user-visible + option spellings. All uses changed. + (binary): Renamed from binary_flag. + (new_file): Renamed from entire_new_file_flag. + (unidirectional_new_file): Renamed from unidirectional_new_file_flag. + (report_identical_files): Renamed from print_file_same_flag. + + (numeric_arg): Remove. + + (exclude, exclude_alloc, exclude_count, excluded_filename, add_exclude, + add_exclude_file): + Remove; now done by exclude.h. + + (BINARY_OPTION, FROM_FILE_OPTION, HELP_OPTION, HORIZON_LINES_OPTION, + IGNORE_FILE_NAME_CASE_OPTION, INHIBIT_HUNK_MERGE_OPTION, + LEFT_COLUMN_OPTION, LINE_FORMAT_OPTION, NORMAL_OPTION, + SDIFF_MERGE_ASSIST_OPTION, STRIP_TRAILING_CR_OPTION, + SUPPRESS_COMMON_LINES_OPTION, TO_FILE_OPTION, + UNCHANGED_LINE_FORMAT_OPTION, OLD_LINE_FORMAT_OPTION, + NEW_LINE_FORMAT_OPTION, UNCHANGED_GROUP_FORMAT_OPTION, + OLD_GROUP_FORMAT_OPTION, NEW_GROUP_FORMAT_OPTION, + CHANGED_GROUP_FORMAT_OPTION): New constants. + (longopts, main): Use them. + + (longopts, main, option_help_msgid): Add -E, --from-file, --to-file. + + (main): Invoke bindtextdomain and textdomain after setlocale. + Use grep syntax, not Emacs, for regular expressions. + Use exclude.h, not our own functions. + Use ISO 8601 time format in hard locales. + Prepend DIFF_OPTIONS. + Don't update ignore_some_changes. + Use strtoumax instead of numeric_arg. + Use specify_value when appropriate. + error -> try_help when appropriate. + -p now means ^[[:alpha:]$_], not ^[_a-zA-Z$]. + Ignore --inhibit-hunk-merge. + Prefer changed group formats to unchanged ones. + Remove now-unnecessary casts. + Set files_can_be_treated_as_binary. + + (specify_value): Renamed from specify_format. All uses changed. + + (specify_style): Default is now unspecified, not normal. All + uses changed. + + (set_mtime_to_now): New function. + (compare_files): Use it. Use memset, not bzero. + Set stdin mtime to current time even when stdin is not a regular file. + Check for same file attributes, as well as for same file. + Use files_can_be_treated_as_binary. + "write failed" -> "standard output on output failure. + + * src/context.c: Assume C89 or better. + int -> lin for line numbers. + Include inttostr.h, regex.h. + (TIMESPEC_NS): New macro. + (nstrftime): New decl. + (print_context_label): Use nstrftime and time_format to format times. + Print numeric time stamp value if localtime fails. + (print_context_function): New function. + (pr_context_hunk, pr_unidiff_hunk): Use it. + (find_function): Use size_t for sizes, not int. + + * src/cmp.c: Assume C89 or better. + int -> bool for booleans. + long -> off_t for line numbers. + Use angle-brackets when including cmpbuf.h, getopt.h. + Include error.h, freesoft.h, inttostr.h, xalloc.h. + (copyright_string): Use only most recent year. + (authorship_msgid): Wrap in N_(). + (buffer): Now word*, not char*. All uses changed. + (word): Remove macro; now in system.h. + (long_options, option_help_msgid, main): -c --print-chars -> + -b --print-bytes + (check_stdout): "write failed" -> "standard output" + (option_help_msgid): Wrap in N_(). + (main): Invoke bindtextdomain and textdomain after setlocale. + Use strtoumax instead of doing the work ourselves. + Check for same_file_attributes as well as same_file. + (cmp): Use ssize_t for read returns, not size_t. + Do not assume that size_t is not narrower than int. + Do not assume that line numbers fit in 'long'. + (block_compare_and_count, block_compare): + Compiler now checks that buffers are word-aligned. + (block_compare_and_count): Count sizes with size_t, not long. + (sprintc): byte arg is unsigned char, not unsigned. + + * src/analyze.c: Assume C89 or better. + int -> lin for line numbers. + int -> bool for booleans. + unsigned int -> size_t for sizes. + Use angle-brackets when including cmpbuf.h. + Include error.h, regex.h, xalloc.h. + (discard_confusing_lines, diff_2_files): Use zalloc rather + than xalloc+bzero. + (discard_confusing_lines): unsigned int -> lin for values that + are really line numbers. + (shift_boundaries): Do not inhibit hunk merges. + (build_reverse_script, build_script, diff_2_files): Use |, not ||. + (diff_2_files): no_details_flag & ~ignore_some_changes -> + files_can_be_treated_as_binary. Esure that buffer size is a multiple + of sizeof (word). Use file_block_read to read buffers. + (diff_2_files): Abort if output style is not one of the + expected styles. + +2001-11-23 Paul Eggert + + * src/Makefile.am, m4/vararrays.m4: New file. + + * m4/prereq.m4 (jm_PREREQ_READUTMP): + Remove, as it gives autoheader the willies. + + * m4/README, lib/prepargs.h, lib/prepargs.c, lib/offtostr.c, + lib/umaxtostr.c, lib/inttostr.c, lib/inttostr.h, + lib/imaxtostr.c, lib/freesoft.h: New files. + + * lib/freesoft.c: Include config.h, freesoft.h rather than diff.h. + (free_software_msgid): Wrap contents in N_. + + * lib/cmpbuf.h: Use prototypes instead of old-style functions. + + * lib/cmpbuf.c: + Don't include system.h; instead, include config.h, unistd.h. + Use prototypes instead of old-style functions. + (block_read): Don't assume that int is no wider than size_t. + + * lib/Makefile.am, po/POTFILES.in: New file. + +2001-11-22 Paul Eggert + + * pc/config.h: + Define filename_cmp as an object-like macro, not as a function-like + macro. + + * exgettext: Always operate in the C locale. + Set AWK using a method that works even with broken shells. + + * doc/Makefile.am: New file. + + * configure.ac (AC_INIT): + Use src/diff.c, not diff.h, as the source files got removed. + (AM_CONFIG_HEADER): Switch from AC_CONFIG_HEADER. + (AC_ARG_PROGRAM, AC_MINIX): Remove. + + (AC_PREREQ, AM_INIT_AUTOMAKE, ALL_LINGUAS, AC_PROG_AWK, + AM_PROG_CC_STDC, AC_PROG_RANLIB, AC_C_INLINE, AC_C_VARARRAYS, + DEFAULT_DIFF_PROGRAM, DEFAULT_EDITOR_PROGRAM, + AC_STRUCT_ST_MTIM_NSEC): Add. + + (PR_PROGRAM): AC_DEFINE. + + (AC_SYS_LARGEFILE): Use instead of our homebrew version. + + (_GNU_SOURCE): Define if not defined. + + (AC_CHECK_HEADERS): Add stdbool.h, unistd.h. + (AC_CHECK_TYPES): Add ptrdiff_t, uintmax_t. + (AM_GNU_GETTEXT, XGETTEXT): Add. + + (WITH_MVFS_STAT_BUG, WITH_NFS_STAT_BUG): Remove. + (HAVE_MEMCHR): Remove. + (AC_CHECK_FUNCS): Add diraccess. + (AC_REPLACE_FUNCS): Add memchr, waitpid. + (jm_FUNC_GLIBC_UNLOCKED_IO, jm_FUNC_GNU_STRFTIME, jm_FUNC_MALLOC, + jm_FUNC_REALLOC, jm_PREREQ_ERROR, jm_PREREQ_QUOTEARG, jm_PREREQ_REGEX, + jm_PREREQ_TEMPNAME, jm_AC_PREREQ_XSTRTOUMAX, AC_FUNC_FNMATCH): Add. + (fnmatch.h, regex.h): Do not create these files unless we're using + our own fnmatch and regex. + + (AC_OUTPUT): Add doc/Makefile, intl/Makefile, lib/Makefile, + lib/posix/Makefile, m4/Makefile, po/Makefile.in, src/Makefile. + + * Makefile.am: New file. + + * po/en_GB.po: Don't translate "program" to "programme". + +2001-11-20 Paul Eggert + + * m4/prereq.m4: New file. + +2001-03-16 Paul Eggert + + * lib/tempname.c (uint64_t): + Define if not defined, and if UINT64_MAX is not defined. + +2001-02-26 Paul Eggert + + * lib/tempname.c: glibc 1.32 + +2001-02-17 Paul Eggert + + * m4/Makefile.am.in: GNU fileutils 4.1 + +2001-01-09 Paul Eggert + + * lib/tempname.c (struct_stat64): New macro. + (direxists, __gen_tempname): Use it. This avoids a portability problem + with Solaris 8. + + * lib/tempname.c (): Include if HAVE_CONFIG_H. + (, , ): + Include only if STDC_HEADERS || _LIBC. + (): Include only if HAVE_FCNTL_H || _LIBC. + (): Include only if HAVE_UNISTD_H || _LIBC. + (): Include only if HAVE_SYS_TIME_H || _LIBC. + (__set_errno): Define this macro if doesn't. + (P_tmpdir, TMP_MAX, __GT_FILE, __GT_BIGFILE, __GT_DIR, __GT_NOCREATE): + Define these macros if doesn't. + (S_ISDIR, S_IRUSR, S_IWUSR, S_IXUSR): + Define these macros if + doesn't. Ignore S_ISDIR if STAT_MACROS_BROKEN. + (stat64, __getpid, __gettimeofday, __mkdir, __open, __open64, lxstat64, + __xstat64): Define if not _LIBC. + (__secure_getenv): Define if ! (HAVE___SECURE_GETENV || _LIBC). + (__gen_tempname): Invoke gettimeofday only if HAVE_GETTIMEOFDAY + || _LIBC; otherwise, fall back on plain "time". + Use macros like S_IRUSR | S_IWUSR rather than octal values like 0600. + + * lib/mkstemp.c (__GT_FILE): Define to zero if not defined. + +2000-10-25 Paul Eggert + + * lib/hard-locale.c: New file. + +2000-02-05 Paul Eggert + + * exgettext: From GCC repository + +1999-07-06 Paul Eggert + + * lib/mkstemp.c: glibc 2.2 + +1998-12-11 Paul Eggert + + * src/sdiff.c (lf_snarf): + Fix bug when help line wrapped around the input buffer. + +1998-09-15 Paul Eggert + + * diff.texi: Add @dircategory and @direntry. + +1998-09-14 Paul Eggert + + * Makefile.in (VERSION): Version 2.7.2. + (DEFAULT_DIFF_PROGRAM): Renamed from DIFF_PROGRAM. + (PR_PROGRAM): All `configure' to define it. + (srcs): Add $(diffutils_srcs), freesoft.c, quotearg.c instead of + quote.c, quotearg.h. + (distfiles): Add acconfig.h, message/*. + (all): Depend on $(destfiles), not info. + (version.c): Parenthesize `GNU diffutils'. + (common_o): Add freesoft.o + (diff_o): quote.o -> quotearg.o + (diff3_o, sdiff_o): Likewise. + (diff.dvi): Depend on version.texi. + (diff.o diff3.o quotearg.o sdiff.o util.o): + New dependency on quotearg.h + (diff3.o): DIFF_PROGRAM -> DEFAULT_DIFF_PROGRAM. + (sdiff.o): Likewise. + (messages.po): Remove. + (message/msgid.po, message/template.po): New rules. + (maintainer-clean): Renamed from realclean. + (install): Install from source directory, if applicable. + Invoke install-info if needed. + (install-strip): New rule. + (check): Set DIFF. + (stamp-h.in): Don't put the date into the timestamp. + (D_dirs): Add $D/message. + ($D.tar.gz): Compress with gzip -9. + Don't use ln to create distribution; it doesn't work with symlinks. + (srcs, distfiles, diff_o, diff3_o, sdiff_o): Rename quotearg.c to + quotesys.c and quotearg.h to quotesys.h. + + * configure.in (AC_PATH_PROG): Add PR_PROGRAM. + If available, prefer support for large files unless the user specified + one of the CPPFLAGS, LDFLAGS, or LIBS variables. + (AC_STRUCT_ST_RDEV): Add. + (HAVE_ST_FSTYPE_STRING): Add. + (--with-mvfs-stat-bug, --with-nfs-stat-bug): New options. + (HAVE_MEMCHR): New macro. + (AC_CHECK_FUNCS): Add sicprocmask. + + * diff.h (XTERN): Renamed from EXTERN. + (struct filedata): Remove dir_p arg. + (struct comparison): New type. + (diff_2_files, diff_dirs)" Ise ot/ + (error): Add printf attribute if applicable. + (free_software_msgid): New decl. + (pr_program): New decl. + (fatal): Add noreturn attribute. + (pfatal_with_name): Likewise. + + * system.h (__attribute__): New macro. + (getenv): Don't declare if HAVE_STDLIB_H. + (CHAR_MAX): New macro. + (): New include. + (): Include before . + (could_be_mvfs_stat_bug, could_be_nfs_stat_bug, + dev_may_have_duplicate_ino, same_special_file): New macros. + (same_file): Use them. + + * cmp.c (authorship_msgid): New var. + (free_software_msgid): New decl. + (error): Now has printf attribute. + (try_help): Likewise. + (long_options): Don't assume ASCII. + (try_help): Now accepts operand arg. + (main): Check for -1, not EOF, when calling getopt_long. + Report --ignore-initial value when complaining about it. + Output copyright and free software info with -v. + Don't assume ASCII. + Report last operand when one is missing. + Report text of extra operand. + Move block_read into cmpbuf.c. + + * diff.c (authorship_msgid): New var. + (quotesys.h): Include. + (ck_atoi): Remove. + (function_regexp_list, ignore_regexp_list): Now static. + (binary_flag): Renamed from binary_I_O. + (entire_new_file_flag, unidirectional_new_file_flag, + print_file_same_flag): Now static. + (numeric_arg): Renamed from ck_atoi. + New argument specifying the argument type. + (longopts, main): Don't assume ASCII. + (longopts): Remove old aliases --file-label, --entire-new-file, + --ascii, --print. + (main): Check for -1, not EOF, when calling getopt_long. + Use numeric_arg to report errors. + Report error if -l specified but pagination is not supported. + Report error if -S is specified twice with conflicting values. + Have --version conform to the new GNU standards. + Add new --from-file, --to-file, --inhibit-hun,-merge options. + Make the horizon at least as large as the context. + Add casts to pacify gcc -Wall. + (try_help): Add operand arg. + (option_help_msgid): Doc fix to match above. + (usage): Indent option_help_msgid. + (compare_files): Now takes struct comparison + instead of two directory names and a depth. + (NONEXISTENT, UNOPENED, ERRNO_ENCODE, ERRNO_DECODE): + New macros. + (DIR_P): New macro. + Report error if fflush does. + + * cmpbuf.c (block_read): Moved here from cmp.c. + + * cmpbuf.h (block_read): New decl. + + * io.c (cmpbuf.h): Include. + (slurp): Check for arithmetic overflow when computing buffer size. + + * dir.c (diff_dirs): Check for recursive directory loop. + Arg is now struct comparison const *. + (dir_loop): New function + + * analyze.c (no_discards): Remove. + (inhibit): Remove. + (shift_boundaries): Don't inhibit. If inhibit_hunk_merge is nonzero, + don't merge hunks. + (briefly_report): Now returns 2 if trouble, CHANGES otherwise. + (diff_2_files): Now takes struct comparison. If briefly_report reports + trouble, pass it on to caller. + + * side.c (print_half_line): Add brackets to pacify GCC -Wall. + + * sdiff.c (quotesys.h): Include. + (DIFF_PROGRAM, DEFAULT_EDITOR_PROGRAM): Remove. + (free_software_msgid, editor_program, not_found): New vars. + (diffbin, edbin): Remove. + (editor_program): Renamed from edbin. + (edit, interact): Now take extra string arg. + (exiterr, fatal, perror_fatal, try_help): Add noreturn attribute. + (sigset_t, sigemptyset, sigmask, sigaddset, SIG_BLOCK, SIG_SETMASK): + (sigprocmask): New macros, if !HAVE_SIGPROCMASK. + (error): Now has printf attribute. + (longopts, main): Don't assume ASCII. + (try_help): New operand arg. + (usage): Conform to new GNU standards. + (main): Set static vars for editor and diff program. + Compare getopt_long result to -1, not EOF. + -v conforms to new GNU standard. + Complain better about extra and missing operands. + If HAVE_VFORK, block SIGINT and SIGPIPE in the parent, since when + the child munges its handlers it may somp on the parent. + Pass rname to intract. + Translate not-found message before forking. + (give_help): Just output it all at once. + (edit): New args lname, lline, rname, rline. + (edit): New command 'd'. + (interact): New args lname, rname. + + * util.c (quotesys.h): Include. + (PR_PROGRAM): New macro. + (pfatal_with_name): Abort if error returns. + (fatal): Likewise. + (print_message_queue): Free message chain after printing. + (currently_recursive): Renamed from current_depth, and now a boolean. + (begin_output): Report error if fflush does. + Avoid stdio and gettext in child. + + * diff3.c (quotesys.h): Include. + (free_software_msgid): New decl. + (RANGE_START, RANGE_END): Renamed from START and END. + (fatal, perror_with_exit, try_help): Add noreturn attribute. + (error): Add printf attribute. + (diff_program): Now a ptr, not an array. + Initialize to DEFAULT_DIFF_PROGRAM instead of DIFF_PROGRAM. + (longopts, main): Don't assume ASCII. + (main): Use DIFF environment var to specify name of diff program. + Compare getopt_long result to -1, not EOF. + -v now reports version according to new GNU standard. + Report spelling of extra operand, or last operand before missing one. + (try_help): Now takes operand arg. + (option_help_ms): Fix typo: missing comma. + (usage): Update as per current GNU standards. + (environ): Remove decl. + (read_diff): Invoke diff with --inhibit-hunk-merge. + Translate `not found' message before forking. + Quote name of diff program. + Pass horizon lines. + `memory exhausted' -> `Memory exhausted' + + * pc/makefile (%.exe): Remove. + (pc-clean): Remove *.exe + * pc/makefile.sed (DEFAULT_DIFF_PROGRAM): Renamed from DIFF_PROGRAM. + When editing mkinstalldirs rule, look for exec_prefix and prefix. + Add .exe when installing files. + * pc/emx/config.h (same_file): Add. + * pc/config.h (same_file): Remove. + * pc/djgpp/config.h: Adjust to latest patch from eliz. + * pc/djgpp/makefile.sed: Don't alter PROGRAMS. + * pc/pc.c: Update FSF address. + (quote_system_arg): Renamed from system_quote_arg. + + * README: Add --with-mvfs-stat-bug, --with-nfs-stat-bug. + + * getmsgids: Add copyright date and update FSF address. + + * diff.texi: Document recent changes. + The patch doc still corresponds to patch 2.2, unfortunately. + Update GNU bug reporting address. Omit Larry Wall's address; + it's obsolete and he's busy with perl. + + * context.c: Fix spacing. + + * NEWS: Mention --from-file=FILE, --to-file=FILE, ed. + + * acconfig.h, freesoft.c, message/de.po, message/en_UK.po, + message/es.po, message/fr.po, message/pl.po, message/sv.po: + New files. + + * ed.c: Remove `#if 0'ed code. + + * normal.c, waitpid.c: Update FSF address. + +1998-03-15 Paul Eggert + + * quotesys.c: Renamed from quotearg.c. + + * quotesys.h: Renamed from quotearg.h + (__QUOTESYS_P): Renamed from __QUOTEARG_P. + +1997-05-05 Paul Eggert + + * quotesys.c, quotesys.h: New file. + +Mon Nov 14 05:10:56 1994 Paul Eggert + + Add internationalization support. + Several messages have been changed slightly, + to make them more consistent and easier to translate. + All strings that are messages are passed through gettext once before + being used, so that they can be localized. + Each function and macro whose first parameter is a gettext msgid + has had its first parameter's name changed so it ends in `msgid'. + All arrays of msgids have had their names changed to end in `msgid'. + `getmsgids' uses this to determine which strings are msgids. + + * pc/COPYING, pc/INSTALL, pc/config.h, + pc/djgpp/config.h, pc/djgpp/makefile.sed, + pc/emx/config.h, pc/emx/diff.def, pc/emx/gnuregex.def, + pc/emx/makefile.sed, + pc/makefile, pc/makefile.sed, pc/pc.c: New files, for PC support. + + * getmsgids: New file. + + * Makefile.in (PACKAGE, VERSION, diffutils_srcs, D): New vars. + (version.c, version.texi, messages.po): New files. + messages.po is built automatically from source files and `getmsgids'. + (distfiles): Add them, pc/*, and getmsgids. + (diff.info): Now depends on version.texi. + (realclean): Clean messages.po, version.*. + (dist): Just build $D.tar.gz. + ($D.tar.gz): New file, takes over old `dist' function. + Don't assume $(distfiles) are all in same directory. + + * configure.in (AC_CHECK_HEADERS): Add libintl.h, locale.h. + (AC_CHECK_LIB): Check for -lintl. + + * analyze.c (briefly_report): Rewrite `message (A?"B":"C")' as + `if (A) message ("B") : message ("C")'; this is for getmsgids. + (briefly_report, diff_2_files): For label, use file_label if set. + * diff.c (compare_files): Likewise. + + * system.h (gettext): Declare; use a stub if ! HAVE_LIBINTL_H. + (setlocale): Declare; use a stub if ! HAVE_LOCALE_H. + + * cmp.c, diff.c, diff3.c, sdiff.c (main): + Invoke setlocale first thing, to tell library we're internationalized. + (option_help_msgid): New constant. + (usage): Use it, so message is translated one option at a time. + * sdiff (help_msgid, give_help): Likewise. + + * cmp.c (sprintc): Renamed from `printc'. + Now outputs to a buffer instead of stdout. + (cmp): Use new sprintc; it's easier to internationalize. + + * diff.c (main): -D FOO now outputs `/* ! FOO */ instead of + `/* not FOO */'. + + * sdiff.c (version_string): Fix decl typo: `const' was missing. + (trapsigs): Ignore sigaction failure, to be compatible with `signal'. + + * util.c (struct msg, message5, print_message_queue): + Allocate just one block of memory to save a message. + +Wed Nov 9 17:42:44 1994 Paul Eggert + + * sdiff.c (trapsigs): Don't check signal return value, since it's + bogus under djgpp. + +Mon Oct 31 07:27:27 1994 Paul Eggert + + * Makefile.in (srcs, diff_o, diff3_o, sdiff_o): + New files quote.c, quote.o. + + * diff.h (function_regexp, ignore_regexp): Replace lists of compiled + regexps with these single compiled regexps. All users changed. + (regexp_list,function_regexp_list,ignore_regexp_list): Move to diff.c. + * diff.c (add_regexp): Build one big regexp instead of a regexp list. + (summarize_regexp_list): New function. + (regexp_list): Redesigned struct; moved here from diff.h. + (function_regexp_list, ignore_regexp_list): Likewise, for vars. + + * context.c (find_function): Simplify interface: + don't return size of function line. All callers changed. + (print_context_script, find_function): INT_MAX now denotes no + previous match; this is simpler than `- file->prefix_lines - 1'. + + * diff3.c (read_diff): Quote arguments with system_quote_arg. + * sdiff.c (main): Use system_quote_arg to compute command. + * diff.c (option_list): Quote options with system_quote_arg. + * util.c (begin_output): Use system_quote_arg to compute command. + + * util.c (pr_program): New var. + (analyze_hunk): Fix off-by-1 line length bug. + Match with one big regexp instead of a list of regexps. + Use new `trivial_length' local instead of comparing first byte to `\n'. + Help the compiler with linbuf local vars. + + * system.h (system_quote_arg): + New function; replaces SYSTEM_QUOTE_ARG macro. + +Sat Oct 15 20:09:12 1994 Paul Eggert + + * system.h (_tolower): Define if not already defined. + * io.c (find_and_hash_each_line): Change tolower to _tolower; this + speeds up diff -i considerably on some hosts (e.g. Solaris 2.3). + * util.c (line_cmp): Likewise. + * ifdef.c (groups_letter_value): Likewise. + + * diff.h (ignore_some_line_changes): Remove. All users changed. + * io.c (find_and_hash_each_line): Don't invoke line_cmp if the length + differs and -i is in force. Don't assume ISSPACE ('\n') is nonzero. + + * diff.h (xmalloc_exit_failure): New variable. + All `main' programs set this variable at the start. + xmalloc and xrealloc are now taken from GNU library. + * cmp.c (main): Align buffer size to word size; some mallocs care. + * io.c (slurp): Likewise. + * diff.c (add_exclude): Can now assume xrealloc (0, ...) works. + (add_regexp): Free storage on failure. Allocate storage all at one go. + * system.h (malloc, realloc): Remove unused declarations. + * diff3.c, sdiff.c, util.c (xmalloc, xrealloc): Remove. + * sdiff.c (diffarg): Take advantage of cleaner xrealloc semantics. + + * io.c (ROL): Use sizeof to make it more generic. + + * Makefile.in (common_o): New variable. + Link error.o and xmalloc.o into all programs. + (check): Depend on $(PROGRAMS). + + * diff.h (error): Change to GNU library standard. All callers changed. + * diff3.c (main): Use strerror (EISDIR) instead of "Is a directory". + (fatal, perror_with_exit): Use `error'. + * util.c (perror_with_name, fatal): Use GNU `error'. + (error): Remove. + +Wed Oct 12 17:04:40 1994 David J. MacKenzie (djm@duality.gnu.ai.mit.edu) + + * cmp.c (main): Set xmalloc_exit_failure. + +Sat Oct 1 05:24:19 1994 Paul Eggert + + * Version 2.7 released. + + * configure.in (AC_HEADER_SYS_WAIT): Add. + (AC_CHECK_HEADERS): Remove sys/wait.h. + (AC_CHECK_FUNCS): Add tmpnam. + * system.h (, WEXITSTATUS): Use simpler scheme + now that HAVE_SYS_WAIT_H is not set on hosts + that are incompatible with Posix applications. + + * util.c (dir_file_pathname): Use filename_lastdirchar not strrchr. + * sdiff.c (expand_name): Likewise. + (private_tempnam): Use tmpnam if HAVE_TMPNAM; this simplifies porting. + (exists, letters): Omit if HAVE_TMPNAM. + + * diff3.c (read_diff): If STAT_BLOCKSIZE yields zero, + adjust it to a more reasonable value. + +Sat Sep 24 20:36:40 1994 Paul Eggert + + * sdiff.c (exists, private_tempname): Adopt latest GNU libc algorithm. + (private_tempnam): Specialize for sdiff to avoid portability problems. + +Thu Sep 22 16:47:00 1994 Paul Eggert + + * configure.in (AC_ARG_PROGRAM): Added. + (AC_OUTPUT): Add [date > stamp-h]. + + * Makefile.in (DEFAULT_EDITOR_PROGRAM, DIFF_PROGRAM, LIBOBJS, + NULL_DEVICE, PR_PROGRAM, PROGRAMS): New variables. + (check, stamp-h.in, cmp.o, util.o): New targets. + (edit_program_name): New variable; replaces old binprefix method. + (install, uninstall): Use it. + (binprefix): Removed. + (distfiles): Add stamp-h.in. + (clean): Clean stamp-h. + (config.hin, config.h): Use time stamp files. + (cmp_o): Add $(LIBOBJS). + (install): Install info files from srcdir if they're not in `.'. + + * cmp.c, io.c (word): Don't define if already defined. + + * comp.c (main): Use setmode, not open(..., O_BINARY); this gets stdin. + Use NULL_DEVICE instead of "/dev/null". + (cmp): Use %lu instead of %ld when it is more likely to be right. + + * diff.h (PR_FILE_NAME): Rename to PR_PROGRAM and move to Makefile.in, + util.c. + + * diff3.c (main): Give proper diagnostic if too many labels were given. + (read_diff): Use SYSTEM_QUOTE_ARG. + + * system.h: : Include if HAVE_STRING_H, too. + : Include here. All includers changed. + (CTYPE_DOMAIN, ISDIGIT, ISPRINT, ISSPACE, ISUPPER): New macros that + work around common problems. + (O_BINARY): Remove. + (SYSTEM_QUOTE_ARG): New macros. + + * diff.c: Add comment. + + * util.c (PR_PROGRAM): Moved here from diff.h. + (begin_output): Use SYSTEM_QUOTE_ARG. + + * io.c (read_files): Set mode to binary before returning 1. + + * sdiff.c (TMPDIR_ENV): New macro. + (DEFAULT_EDITOR_PROGRAM): Renamed from DEFAULT_EDITOR for consistency. + (expand_name): Change `isdir' to `is_dir' to avoid theoretical ctype + namespace contamination. + (main): Use SYSTEM_QUOTE_ARG. + (private_tempnam): Don't access "/tmp" directly; use PVT_tmpdir. + +Tue Sep 13 18:46:43 1994 Paul Eggert + + * configure.in (AC_FUNC_MEMCHR): Remove. Autoconf didn't adopt this, + since we need not worry about an old experimental library + where memchr didn't work. + (AC_FUNC_MEMCMP): Not needed, since we only test for equality. + (AC_REPLACE_FUNCS): Add test for memchr. + (AC_CHECK_FUNCS): Check for memchr, not memcpy, since it'll be cached. + (AC_CHECK_HEADERS): Add string.h; regex.c uses on some old hosts. + + * system.h (memcmp): Define in terms of bcmp. + Use HAVE_MEMCHR to test for all mem* routines. + + * Makefile.in (srcs): Remove memcmp.c. + We use bcmp if memcmp doesn't work, since we only test for equality. + +Mon Sep 12 15:52:22 1994 Paul Eggert + + * configure.in (AC_CONFIG_HEADER): Rename config.h.in to config.hin. + (AC_ISC_POSIX, AC_MINIX): Go back to these old names for Autoconf 2. + (AC_CHECK_HEADERS): Remove now-redundant check for . + (AC_CHECK_FUNCS): Check for strchr. + (AC_FUNC_MEMCHR, AC_FUNC_MEMCMP, AC_CHECK_FUNCS): Use special-purpose + macros when suitable. + * memcmp.c: New file. + * Makefile.in (CPPFLAGS, DEFS, CFLAGS, LDFLAGS, prefix, exec_prefix): + Default to autoconf-specified strings. + (COMPILE): Use the defaults. + (srcs): Add memcmp.c. + (distfiles): Rename config.h.in->config.hin, install.sh->install-sh. + (Makefile, config.h, config.hin, config.status): Rework for + compatibility with Autoconf 2. + * io.c (binary_file_p): Assume non-broken memchr. + * memchr.c: Assume compiler understands void *; otherwise + we don't match GCC's internal declaration of memchr. + * system.h: Use more modern autoconf approach to standard C headers. + * version.c: Include , not "config.h". + + * diff.c, diff.h (ignore_some_line_changes): + New variable; replaces `length_varies'. + (line_end_char): Replace with '\n'; it wasn't being used consistently. + + * io.c (find_and_hash_each_line): Fix inconsistencies with -b -w -i and + incomplete lines. Put incomplete lines into their own bucket. + This means line_cmp no longer needs line length arguments, + and equivalence classes' line lengths no longer need to include \n. + Invoke line_cmp only if ignore_some_line_changes. + (prepare_text_end): -B no longer ignores missing newlines. + (read_files): Allocate another bucket for incomplete lines. + + * util.c (line_cmp): Now takes just two arguments. No longer + optimizes for common case of exact equality; the caller does that + optimization now. The caller is changed accordingly. + Optimize for the common case of mostly equality. + Use isupper+tolower instead of islower+toupper, for consistency. + + * waitpid.c (waitpid): Fix typo with internal scoping. + +Thu Sep 8 08:23:15 1994 Paul Eggert + + * configure.in: Revamp for Autoconf 2. + * memchr.c, waitpid.c: New source files for substitute functions. + * Makefile.in (diff_o, diff3_o, sdiff_o): Add $(LIBOBJS). + (srcs): Add memchr.c, waitpid.c. + (distfiles): Add install.sh, memchr.c, waitpid.c, install.sh. + * system.h: Use Autoconf 2 style HAVE_DIRENT_H etc. macros for dirs. + * dir.c (dir_sort): Prefer NAMLEN (p) to strlen (p->d_name). + Change VOID_CLOSEDIR to CLOSEDIR_VOID for Autoconf 2. + * sdiff.c, util.c (memchr, waitpid): Remove; use new substitutes. + * diff3.c (read_diff): Use new waitpid substitute. + + * cmp.c, diff.c, diff3.c, sdiff.c (check_stdout, try_help): New fns. + (usage): Just print more detailed usage message; let caller exit. + * diff.c (option_help): New variable. + (filetype): Add Posix.1b file types. + +Fri Sep 2 16:01:49 1994 Paul Eggert + + * configure.in: Switch to new autoconf names. Add sys/file.h test. + * Makefile.in (distclean): Clean config.cache, config.log + (used by new autoconf). + + * diff.c, diff3.c, (main), sdiff.c (trapsigs): If we'll have children, + make sure SIGCHLD isn't ignored. + + * diff3.c (DIFF_CHUNK_SIZE): Removed. Get size from STAT_BLOCKSIZE. + (INT_STRLEN_BOUND): New macro. + + * ifdef.c (format_group, groups_letter_value): + Use * instead of [] in prototypes. + + * system.h: Include only if HAVE_SYS_FILE_H. + (S_IXGRP, S_IXOTH, S_IXUSR): Remove unused macros. + + * util.c (begin_output): Check fdopen result. + + The following changes simplify porting to non-Posix environments. + * cmp.c, diff.c, diff3.c, sdiff.c, (main): Call initialize_main first. + * diff.c (binary_I_O): New variable for --binary option. + (main, usage, compare_files): Support --binary option. + (compare_files): Use filename_lastdirchar to find last + directory char in a file name. + * cmp.c (main), diff.c (compare_files), dir.c (compare_names, + diff_dirs): Use filename_cmp to compare file names. + Use same_file to determine whether two files are the same. + * context.c (print_context_label): Check whether ctime yields 0. + * diff3.c (read_diff), sdiff.c (cleanup, main, waitpid), + util.c (begin_output): Use popen+pclose if !HAVE_FORK. + * io.c (sip): If HAVE_SETMODE, test for binary files in O_BINARY mode. + * sdiff.c (ck_fdopen): Function removed. + (edit): Use system if !HAVE_FORK. + (execdiff): Now assumes caller has pushed all args, plus trailing 0. + All callers changed. + (private_tempnam): Try TMP if TMPDIR isn't defined. + Fit temporary filenames into 8.3 limit. + * system.h (STAT_BLOCKSIZE): Don't define if already defined. + (min, max): Undef if already defined. + (filename_cmp, filename_lastdirchar, HAVE_FORK, HAVE_SETMODE, + initialize_main, O_BINARY, same_file): New macros. + +Fri Jun 17 11:23:53 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu) + + * Makefile.in (info, dvi, diff.dvi): New targets. + (clean): Remove TeX output files. + +Fri Jun 17 05:37:52 1994 Paul Eggert (eggert@twinsun.com) + + * cmp.c, io.c (word): Change from typedef to #define, to avoid + collision with Unicos 8.0 , which also typedefs `word'. + +Thu Apr 15 00:53:01 1994 Paul Eggert (eggert@twinsun.com) + + * diff3.c (scan_diff_line), util.c (print_number_range): Don't + rely on promotion to make the old-style parameter type agree + with the prototype parameter type; this doesn't work on + Apollos running bsd4.3. + +Mon Jan 3 02:05:51 1994 Paul Eggert (eggert@twinsun.com) + + * Makefile.in (LDFLAGS): Remove -g. Change all link commands + to use both $(CFLAGS) and $(LDFLAGS). + +Mon Dec 13 12:23:27 1993 Paul Eggert (eggert@twinsun.com) + + * system.h: Don't assume dirent.h exists just because + _POSIX_VERSION is defined. + +Fri Dec 3 18:39:39 1993 Paul Eggert (eggert@twinsun.com) + + * diff.c (main): allow -pu. + +Tue Nov 23 03:51:08 1993 Paul Eggert (eggert@twinsun.com) + + * Makefile.in (distclean): Remove config.h. + +Wed Nov 10 00:28:27 1993 Paul Eggert (eggert@twinsun.com) + + * Version 2.6 released. + + * analyze.c (too_expensive): New variable, for heuristic to + limit the worst-case cost to O(N**1.5 log N) at the price of + producing suboptimal output for large inputs with many differences. + (diff_2_files): Initialize it. + (struct partition): New type. + (SNAKE_LIMIT): New macro; merely documents already-used number 20. + (diag): New `minimal' arg; all callers changed. Put results into + struct partition. Apply `too_expensive' heuristic. Tune. + (compareseq): New `minimal' arg; all callers changed. Tune. + (shift_boundaries): Improve heuristic to also coalesce adjacent runs + of changes more often. + + * diff.c (long_options, main, usage): Add `--help'. + (main): Send version number to stdout, not stderr. + (usage): Send usage to stdout, not stderr. + (compare_files): Initialize `inf' properly. + + * io.c (word): Change to `int'; it makes a big difference on x86. + (sip, slurp): Put off allocating room to hold the whole file until we + have to read the whole file. This wins if the file turns out + to be binary. + + * util.c (xmalloc, xrealloc): "virtual memory" -> "memory" + (primes): Omit large primes if INT_MAX is small. + + * sdiff.c (usage): Send usage to stdout, not stderr. + (long_options, main, usage): Add `--help'. + (main): Send version number to stdout, not stderr. Exit afterwards. + + * diff3.c (usage): Send usage to stdout, not stderr. + (long_options, main, usage): Add `--help'. + (read_diff): Detect integer overflow in buffer size calculations. + + * cmp.c (word): New type. All uses of `long' for + word-at-a-time comparisons changed to `word'. + (long_options, main, usage): Add `--help'. + (usage): Send usage to stdout, not stderr. + (main): Add `-v'. Send version number to stdout, not stderr. + + * configure.in (AC_HAVE_HEADERS): Add unistd.h; remove AC_UNISTD_H. + +Mon Sep 27 07:20:24 1993 Paul Eggert (eggert@twinsun.com) + + * diff.c (add_exclude_file): Cast memchr to (char *) + to suppress bogus warnings on some nonstandard hosts. + + * Makefile.in (cmp): Add version.o. + + * analyze.c (diff_2_files): Work around memcmp bug with size=0. + + * cmp.c (main, usage, version_string): Add --version option. + + * system.h (malloc, realloc): Declare only if !HAVE_STDLIB_H. + (memchr): Declare only if !HAVE_MEMCHR. These changes are + needed to keep some nonstandard hosts happy. + + * util.c (memchr): Make first arg char const * + to match standard. + (xmalloc, xrealloc): Cast malloc, realloc + to (VOID *) to suppress bogus warnings on some nonstandard hosts. + + * diff3.c (xmalloc, xrealloc): Cast malloc, realloc + to (VOID *) to suppress bogus warnings on some nonstandard hosts. + + * sdiff.c (xmalloc, xrealloc): Cast malloc, realloc + to (VOID *) to suppress bogus warnings on some nonstandard hosts. + (lf_copy, lf_skip, lf_snarf): Cast memchr to (char *) + to suppress bogus warnings on some nonstandard hosts. + (memchr): Make first arg char const * + to match standard. + +Mon Sep 27 00:23:37 1993 Paul Eggert (eggert@twinsun.com) + + * Version 2.5 released. + + * analyze.c (diff_2_files): Work around memcmp bug with size=0. + + * cmp.c (main, usage, version_string): Add --version option. + * Makefile.in (cmp): Add version.o. + + * diff.c (add_exclude_file): Cast memchr to (char *) + to suppress bogus warnings on some nonstandard hosts. + * sdiff.c (lf_copy, lf_skip, lf_snarf): Likewise. + + * diff3.c, sdiff.c, util.c (xmalloc, xrealloc): Cast malloc, realloc + to (VOID *) to suppress bogus warnings on some nonstandard hosts. + + * sdiff.c, util.c (memchr): Make first arg char const * + to match standard. + + * system.h (malloc, realloc): Declare only if !HAVE_STDLIB_H. + (memchr): Declare only if !HAVE_MEMCHR. These changes are + needed to keep some nonstandard hosts happy. + + * xmalloc.c: Include always; some nonstandard hosts + need it for size_t even if STDC_HEADERS. + +Sat Sep 18 01:33:07 1993 Paul Eggert (eggert@twinsun.com) + + * configure.in (AC_STAT_MACROS_BROKEN): Add. + * system.h (S_IS{BLK,CHR,DIR,FIFO,REG,SOCK}): Fix defns if + STAT_MACROS_BROKEN. + + * Makefile.in (diff3, sdiff, cmp): Do not link $(ALLOCA). + + * analyze.c (discard_confusing_lines): Make defn static, like decl. + * sdiff.c (xmalloc): Likewise. + + * ifdef.c (format_group): Ensure isdigit argument isn't < 0. + + * side.c (print_half_line): Use isprint, since some hosts lack isgraph. + * util.c (output_1_line): Likewise. Ensure its argument isn't < 0. + (xmalloc, xrealloc): Remove needless casts. + + * system.h (volatile, const): + Define these before including any system headers, + so that they're used consistently in all system includes. + (getenv, malloc, realloc): Declare even if HAVE_STDLIB_H, since some + s don't declare them. + (memchr): Likewise for . + + * cmp.c, diff3.c, diff.h, sdiff.c: Include "system.h" first. + * diff.c: Remove redundant "system.h" inclusion. + + * diff3.c (xmalloc): Now static. + (xmalloc, realloc): Remove needless casts. + (READNUM): Ensure isdigit argument isn't negative. + +Wed Sep 14 07:14:15 1993 Paul Eggert (eggert@twinsun.com) + + * Version 2.4 released. + + * ifdef.c (scan_char_literal): New function, for new %c'x' and + %c'\ooo' format specs. + (format_group, print_ifdef_lines): Use it. Remove %0 format spec. + + * cmp.c (cmp): Don't try to read past end of file; this doesn't + work on ttys. + + * system.h, version.c: #include , not "config.h", to allow + configuring in a separate directory when the source directory has + already been configured. + * Makefile.in (COMPILE): New defn, with proper -I options so that + `#include ' works. + (.c.o, diff3.o, sdiff.o): Use it. + +Mon Sep 13 06:45:43 1993 Paul Eggert (eggert@twinsun.com) + + * diff.c (main, longopts): Add --line-format=FORMAT option. + (specify_format): Args no longer const pointers. All callers changed. + + * ifdef.c: Add support for %?c, %(A=B?T:E), PRINTF_SPECn formats. + (struct group): New struct. + (print_ifdef_lines): Use it to simplify argument passing. + Remove the convention that last arg -1 signifies that the lines + from file 2 are the same as the lines from file 1; this + convention no longer works, now that line numbers might be + printed out, since the line numbers may differ. + Add first FILE * argument to output to. All callers changed. + Use a faster test for the single-fwrite optimization. + (format_group, scan_printf_spec, groups_letter_value): New functions. + + * diff.h (group_format, line_format): No longer const pointers. + (format_ifdef): 1st arg is no longer const pointer. + + * configure.in: Configure HAVE_LIMITS_H, HAVE_STDLIB_H. + * system.h , , : + Include only if HAVE_LIMITS_H etc. + + * system.h (memcmp, memcpy, strchr, strrchr, struct dirent): Prefer + these standard names to the traditional names (bcmp, bcpy, index, + rindex, struct direct). All callers changed. + + * system.h (PARAMS, VOID): + Define earlier so that malloc decl can use VOID. + (STAT_BLOCKSIZE): Simplify ersatz defn; just use 8K. + +Fri Sep 3 00:21:02 1993 Paul Eggert (eggert@twinsun.com) + + * diff.c (compare_files): Two files with the same name must be + the same file; avoid a needless `stat' in that case. + +Fri Aug 27 06:59:03 1993 Paul Eggert (eggert@twinsun.com) + + * Pervasive changes for portability to 64-bit hosts: + Add prototypes to function declarations. + Use size_t, not int, when needed. + + * Other pervasive changes: + Use `const' more often. + Use STD{IN,OUT,ERR}_FILENO instead of [012]. + Use 0, not NULL, for portability to broken hosts. + + * Makefile.in: (srcs, objs, distfiles, cmp): New files cmpbuf.[ch]. + (distfiles): New files config.h.in, mkinstalldirs. + (.c.o): Add -DHAVE_CONFIG_H. + + * analyze.c: (diag): Pacify `gcc -Wall' with a useless assignment. + (diff_2_files): Use l.c.m., not max, of files' buffer sizes. + + * cmp.c: Make globals static when possible. + + (file): Now a 2-element array; replaces `file1' and `file2'. + (file_desc, buffer): Likewise, for file[12]_desc and buf[12]. + (main): Likewise, for stat_buf[12]. Index these variables with `i'. + + (ignore_initial): New var. + (long_options): Now const. Add `--ignore-initial'. + (usage): Sort options and add `--ignore-initial'. + (main, cmp): Add `--ignore-initial' support. + + (main): `cmp - -' now succeeds. + When comparing standard input to a file, and using a shortcut (e.g. + looking at file sizes or inode numbers), take the lseek offset into + account before deciding whether the files are identical. + Avoid mentioning `dev_t', `ino_t' for portability to nonstandard hosts. + Use l.c.m. of files' buffer sizes, not 8 * 1024. + ferror (stdout) does not imply errno has a useful value. + If 2nd file is "-", treat it first, in case stdin is closed. + + (cmp): Always compute `char_number', `smaller' for speed and simplicity. + Say `cmp: EOF on input', not `/usr/gnu/bin/cmp: EOF on input', + as per Posix.2. + + (block_compare_and_count): Increment line_number argument. + Remove end_char argument; it's always '\n'. All callers changed. + Do not assume sizeof(long) == 4; this isn't true on some 64-bit hosts. + (block_compare): Minimize differences with block_compare_and_count. + + (block_read): Coalesce `bp += nread's. + + (printc): Remove `FILE *' arg; output to stdout. All callers changed. + + * configure.in: Configure HAVE_SIGACTION, RETSIGTYPE, HAVE_VPRINTF. + Configure into config.h. + + * context.c (print_context_label): + Standard input's st_mtime is no longer a special case + here, since `compare_files' now sets it to the current time. + + * diff.c (usage): Sort options. + (filetype): New function. + (compare_files): Set stdin's st_mtime to be the current time. + Leave its name "-" instead of changing it to "Standard Input"; + to test whether a file is stdin, we must compare its name to "-" instead + of its desc to 0, since if it's closed other file descs may be 0. + When comparing standard input to a file, and using a shortcut (e.g. + looking at file sizes or inode numbers), take the lseek offset into + account before deciding whether the files are identical. + Pretend that nonexistent files have the same filetype as existing files. + Rename `errorcount' to `failed', since it's boolean. + In directory comparisons, if a file is neither a regular file nor a + directory, just print its type and the other file's type. + + * diff.h (Is_space, textchar): Remove. + (struct msg, msg_chain, msg_chain_end): Move to util.c. + (VOID): Move to system.h. + (line_cmp, version_string, change_letter, print_number_range, + find_change): New decls. + + * diff.texi: + whitespace -> white space. It now stands for whatever isspace yields. + Add --ignore-initial. + + * diff3.c (VOID): Move to system.h. + (version_string): Now char[]. + (usage): Sort options. + (process_diff): Pacify `gcc -Wall' with a useless assignment. + (read_diff): pid is of type pid_t, not int. Use waitpid if available. + (output_diff3): Simplify test for `\ No newline at end of file' message. + + * dir.c (struct dirdata): Rename `files' to `names' to avoid confusion + with external struct file_data `files'. + + * io.c (line_cmp): Move declaration to diff.h. + (textchar): Remove. + (find_and_hash_each_line): Use locale's definition of white space + instead of using one hardwired defn for -b and another for -w. + + * normal.c (change_letter, print_number_range, find_change): + Move decls to diff.h. + (print_normal_hunk): Now static. + + * sdiff.c (SEEK_SET): Move to system.h. + (version_string): Now char[], not char*. + (private_tempnam): Remove hardcoded limit on temporary file names. + (exiterr, perror_fatal, main): When exiting because of a signal, + exit with that signal's status. + (lf_refill, main, skip_white, edit, interact): Check for signal. + (ignore_SIGINT): Renamed from `ignore_signals'. + (NUM_SIGS, initial_handler): New macros. + (initial_action, signal_received, sigs_trapped): New vars. + (catchsig, trapsigs): Use sigaction if possible, since this closes the + windows of vulnerability that `signal' has. Use RETSIGTYPE not void. + When a signal comes in, just set a global variable; this is safer. + (checksigs, untrapsig): New functions. + (edit): Pacify `gcc -Wall' with a useless assignment. + Respond to each empty line with help, not to every other empty line. + (private_tempnam): Remove hardcoded limit on temporary file name length. + Don't assume sizeof (pid_t) <= sizeof (int). + + * system.h: (S_IXOTH, S_IXGRP, S_IXUSR, + SEEK_SET, SEEK_CUR, + STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO): + New macros, if system doesn't define them. + (volatile): Don't define if already defined. + (PARAMS): New macro. + (VOID): Move here from diff.h. + + * util.c (struct msg, msg_chain, msg_chain_end): Moved here from diff.h. + (message5): New function. + (pr_pid): New var. + (begin_output): Allocate `name' more precisely. + Put child pid into pr_pid, so that we can wait for it later. + Don't check execl's return value, since any return must be an error. + (finish_output): Detect and report output errors. + Use waitpid if available. Check pr exit status. + (line_cmp): Use locale's definition of white space + instead of using one hardwired defn for -b and another for -w. + (analyze_cmp): Avoid double negation with `! nontrivial'. + Pacify `gcc -Wall' be rewriting for-loop into do-while-loop. + (dir_file_pathname): New function. + + * version.c (version_string): Now char[], not char*. + +Thu Jul 29 20:44:30 1993 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu) + + * Makefile.in (config.status): Run config.status --recheck, not + configure, to get the right args passed. + +Thu Jul 22 10:46:30 1993 Paul Eggert (eggert@twinsun.com) + + * Makefile.in (dist): Replace `if [ ! TEST ]; then ACTION; fi' + with `[ TEST ] || ACTION || exit' so that the containing for-loop exits + with proper status for `make'. + +Thu Jul 8 19:47:22 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu) + + * Makefile.in (installdirs): New target. + (install): Use it. + (Makefile, config.status, configure): New targets. + +Sat Jun 5 23:10:40 1993 Paul Eggert (eggert@twinsun.com) + + * Makefile.in (dist): Switch from .z to .gz. + +Wed May 26 17:16:02 1993 Paul Eggert (eggert@twinsun.com) + + * diff.c (main): Cast args to compare_files, for traditional C. + * side.c (print_sdiff_common_lines, print_sdiff_hunk): Likewise. + * analyze.c, diff3.c, sdiff.c, util.c: Don't assume NULL is defined + properly. + +Tue May 25 14:54:05 1993 Paul Eggert (eggert@twinsun.com) + + * analyze.c (diff_2_files): With -q, do not report that files differ + if all their differences are ignored. + (briefly_report): New function. + * diff.h (ignore_some_changes): New variable. + * diff.c (compare_files): Don't use the file size shortcut if + ignore_some_changes is nonzero, since the file size may differ + merely due to ignored changes. + (main): Set ignore_some_changes if we might ignore some changes. + Remove unsystematic assignment of 0 to static vars. + * io.c (read_files): New argument PRETEND_BINARY says whether to + pretend the files are binary. + + * diff3.c (tab_align_flag): New variable, for new -T option. + (main, usage, output_diff3): Add support for -T. + +Sun May 23 15:25:29 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * dir.c (dir_sort): Always init `data' to avoid GCC warning. + +Sat May 22 15:35:02 1993 Paul Eggert (eggert@twinsun.com) + + * Makefile.in (dist): Change name of package from diff to diffutils. + Don't bother to build .Z dist; .z suffices. + +Fri May 21 16:35:22 1993 Paul Eggert (eggert@twinsun.com) + + * diff.c: Include "system.h" to get memchr declaration. + * system.h (memchr): Declare if !HAVE_MEMCHR, not if + !HAVE_MEMCHR && !STDC_HEADERS. + +Wed May 19 17:43:55 1993 Paul Eggert (eggert@twinsun.com) + + * Version 2.3 released. + +Fri Apr 23 17:18:44 1993 Paul Eggert (eggert@twinsun.com) + + * io.c (find_identical_ends): Do not discard the last HORIZON_LINES + lines of the prefix, or the first HORIZON_LINES lines of the suffix. + * diff.c (main, longopts, usage): Add --horizon-lines option. + * diff3.c (main, process_diff, read_diff): Invoke second diff + with --horizon-lines determined by the first diff. + * diff.h, diff3.c (horizon_lines): New variable. + +Mon Mar 22 16:16:00 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * system.h [HAVE_STRING_H || STDC_HEADERS] (bcopy, bcmp, bzero): + Don't define if already defined. + +Fri Mar 5 00:20:16 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * diff.c (main): Use NULL in arg to compare_files. + +Thu Feb 25 15:26:01 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * system.h: Declare memchr #if !HAVE_MEMCHR && !STDC_HEADERS, + not #if !HAVE_MEMCHR || !STDC_HEADERS. + +Mon Feb 22 15:04:46 1993 Richard Stallman (rms@geech.gnu.ai.mit.edu) + + * io.c (find_identical_ends): Move complicated arg outside GUESS_LINES. + +Mon Feb 22 12:56:12 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Makefile.in (.c.o): Add -I$(srcdir); put $(CFLAGS) last before $<. + +Sat Feb 20 19:18:56 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * io.c (binary_file_p): Return zero if file size is zero. + +Fri Feb 19 17:31:32 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 2.2 released. + + * system.h [HAVE_STRING_H || STDC_HEADERS] (index, rindex): Don't + define if already defined. + +Wed Feb 17 17:08:00 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Makefile.in (srcs): Remove limits.h. + +Thu Feb 11 03:36:00 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * diff3.c (xmalloc): No longer static. + + * sdiff.c (edit): Allocate buf dynamically. + + * dir.c (dir_sort): Handle VOID_CLOSEDIR. + +Wed Feb 10 00:15:54 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * limits.h: File deleted (should never have been there). + +Tue Feb 9 03:53:22 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile.in (.c.o, diff3.o, sdiff.o): Put $(CFLAGS) last. + +Wed Feb 3 15:42:10 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu) + + * system.h: Don't #define const; let configure do it. + +Mon Feb 1 02:13:23 1993 Paul Eggert (eggert@hal.gnu.ai.mit.edu) + + * Version 2.1 released. + + * Makefile.in (dist): Survive ln failures. Create .tar.z + (gzipped tar) file as well as .tar.Z (compressed tar) file. + +Fri Jan 8 22:31:41 1993 Paul Eggert (eggert@twinsun.com) + + * side.c (print_half_line): When the input position falls + outside the column, do not output a tab even if the output + position still falls within the column. + +Mon Dec 21 13:54:36 1992 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu) + + * Makefile.in (.c.o): Add -I. + +Fri Dec 18 14:08:20 1992 Paul Eggert (eggert@twinsun.com) + + * configure.in: Add HAVE_FCNTL_H, since system.h uses it. + +Tue Nov 24 10:06:48 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu) + + * Makefile.in: Note change from USG to HAVE_STRING_H. + +Mon Nov 23 18:44:00 1992 Paul Eggert (eggert@twinsun.com) + + * io.c (find_and_hash_each_line): When running out of lines, + double the number of allocated lines, instead of just doubling + that number minus the prefix lines. This is more likely to + avoid the need for further memory allocation. + +Wed Nov 18 20:40:28 1992 Paul Eggert (eggert@twinsun.com) + + * dir.c (dir_sort): Plug memory leak: space holding directory + contents was not being reclaimed. Get directory size from + struct file_data for initial guess at memory needed. + Detect errors when reading and closing directory. + (diff_dirs): Pass struct file_data to dir_sort. Finish plugging leak. + * diff.c (compare_files): Pass struct file_data to diff_dirs. + + * io.c (find_and_hash_each_line): Don't assume alloc_lines is + nonzero when allocating more lines. + +Thu Nov 12 16:02:18 1992 Paul Eggert (eggert@twinsun.com) + + * diff.c (main): Add `-U lines' as an alias for `--unified=lines'. + + * diff3.c (usage): Add third --label option in example. + + * util.c (analyze_hunk): Fix test for ignoring blank lines. + + * configure.in, system.h: Avoid USG; use HAVE_TIME_H etc. instead. + +Mon Nov 9 05:13:25 1992 Paul Eggert (eggert@twinsun.com) + + * diff3.c (main, usage): Add -A or --show-all. + -m now defaults to -A, not -E. Allow up to three -L options. + (output_diff3_edscript, output_diff3_merge): + Remove spurious differences between these two functions. + Output ||||||| for -A. Distinguish between conflicts and overlaps. + (dotlines, undotlines): New functions that output `Ns', not `N,Ns'. + (output_diff3_edscript, output_diff3_merge): Use them. + + * io.c (find_identical_ends): shift_boundaries needs an extra + identical line at the end, not at the beginning. + + * sdiff.c (edit): execvp wants char **, not const char **. + +Mon Oct 19 04:39:32 1992 Paul Eggert (eggert@twinsun.com) + + * context.c (print_context_script, find_function): Context + line numbers start with - file->prefix_lines, not 0. + + * io.c (binary_file_p): Undo last change; it was a library bug. + +Sun Oct 18 00:17:29 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * io.c (binary_file_p): Consider empty file as non-binary. + +Mon Oct 5 05:18:46 1992 Paul Eggert (eggert@twinsun.com) + + * diff3.c (main, make_3way_diff, using_to_diff3_block): Don't + report bogus differences (for one of -mexEX3) just because the + file0-file1 diffs don't line up with the file0-file2 diffs. + (This is entirely possible since we don't use diff's -n + option.) Always compare file1 to file2, so that diff3 sees + those changes directly. Typically, file2 is now the common + file, not file0. + (output_diff3_merge): The input file is file 0, not the common file. + + (FC, FO): New macros; they replace FILE1, FILE0 for two-way diffs, + to distinguish them from three-way diffs. + + * diff3.c (using_to_diff3_block): Fold repeated code into loops. + + * diff3.c (make_3way_diff, process_diff): Have the *_end + variable point to the next field to be changed, not to the last + object allocated; this saves an if-then-else. + + * diff3.c (process_diff): Use D_NUMLINES instead of its definiens. + + * diff3.c: Make fns and vars static unless they must be external. + +Wed Sep 30 09:21:59 1992 Paul Eggert (eggert@twinsun.com) + + * analyze.c (diff_2_files): OUTPUT_IFDEF is now robust. + * diff.h (ROBUST_OUTPUT_STYLE): Likewise. + (default_line_format): Remove. All refs removed. + + * ifdef.c (print_ifdef_lines): Add %L. Optimize %l\n even if user + specified it, as opposed to its being the default. + +Tue Sep 29 19:01:28 1992 Paul Eggert (eggert@twinsun.com) + + * diff.c (longopts, main): --{old,new,unchanged,changed}--group-format + are new options, so that -D is no longer overloaded. Set + no_diff_means_no_output if --unchanged-{line,group}-format allows it. + * diff.h (enum line_class): New type. + (group_format, line_format): Use it to regularize option flags. + All refs changed. + + * ifdef.c (format_ifdef, print_ifdef_lines): %n is no longer a format. + +Mon Sep 28 04:51:42 1992 Paul Eggert (eggert@twinsun.com) + + * diff.c (main, usage): Replace --line-prefix with the more general + --{old,new,unchanged}-line-format options. + * ifdef.c (format_ifdef, print_ifdef_lines): Likewise. + * diff.h (line_format): Renamed from line_prefix. All refs changed. + * diff.h, ifdef.c (default_line_format): New variable. + * util.c (output_1_line): New function. + (print_1_line): Use it. + + * ifdef.c: (format_ifdef, print_ifdef_lines): Add %0 format. + +Sun Sep 27 05:38:13 1992 Paul Eggert (eggert@twinsun.com) + + * diff.c (main): Add -E or --line-prefix option. Add -D'=xxx' + for common lines. Change default -D< format from copy of -D> + format to to -D<%<; similarly for default -D> format. + * diff.h (common_format, line_prefix): New variables. + * ifdef.c (format_ifdef): New function. + (print_ifdef_script, print_ifdef_hunk, print_ifdef_lines): + Use it for -D'=xxx', -E. + + * context.c (find_hunk): Glue together two non-ignorable changes that + are exactly CONTEXT * 2 lines apart. This shortens output, removes + a behavioral discontinuity at CONTEXT = 0, and is more compatible + with traditional diff. + + * io.c (find_identical_ends): Slurp stdin at most once. + + * util.c (print_line_line): line_flag is const char *. + +Thu Sep 24 15:18:07 1992 Paul Eggert (eggert@twinsun.com) + + * ifdef.c (print_ifdef_lines): New function, which fwrites a sequence + of lines all at once for speed. + (print_ifdef_script, print_ifdef_hunk): Use it. + +Thu Sep 24 05:54:14 1992 Paul Eggert (eggert@twinsun.com) + + * diff.c (main): Support new -D options for if-then-else formats. + (specify_format): New function. + * diff.h (ifndef_format, ifdef_format, ifnelse_format): New variables. + * ifdef.c (print_ifdef_hunk): Use the new variables instead of + a hardwired format. + + * side.c (print_1sdiff_line): Represent incomplete lines on output. + (print_sdiff_script): Likewise. Don't print 'q' at end, + since that doesn't work with incomplete lines. + * sdiff.c (interact): Don't assume diff output ends with 'q' line. + * diff.h (ROBUST_OUTPUT_STYLE): OUTPUT_SDIFF is now robust. + + * sdiff.c (lf_copy, lf_snarf): Use memchr instead of index, + to avoid dumping core when files contain null characters. + (memchr): New function (if memchr is missing). + + * io.c (sip): New arg SKIP_TEST to skip test for binary file. + (read_files): Don't bother testing second file if first is binary. + +Thu Sep 17 21:17:49 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu) + + * system.h [!USG && !_POSIX_VERSION]: Protect from conflicting + prototype for wait in sys/wait.h. + +Wed Sep 16 12:32:18 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu) + + * Makefile.in: Include binprefix in -DDIFF_PROGRAM. + +Tue Sep 15 14:27:25 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu) + + * Version 2.0. + +Sat Sep 12 01:31:19 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu) + + * util.c, diff.h, system.h [!HAVE_MEMCHR]: Don't use void * + and const when declaring memchr replacement. Declare memchr + if !STDC_HEADERS && !USG. + +Thu Sep 10 15:17:32 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu) + + * Makefile.in (uninstall): New target. + + * diff.c (excluded_filename): Use fnmatch, not wildmat. + (usage): Document -x, -X, --exclude, --exclude-from. + Makefile.in: Use fnmatch.c, not wildmat.c. + +Sun Sep 6 23:46:25 1992 Paul Eggert (eggert@twinsun.com) + + * configure.in: Add HAVE_MEMCHR. + * diff.h, util.c: Use it instead of MEMCHR_MISSING. + +Sun Sep 6 07:25:49 1992 Paul Eggert (eggert@twinsun.com) + + * diff.h: (struct line_def): Replace this 3-word struct with char *. + This uses less memory, particularly for large files with short lines. + (struct file_data): New member linbuf_base counts number of lines + in common prefix that are not recorded in linbuf; + this uses less memory if files are identical or differ only at end. + New member buffered_lines counts possibly differing lines. + New member valid_lines counts valid data. + New member alloc_lines - linbuf_base replaces old linbufsize. + linbuf[0] now always points at first differing line. + Remove unused members ltran, suffix_lines. + Add const where appropriate. + (Is_space): New macro, for consistent definition of `white space'. + (excluded_filename, memchr, sip, slurp): New declarations. + * ed.c (print_ed_hunk): Adjust to diff.h's struct changes. + * context.c (pr_context_hunk): Likewise. + * ifdef.c (print_ifdef_script): Likewise. + * side.c (print_sdiff_script, print_half_line): Likewise. + * util.c (analyze_hunk, line_cmp, print_1_line): Likewise. + + * analyze.c (shift_boundaries): Remove unneeded variable `end' and + unnecessary comparisons of `preceding' and `other_preceding' against 0. + (diff_2_files): When comparing files byte-by-byte for equality, + don't slurp them all in at once; just compare them a buffer at a time. + This can win big if they differ early on. + Move some code to compare_files to enable this change. + Use only one buffer for stdin with `diff - -'. + (discard_confusing_lines, diff_2_files): Coalesce malloc/free calls. + (build_script): Remove obsolete OUTPUT_RCS code. + + * diff.c (add_exclude, add_exclude_file, excluded_filename): New fns. + (main): Use them for the new --exclude and --exclude-from options. + (compare_files): Don't open a file unless it must be read. + Treat `diff file file' and `diff file dir' similarly. + Move some code here from diff_2_files to enable this. + Simplify file vs dir warning. + + * dir.c (dir_sort): Support new --exclude* options. + + * io.c (struct equivclass): Put hash code and line length here instead + of struct line_def, so that they can be shared. + (find_and_hash_each_line): Compute equivalence class as we go, + instead of doing it in a separate pass; this thrashes memory less. + Make buckets realloc-able, since we can't preallocate them. + Record one more line start than there are lines, so that we can compute + any line's length by subtracting its start from the next line's, + instead of storing the length explicitly. This saves memory. + Move prefix-handling code to find_identical_ends; + this wins with large prefixes. + Use Is_space, not is_space, for consistent treatment of white space. + (prepare_text_end): New function. + (find_identical_ends): Move slurping here, so it's only done when + needed. Work even if the buffers are the same (because of `diff - -'). + Compare prefixes a word at a time for speed. + (find_equiv_class): Delete; now done by find_and_hash_each_line. + (read_files): Don't slurp unless needed. + find_equiv_class's work is now folded into find_and_hash_each_line. + Don't copy stdin buffer if `diff - -'. + Check for running out of primes. + (sip, slurp): Split first part of `slurp' into another function `sip'. + `sip' sets things up and perhaps reads the first ST_BLKSIZE buffer to + see whether the file is binary; `slurp' now just finishes the job. + This lets diff_2_files compare binary files lazily. + Allocate a one-word sentinel to allow word-at-a-time prefix comparison. + Count prefix lines only if needed, only count the first file's prefix. + Don't bother to count suffix lines; it's never needed. + Set up linbuf[0] to point at first differing line. + (binary_file_p): Change test for binary files: + if it has a null byte in its first buffer, it's binary. + (primes): Add more primes. + + * util.c (line_cmp): Use bcmp for speed. + Use Is_space, not is_space, for consistent treatment of white space. + (translate_line_number): Internal line numbers now count from 0 + starting after the prefix. + (memchr): New function (if memchr is missing). + + * Makefile.in: Document HAVE_ST_BLKSIZE. Link with wildmat.o. + * system.h (STAT_BLOCKSIZE): New macro based on HAVE_ST_BLKSIZE. + * configure.in: Add AC_ST_BLKSIZE. + * wildmat.c: New file. + +Fri Sep 4 01:28:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * sdiff.c (xmalloc): Renamed from ck_malloc. Callers changed. + +Thu Sep 3 15:28:59 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu) + + * diff.h: Don't declare free, index, rindex. + +Tue Aug 11 22:18:06 1992 John Gilmore (gnu at cygnus.com) + + * io.c (binary_file_p): Use heuristic to avoid declaring info + files as binary files. Allow about 1.5% non-printing + characters (in info's case, ^_). + +Tue Jul 7 01:09:26 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu) + + * diff.h: Replace function_regexp and ignore_regexp with lists + of compiled regexps. + * analyze.c, context.c, util.c: Test whether the lists, not + the old variables, are empty. + * util.c (analyze_hunk), context.c (find_function): Compare + lines with the lists of regexps. + * diff.c (add_regexp): New function. + (main): Use it. + + * diff3: Add -v --version option. + * Makefile.in: Link with version.o. + + * system.h: New file. + * diff.h, cmp.c, diff3.c, sdiff.c: Use it. + + * diff.h, diff3.c: Include string.h or strings.h, as appropriate. + Declare malloc and realloc. + + * diff3.c (perror_with_exit): Include program name in message. + + * diff3.c: Lowercase error messages for GNU standards. + + * sdiff.c [USG || STDC_HEADERS]: Define bcopy in terms of memcpy. + + * sdiff.c: Use the version number from version.c. + * Makefile.in: Link with version.o. + + * cmp.c error.c xmalloc.c: New files from textutils. + * Makefile.in: Add rules for them. + + * diff.c (longopts): --unidirectional-new-file is like -P, not -N. + Rename --file-label to --label (leave old name, but undocumented). + + * sdiff.c, diff.c (usage): Condense messages and fix some errors. + + * diff3.c (main, usage): Add long-named options. + +Fri Jul 3 14:31:18 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu) + + * diff.h, diff3.c, sdiff.c: Change FOO_MISSING macros to HAVE_FOO. + +Thu Jun 25 16:59:47 1992 David J. MacKenzie (djm@apple-gunkies.gnu.ai.mit.edu) + + * diff.c: --reversed-ed -> --forward-ed. + +Wed Feb 26 12:17:32 1992 Paul Eggert (eggert@yata.uucp) + + * analyze.c, diff.c, diff.h, io.c: For -y, compare even if same file. + +Fri Feb 14 22:46:38 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * io.c, diff3.c, analyze.c: Add extra parentheses. + +Sun Feb 9 00:22:42 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * diff.h (unidirectional_new_file_flag): New variable. + * diff.c (main): Set that for -P. + (compare_files): Support -P, somewhat like -N. + (longopts): Support long name for -P. + +Sat Jan 4 20:10:34 1992 Paul Eggert (eggert at yata.uucp) + + * Makefile.in: Distribute diff.info-* too. + + * README, sdiff.c: version number now matches version.c. + + * configure: Fix and document vfork test. + + * ifdef.c: Don't dump core if `diff -Dx f f'. + +Mon Dec 23 23:36:08 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu) + + * diff.h, diff3.c, sdiff.c: Change POSIX ifdefs to + HAVE_UNISTD_H and _POSIX_VERSION. + +Wed Dec 18 17:00:31 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu) + + * Makefile.in (srcs): Add sdiff.c. + (tapefiles): Add diff.texi and diff.info. + + * diff.h, diff3.c, sdiff.c: Use HAVE_VFORK_H instead of + VFORK_HEADER and VFORK_WORKS. + +Tue Dec 17 00:02:59 1991 Paul Eggert (eggert at yata.uucp) + + * Makefile.in (all): Add diff.info, sdiff. + + * configure, diff.c, sdiff.c: + Prefix long options with `--', not `+'. + * diff.c: Regularize option names. + + * configure: Fix check for vfork. + * configure, diff.c, diff.h, diff3.c, sdiff.c: + Use Posix definitions when possible. + + * context.c: Align context with tab if -T is given. Tune. + * diff.c, diff.h, side.c: Calculate column widths so that tabs line up. + * io.c: Add distinction between white space and printing chars. + * side.c: Don't expand tabs unless -t is given. + * side.c, util.c: Tab expansion now knows about '\b', '\f', '\r', '\v'. + * util.c: -w skips all white space. Remove lint. Tune. + + * sdiff.c: Support many more diff options, e.g. `-', `sdiff file dir'. + Ignore interrupts while the subsidiary editor is in control. + Clean up temporary file and kill subsidiary diff if interrupted. + Ensure subsidiary diff doesn't ignore SIGPIPE. + Don't get confused while waiting for two subprocesses. + Don't let buffers overflow. Check for I/O errors. + Convert to GNU style. Tune. + + * sdiff.c, util.c: Don't lose errno. + Don't confuse sdiff with messages like `Binary files differ'. + * sdiff.c, side.c: Don't assume that common lines are identical. + Simplify --sdiff-merge-assist format. + +Mon Sep 16 16:42:01 1991 Tom Lord (lord at churchy.gnu.ai.mit.edu) + + * Makefile.in, sdiff.c: introduced sdiff front end to diff. + + * Makefile.in, analyze.c, diff.c, diff.h, io.c, side.c: Added + sdiff-style output format to diff. + +Mon Aug 26 16:44:55 1991 David J. MacKenzie (djm at pogo.gnu.ai.mit.edu) + + * Makefile.in, configure: Only put $< in Makefile if using VPATH, + because older makes don't understand it. + +Fri Aug 2 12:22:30 1991 David J. MacKenzie (djm at apple-gunkies) + + * configure: Create config.status. Remove it and Makefile if + interrupted while creating them. + +Thu Aug 1 22:24:31 1991 David J. MacKenzie (djm at apple-gunkies) + + * configure: Check for +srcdir etc. arg and look for + Makefile.in in that directory. Set VPATH if srcdir is not `.'. + * Makefile.in: Get rid of $(archpfx). + +Tue Jul 30 21:28:44 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) + + * Makefile.in (prefix): Renamed from DESTDIR. + +Wed Jul 24 23:08:56 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu) + + * diff.h, diff3.c: Rearrange ifdefs to use POSIX, + STDC_HEADERS, VFORK_MISSING, DIRENT. This way it works on + more systems that aren't pure USG or BSD. + Don't not define const if __GNUC__ is defined -- that would + break with -traditional. + * configure: Check for those features. + +Wed Jul 10 01:39:23 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu) + + * configure, Makefile.in: $(INSTALLPROG) -> $(INSTALL). + +Sat Jul 6 16:39:04 1991 David J. MacKenzie (djm at geech.gnu.ai.mit.edu) + + * Replace Makefile with configure and Makefile.in. + Update README with current compilation instructions. + +Sat Jul 6 14:03:29 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) + + * util.c (setup_output): Just save the args for later use. + (begin_output): Do the real work, with the values that were saved. + It's safe to call begin_output more than once. + Print the special headers for context format here. + * analyze.c (diff_2_files): Don't print special headers here. + * context.c (pr_context_hunk, pr_unidiff_hunk): Call begin_output. + * ed.c (print_ed_hunk, print_forward_ed_hunk, print_rcs_hunk): + * normal.c (print_normal_hunk): Likewise. + * ifdef.c (print_ifdef_hunk): Likewise. + * util.c (finish_output): Don't die if begin_output was not called. + +Thu Jun 20 23:10:01 1991 David J. MacKenzie (djm at geech.gnu.ai.mit.edu) + + * Makefile: Add TAGS, distclean, and realclean targets. + Set SHELL. + +Tue Apr 30 13:54:36 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) + + * diff.h (TRUE, FALSE): Undefine these before defining. + +Thu Mar 14 18:27:27 1991 Richard Stallman (rms@mole.ai.mit.edu) + + * Makefile (objs): Include $(ALLOCA). + +Sat Mar 9 22:34:03 1991 Richard Stallman (rms at mole.ai.mit.edu) + + * diff.h: Include regex.h. + +Thu Feb 28 18:59:53 1991 Richard Stallman (rms at mole.ai.mit.edu) + + * Makefile (diff3): Link with GNU getopt. + +Sat Feb 23 12:49:43 1991 Richard Stallman (rms at mole.ai.mit.edu) + + * io.c (find_equiv_class): Make hash code unsigned before mod. + + * diff.h (files): Add EXTERN. + +Sun Jan 13 21:33:01 1991 Richard Stallman (rms at mole.ai.mit.edu) + + * diff.c: +print option renamed +paginate. Remove +all-text. + +Mon Jan 7 06:18:01 1991 David J. MacKenzie (djm at geech.ai.mit.edu) + + * Makefile (dist): New target, replacing diff.tar and + diff.tar.Z, to encode version number in distribution directory + and tar file names. + +Sun Jan 6 18:42:23 1991 Michael I Bushnell (mib at geech.ai.mit.edu) + + * Version 1.15 released. + + * version.c: Updated from 1.15 alpha to 1.15 + + * context.c (print_context_number_range, + print_unidiff_number_range): Don't print N,M when N=M, print + just N instead. + + * README: Updated for version 1.15. + Makefile: Updated for version 1.15. + + * diff3.c (main): Don't get confused if one of the arguments + is a directory. + + * diff.c (compare_files): Don't get confused if comparing + standard input to a directory; print error instead. + + * analyze.c (diff_2_files), context.c (print_context_header, + print_context_script), diff.c (main), diff.h (enum + output_style): Tread unidiff as an output style in its own + right. This also generates an error when both -u and -c are + given. + + * diff.c (main): Better error messages when regexps are bad. + + * diff.c (compare_files): Don't assume stdin is opened. + + * diff3.c (read_diff): Don't assume things about the order of + descriptor assignment and closes. + + * util.c (setup_output): Don't assume things about the order + of descriptor assignment and closes. + + * diff.c (compare_files): Set a flag so that closes don't + happen more than once. + + * diff.c (main): Don't just flush stdout, do a close. That + way on broken systems we can still get errors. + +Mon Dec 24 16:24:17 1990 Richard Stallman (rms at mole.ai.mit.edu) + + * diff.c (usage): Use = for args of long options. + +Mon Dec 17 18:19:20 1990 Michael I Bushnell (mib at geech.ai.mit.edu) + + * context.c (print_context_label): Labels were interchanged badly. + + * context.c (pr_unidiff_hunk): Changes to deal with files + ending in incomplete lines. + * util.c (print_1_line): Other half of the changes. + +Mon Dec 3 14:23:55 1990 Richard Stallman (rms at mole.ai.mit.edu) + + * diff.c (longopts, usage): unidiff => unified. + +Wed Nov 7 17:13:08 1990 Richard Stallman (rms at mole.ai.mit.edu) + + * analyze.c (diff_2_files): No warnings about newlines for -D. + + * diff.c (pr_unidiff_hunk): Remove ref to output_patch_flag. + +Tue Oct 23 23:19:18 1990 Richard Stallman (rms at mole.ai.mit.edu) + + * diff.c (compare_files): For -D, compare even args are same file. + * analyze.c (diff_2_files): Likewise. + Also, output even if files have no differences. + + * analyze.c (diff_2_files): Print missing newline messages last. + Return 2 if a newline is missing. + Print them even if files end with identical text. + +Mon Oct 22 19:40:09 1990 Richard Stallman (rms at mole.ai.mit.edu) + + * diff.c (usage): Return 2. + +Wed Oct 10 20:54:04 1990 Richard Stallman (rms at mole.ai.mit.edu) + + * diff.c (longopts): Add +new-files. + +Sun Sep 23 22:49:29 1990 Richard Stallman (rms at mole.ai.mit.edu) + + * context.c (print_context_script): Handle unidiff_flag. + (print_context_header): Likewise. + (print_unidiff_number_range, pr_unidiff_hunk): New functions. + * diff.c (longopts): Add element for +unidiff. + (main): Handle +unidiff and -u. + (usage): Mention them. + +Wed Sep 5 16:33:22 1990 Richard Stallman (rms at mole.ai.mit.edu) + + * io.c (find_and_hash_each_line): Deal with missing final newline + after buffering necessary context lines. + +Sat Sep 1 16:32:32 1990 Richard Stallman (rms at mole.ai.mit.edu) + + * io.c (find_identical_ends): ROBUST_OUTPUT_FORMAT test was backward. + +Thu Aug 23 17:17:20 1990 Richard Stallman (rms at mole.ai.mit.edu) + + * diff3.c (WIFEXITED): Undef it if WEXITSTATUS is not defined. + * context.c (find_function): Don't try to return values. + +Wed Aug 22 11:54:39 1990 Richard Stallman (rms at mole.ai.mit.edu) + + * diff.h (O_RDONLY): Define if not defined. + +Tue Aug 21 13:49:26 1990 Richard Stallman (rms at mole.ai.mit.edu) + + * Handle -L option. + * context.c (print_context_label): New function. + (print_context_header): Use that. + * diff.c (main): Recognize the option. + (usage): Updated. + * diff.h (file_label): New variable. + * diff3.c (main): Recognize -L instead of -t. + + * diff3.c (main): Support -m without other option. + + * diff3.c (WEXITSTATUS, WIFEXITED): Define whenever not defined. + + * diff3.c (bcopy, index, rindex): Delete definitions; not used. + (D_LINENUM, D_LINELEN): Likewise. + (struct diff_block): lengths includes newlines. + (struct diff3_block): Likewise. + (always_text, merge): New variables. + (read_diff): Return address of end, not size read. Calls changed. + Pass -a to diff if given to diff3. + current_chunk_size now an int. Detect error in `pipe'. + Check for incomplete line of output here. + (scan_diff_line): Don't make scan_ptr + 2 before knowing it is valid. + No need to check validity of diff output here. + Include newline in length of line. + (main): Compute rev_mapping here. Handle -a and -m. + Error message if excess -t operands. Error for incompatible options. + Error if `-' given more than once. + Fix error storing in tag_strings. + (output_diff3): REV_MAPPING is now an arg. Call changed. + Change syntax of "missing newline" message. + Expect length of line to include newline. + (output_diff3_edscript): Return just 0 or 1. + REV_MAPPING is now an arg. Call changed. + (output_diff3_merge): New function. + (process_diff): Better error message for bad diff format. + (fatal, perror_with_exit): Return status 2. + + * analyze.c (diff_2_files): Report missing newline in either + or both files, if not robust output style. + + * util.c (setup_output): Detect error from pipe. + No need to close stdin. + + * util.c (print_1_line): Change format of missing-newline msg. + Change if statements to switch. + + * io.c (slurp): Don't mention differences in final newline if -B. + + * io.c (binary_file_p): Use ISO char set as criterion, not ASCII. + + * io.c (find_identical_ends): Increase value of BEG0 by 1. + Other changes in backwards scan to avoid decrementing pointers + before start of array, and set LINES properly. + + * diff.h (ROBUST_OUTPUT_STYLE): New macro. + * io.c (find_identical_ends, find_and_hash_each_line): Use that macro. + + * diff.h (dup2): Don't define if XENIX. + + * diff.c (main): Check for write error at end. + + * context.c (find_function): Don't return a value. + Use argument FILE rather than global files. + + * analyze.c: Add external function declarations. + * analyze.c (build_script): Turn off explicit check for final newline. + + * analyze.c (discard_confusing_lines): Make integers unsigned. + +Tue Jul 31 21:37:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * io.c (find_and_hash_each_line): Correct the criterion + for leaving out the newline from the end of the line. + +Tue May 29 21:28:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * dir.c (diff_dirs): Free things only if nonzero. + +Mon Apr 16 18:31:05 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff.h (NDIR_IN_SYS): New macro controls location of ndir.h. + + * diff3.c (xmalloc, xrealloc): Don't die if size == 0 returns 0. + +Sun Mar 25 15:58:42 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * analyze.c (discard_confusing_lines): + `many' wasn't being used; use it. + Canceling provisionals near start of run must handle already + canceled provisionals. + Canceling subruns of provisionals was canceling last nonprovisional. + +Sat Mar 24 14:02:51 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * analyze.c (discard_confusing_lines): + Threshold for line occurring many times scales by square root + of total lines. + Within each run, cancel any long subrun of provisionals. + Don't update `provisional' while canceling provisionals. + In big outer loop, handle provisional and nonprovisional separately. + +Thu Mar 22 16:35:33 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * analyze.c (discard_confusing_lines): + The first loops to discard provisionals from ends failed to step. + In second such loops, keep discarding all consecutive provisionals. + Increase threshold for stopping discarding, and also check for + consecutive nondiscardables as separate threshold. + +Fri Mar 16 00:33:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff3.c (read_diff): Pass -- as first arg to diff. + + * diff3.c: Include wait.h or define equivalent macros. + (read_diff): Don't use stdio printing error in the inferior. + Remember the pid and wait for it. Report failing status. + Report failure of vfork. + +Sun Mar 11 17:10:32 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff3.c (main): Accept -t options and pass to output_diff3_edscript. + (usage): Mention -t. + (read_diff): Use vfork. + (vfork): Don't use it on Sparc. + + * diff.h (vfork): Don't use it on Sparc. + +Tue Mar 6 22:37:20 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff3.c (dup2): Don't define on Xenix. + + * Makefile: Comments for Xenix. + +Thu Mar 1 17:19:23 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * analyze.c (diff_2_files): `message' requires three args. + +Fri Feb 23 10:56:50 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * diff.h, util.c, diff3.c: Change 'void *' to 'VOID *', with + VOID defined as void if __STDC__, char if not. + +Sun Feb 18 20:31:58 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * Makefile: Add rules for getopt.c, getopt1.c, getopt.h. + + * getopt.c, getopt.h, getopt1.c: New files. + + * main.c (main, usage): Add long options. + + * analyze.c (shift_boundaries): Remove unused var 'j_end'. + +Thu Feb 8 02:43:16 1990 Jim Kingdon (kingdon at pogo.ai.mit.edu) + + * GNUmakefile: include ../Makerules before Makefile. + +Fri Feb 2 23:21:38 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * analyze.c (diff_2_files): If -B or -I, don't return 1 + if all changes were ignored. + +Wed Jan 24 20:43:57 1990 Richard Stallman (rms at albert.ai.mit.edu) + + * diff3.c (fatal): Output to stderr. + +Thu Jan 11 00:25:56 1990 David J. MacKenzie (djm at hobbes.ai.mit.edu) + + * diff.c (usage): Mention -v. + +Wed Jan 10 16:06:38 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff3.c (output_diff3_edscript): Return number of overlaps. + (main): If have overlaps, exit with status 1. + +Sun Dec 24 10:29:20 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * io.c (find_equiv_class): Fix typo that came from changing init of B + to an assignment. + + * version.c: New file. + * diff.c (main): -v prints version number. + + * io.c (binary_file_p): Null char implies binary file. + +Fri Nov 17 23:44:55 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * util.c (print_1_line): Fix off by 1 error. + +Thu Nov 16 13:51:10 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * util.c (xcalloc): Function deleted. + + * io.c (slurp): Null-terminate the buffer. + + * io.c (read_files): Delete unused vars. + + * io.c (find_equiv_class): Don't index by N if too low. + + * dir.c (dir_sort): Delete the extra declaration of compare_names. + + * diff.h: Don't declare xcalloc. Declare some other functions. + + * analyze.c (shift_boundaries): + Test for END at end of range before indexing by it. + Fix misspelling of `preceding' in var names. + +Sat Nov 11 14:04:16 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff3.c (using_to_diff3_block): Delete unused vars. + (make_3way_diff, process_diff_control, read_diff, output_diff3): Likewise. + +Mon Nov 6 18:15:50 EST 1989 Jay Fenlason (hack@ai.mit.edu) + + * README Fix typo. + +Fri Nov 3 15:27:47 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff.c (usage): Mention -D. + + * ifdef.c (print_ifdef_hunk): Write comments on #else and #endif. + +Sun Oct 29 16:41:07 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff.c (compare_files): Don't fflush for identical files. + +Wed Oct 25 17:57:12 1989 Randy Smith (randy at apple-gunkies.ai.mit.edu) + + * diff3.c (using_to_diff3_block): When defaulting lines from + FILE0, only copy up to just under the *lowest* line mentioned + in the next diff. + + * diff3.c (fatal): Add \n to error messages. + +Wed Oct 25 15:05:49 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * Makefile (tapefiles): Add ChangeLog. + +Tue Oct 3 00:51:17 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff3.c (process_diff, create_diff3_block): Init ->next field. + +Fri Sep 29 08:16:45 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * util.c (line_cmp): Alter end char of line 2, not line 1. + +Wed Sep 20 00:12:37 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * Makefile (diff.tar): Expect ln to fail on some files; + copy them with cp. + +Mon Sep 18 02:54:29 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * Handle -D option: + * io.c (find_and_hash_each_line): Keep all lines of 1st file. + * diff.c (main): Handle -D option. + (compare_files): Reject -D if files spec'd are directories. + * analyze.c (diff_2_files): Handle OUTPUT_IFDEF case. + +Fri Sep 1 20:15:50 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff.c (option_list): Rename arg VECTOR as OPTIONVEC. + +Mon Aug 28 17:58:27 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff.c (compare_files): Clear entire inf[i].stat. + +Wed Aug 23 17:48:47 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu) + + * io.c (find_identical_ends): Sign was backward + determining where to bound the scan for the suffix. + +Wed Aug 16 12:49:16 1989 Richard Stallman (rms at hobbes.ai.mit.edu) + + * analyze.c (diff_2_files): If -q, treat all files as binary. + * diff.c (main): Detect -q, record in no_details_flag. + +Sun Jul 30 23:12:00 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff.c (usage): New function. + (main): Call it. + +Wed Jul 26 02:02:19 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff.c (main): Make -C imply -c. + +Thu Jul 20 17:57:51 1989 Chris Hanson (cph at kleph) + + * io.c (find_and_hash_each_line): Bug fix in context handling, + introduced by last change. + +Fri Jul 14 17:39:20 1989 Chris Hanson (cph at kleph) + + * analyze.c: To make RCS work correctly on files that don't + necessarily end in newline, introduce some changes that cause + diffs to be sensitive to missing final newline. Because + non-RCS modes don't want to be affected by these changes, they + are conditional on `output_style == OUTPUT_RCS'. + (diff_2_files) [OUTPUT_RCS]: Suppress the "File X missing + newline" message. + (build_script) [OUTPUT_RCS]: Cause the last line to compare as + different if exactly one of the files is missing its final + newline. + + * io.c (find_and_hash_each_line): Bug fix in + ignore_space_change mode. Change line's length to include the + newline. For OUTPUT_RCS, decrement last line's length if + there is no final newline. + (find_identical_ends) [OUTPUT_RCS]: If one of the files is + missing a final newline, make sure it's not included in either + the prefix or suffix. + + * util.c (print_1_line): Change line output routine to account + for line length including the newline. + +Tue Jun 27 02:35:28 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * Makefile: Inserted $(archpfx) where appropriate. + +Wed May 17 20:18:43 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff3.c [USG]: Include fcntl.h. + + * diff.h [USG]: New compilation flags HAVE_NDIR, HAVE_DIRECT. + +Wed Apr 26 15:35:57 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * dir.c (diff_dirs): Two new args, NONEX1 and NONEX2, say to pretend + nonex dirs are empty. + (dir_sort): New arg NONEX, likewise. + * diff.c (compare_files): Pass those args. + Sometimes call diff_dirs if subdir exists in just one place. + +Wed Apr 12 01:10:27 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * io.c (find_identical_ends): Set END0 *after* last char + during backward scan for suffix. + +Sat Apr 8 15:49:49 1989 Randall Smith (randy at apple-gunkies.ai.mit.edu) + + * diff3.c (using_to_diff3_block): Now find high marks in files 1 + and 2 through mapping off of the last difference instead of the + first. + + * diff3.c: Many trivial changes to spelling inside comments. + +Fri Feb 24 12:38:03 1989 Randall Smith (randy at gluteus.ai.mit.edu) + + * util.c, normal.c, io.c, ed.c, dir.c, diff.h, diff.c, context.c, + analyze.c, Makefile: Changed copyright header to conform with new + GNU General Public license. + * diff3.c: Changed copyright header to conform with new GNU + General Public license. + * COPYING: Made a hard link to /gp/rms/COPYING. + +Fri Feb 24 10:01:58 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * io.c (slurp): Leave 2 chars space at end of buffer, not one. + (find_identical_ends): Special case if either file is empty; + don't try to make a sentinel since could crash. + +Wed Feb 15 14:24:48 1989 Jay Fenlason (hack at apple-gunkies.ai.mit.edu) + + * diff3.c (message) Re-wrote routine to avoid using alloca() + +Wed Feb 15 06:19:14 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * io.c (find_identical_ends): Delete the variable `bytes'. + +Sun Feb 12 11:50:36 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * io.c (slurp): ->bufsize is nominal amount we have room for; + add room for sentinel when calling xmalloc or xrealloc. + + * io.c (find_identical_ends): Do need overrun check in finding suffix. + +Fri Feb 10 01:28:15 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff.c (main): -C now takes arg to specify context length. + Now -p to show C function name--Damned IEEE! + Fatal error if context length spec'd twice. + + * ed.c (print_ed_hunk): Now special treatment only for lines containing + precisely a dot and nothing else. Output `..', end the insert, + substitute that one line, then resume the insert if nec. + + * io.c (find_and_hash_lines): When backing up over starting context, + don't move past buffer-beg. + + * io.c (find_identical_ends): Use sentinels to make the loops faster. + If files are identical, skip the 2nd loop and return quickly. + (slurp): Leave 1 char extra space after each buffer. + + * analyze.c (diff_2_files): Mention difference in final newlines. + +Wed Jan 25 22:44:44 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * dir.c (diff_dirs): Use * when calling fcn ptr variable. + +Sat Dec 17 14:12:06 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * Makefile: New vars INSTALL and LIBS used in some rules; + provide default defns plus commented-put defns for sysV. + +Thu Nov 17 16:42:53 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * dir.c (dir_sort): Open-trouble not fatal; just say # files is -1. + (diff_dirs): If dir_sort does that, give up and return 2. + + * diff.c (compare_files): Don't open directories. + Don't close them specially either. + Cross-propagate inf[i].dir_p sooner. + +Sun Nov 13 11:19:36 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu) + + * diff.h: Declare index, rindex. + + * diff.c (compare_files): If comparing foodir with b/f, + use foodir/f, not foodir/b/f. + + * diff.c (compare_files): Don't print "are identical" msg for 2 dirs. + Status now 1 if one file is a dir and the other isn't, etc. + +Thu Nov 3 16:30:24 1988 Randall Smith (randy at gluteus.ai.mit.edu) + + * Makefile: Added a define for diff3 to define DIFF_PROGRAM. + + * util.c: Added hack to make sure that perror was not called with + a null pointer. + + * diff.c: Changed S_IFDIR to S_IFMT in masking type of file bits + out. + + * diff3.c: Included USG compatibility defines. + + * diff.h: Moved sys/file.h into #else USG section (not needed or + wanted on System V). + + * ed.c, analyze.c, context.c: Shortened names to 12 characters for + the sake of System V (too simple not to do). + + + ----- + + Copyright (C) 1988-1994, 1997-2002, 2004, 2006, 2009-2010 Free Software + Foundation, Inc. + + Copying and distribution of this file, with or without + modification, are permitted provided the copyright notice and this + notice are preserved. diff --git a/GNUmakefile b/GNUmakefile new file mode 100644 index 0000000..daba47a --- /dev/null +++ b/GNUmakefile @@ -0,0 +1,129 @@ +# 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-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Systems where /bin/sh is not the default shell need this. The $(shell) +# command below won't work with e.g. stock DOS/Windows shells. +ifeq ($(wildcard /bin/s[h]),/bin/sh) +SHELL = /bin/sh +else +# will be used only with the next shell-test line, then overwritten +# by a configured-in value +SHELL = sh +endif + +# If the user runs GNU make but has not yet run ./configure, +# give them a diagnostic. +_have-Makefile := $(shell test -f Makefile && echo yes) +ifeq ($(_have-Makefile),yes) + +# 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 +include $(srcdir)/maint.mk + +# Allow cfg.mk to override these. +_build-aux ?= build-aux +_autoreconf ?= autoreconf -v + +# 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 major,$(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) + 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 +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/INSTALL b/INSTALL new file mode 100644 index 0000000..81fd332 --- /dev/null +++ b/INSTALL @@ -0,0 +1,365 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008, 2009, 2010 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 commands `./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. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' 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 bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /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/Makefile.am b/Makefile.am new file mode 100644 index 0000000..9d86cb1 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,43 @@ +# Main Automakefile for GNU diffutils. + +# Copyright (C) 2001-2002, 2004, 2006, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +ALL_RECURSIVE_TARGETS = + +EXTRA_DIST = bootstrap exgettext ChangeLog-2008 cfg.mk dist-check.mk +SUBDIRS = lib src tests doc man po ms gnulib-tests + +ACLOCAL_AMFLAGS = -I m4 +AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) + +# Arrange so that .tarball-version appears only in the distribution +# tarball, and never in a checked-out repository. +dist-hook: gen-ChangeLog + $(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version + +gen_start_date = '2009-11-11 15:00' +.PHONY: gen-ChangeLog +gen-ChangeLog: + $(AM_V_GEN)if test -d .git; then \ + $(top_srcdir)/build-aux/gitlog-to-changelog \ + --since=$(gen_start_date) > $(distdir)/cl-t; \ + rm -f $(distdir)/ChangeLog; \ + mv $(distdir)/cl-t $(distdir)/ChangeLog; \ + fi + +ALL_RECURSIVE_TARGETS += distcheck-hook +distcheck-hook: + $(MAKE) my-distcheck diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..50c7812 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,1399 @@ +# Makefile.in generated by automake 1.11a from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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@ + +# Main Automakefile for GNU diffutils. + +# Copyright (C) 2001-2002, 2004, 2006, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +VPATH = @srcdir@ +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 = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/configure ABOUT-NLS \ + AUTHORS COPYING ChangeLog INSTALL NEWS THANKS TODO \ + build-aux/compile build-aux/config.guess \ + build-aux/config.rpath build-aux/config.sub build-aux/depcomp \ + build-aux/install-sh build-aux/mdate-sh build-aux/missing \ + build-aux/mkinstalldirs build-aux/texinfo.tex +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/c-stack.m4 \ + $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.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/exclude.m4 \ + $(top_srcdir)/m4/extensions.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/file-type.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/freopen.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21_gl.m4 $(top_srcdir)/m4/gnu-make.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \ + $(top_srcdir)/m4/iconv_open.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lib-ld_gl.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix_gl.m4 \ + $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-tr.m4 \ + $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/longlong_gl.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/manywarnings.m4 \ + $(top_srcdir)/m4/mbchar.m4 $(top_srcdir)/m4/mbiter.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbslen.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/memchr.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/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/onceonly.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po_gl.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/putenv.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.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/stdio-safer.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/strftime.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strptime.m4 \ + $(top_srcdir)/m4/strtoimax.m4 $(top_srcdir)/m4/strtol.m4 \ + $(top_srcdir)/m4/strtoll.m4 $(top_srcdir)/m4/strtoul.m4 \ + $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/strtoumax.m4 \ + $(top_srcdir)/m4/symlink.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/time_h.m4 \ + $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/vararrays.m4 \ + $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.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/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \ + $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xstrtol.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + cscope distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +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 $(distdir).tar.xz +GZIP_ENV = --best +DIST_TARGETS = dist-xz dist-gzip +distuninstallcheck_listfiles = find . -type f -print +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@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +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@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +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@ +FNMATCH_H = @FNMATCH_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +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_FFLUSH = @GNULIB_FFLUSH@ +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_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +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_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_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +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_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_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STAT = @GNULIB_STAT@ +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_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_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ +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_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WARN_CFLAGS = @GNULIB_WARN_CFLAGS@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +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_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +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_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_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +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_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +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_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LIBSIGSEGV = @HAVE_LIBSIGSEGV@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOCALTIME_R = @HAVE_LOCALTIME_R@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +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_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +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_SLEEP = @HAVE_SLEEP@ +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_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_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_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_TIMEGM = @HAVE_TIMEGM@ +HAVE_TTYNAME_R = @HAVE_TTYNAME_R@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +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_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HELP2MAN = @HELP2MAN@ +ICONV_H = @ICONV_H@ +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@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBDIFFUTILS_LIBDEPS = @LIBDIFFUTILS_LIBDEPS@ +LIBDIFFUTILS_LTLIBDEPS = @LIBDIFFUTILS_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSIGSEGV = @LIBSIGSEGV@ +LIBSIGSEGV_PREFIX = @LIBSIGSEGV_PREFIX@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +MAKEINFO = @MAKEINFO@ +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_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_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_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_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_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_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_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_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_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_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@ +OBJEXT = @OBJEXT@ +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@ +POSUB = @POSUB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PR_PROGRAM = @PR_PROGRAM@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +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_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +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_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_NANOSLEEP = @REPLACE_NANOSLEEP@ +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_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +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_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +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_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +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_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_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_aux_dir = @abs_aux_dir@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +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@ +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@ +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@ +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@ +ALL_RECURSIVE_TARGETS = distcheck-hook +EXTRA_DIST = bootstrap exgettext ChangeLog-2008 cfg.mk dist-check.mk +SUBDIRS = lib src tests doc man po ms gnulib-tests +ACLOCAL_AMFLAGS = -I m4 +AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) +gen_start_date = '2009-11-11 15:00' +all: all-recursive + +.SUFFIXES: +am--refresh: + @: +$(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 +.PRECIOUS: 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): + +# 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. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; 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" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done +cscopelist-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + 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; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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 +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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-recursive cscopelist + +cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP)'; \ + 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 \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + 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 + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -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 -9 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -9 -c >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__post_remove_distdir) +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + 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.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(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 a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(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-$$$$/" \ + && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(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: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { 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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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 mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am 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 -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 + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ + cscopelist-recursive ctags-recursive install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-cscope \ + clean-generic cscope cscopelist cscopelist-recursive ctags \ + ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \ + dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic 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 pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am + + +# Arrange so that .tarball-version appears only in the distribution +# tarball, and never in a checked-out repository. +dist-hook: gen-ChangeLog + $(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version +.PHONY: gen-ChangeLog +gen-ChangeLog: + $(AM_V_GEN)if test -d .git; then \ + $(top_srcdir)/build-aux/gitlog-to-changelog \ + --since=$(gen_start_date) > $(distdir)/cl-t; \ + rm -f $(distdir)/ChangeLog; \ + mv $(distdir)/cl-t $(distdir)/ChangeLog; \ + fi +distcheck-hook: + $(MAKE) my-distcheck + +# 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/NEWS b/NEWS new file mode 100644 index 0000000..5fe01b7 --- /dev/null +++ b/NEWS @@ -0,0 +1,300 @@ +GNU diffutils NEWS -*- outline -*- + +* Noteworthy changes in release 3.0 (2010-05-03) [stable] + +** Bug fixes + + diff once again prints the required "\ No newline at end of file" line + when at least one input lacks a newline-at-EOF and the final hunk plus + context-length aligns exactly with the end of the newline-lacking file. + [bug introduced between 2.8.7 and 2.9] + +** Changes in behavior + + In context-style diffs, diff prints a portion of a preceding "function" + line for each hunk, with --show-function-line=RE (-F) or + --show-c-function (-p). Now, it trims leading blanks from such lines + before extracting a prefix. This is useful especially when a function + line is so far indented that the name itself would be truncated or not + included in the limited-width substring that diff appends. + + diff once again reports a difference with the diagnostic + "Binary files A and B differ" when at least one of the files + appears to be binary. From 2.8.4 through diffutils-2.9, it printed + "Files A and B differ". + + +* Noteworthy changes in release 2.9 (2010-02-11) [stable] + +** New features + + New diff option --suppress-blank-empty. + + Bring back support for `diff -NUM', where NUM is a number, + even when conforming to POSIX 1003.1-2001. This change reverts to + the behavior of GNU diff 2.7 and earlier. This is a change only + when conforming to POSIX 1003.1-2001; there is no effect when + conforming to older POSIX versions. + + This change is in response to decisions taken in the January 2005 + Austin Group standardization meeting. For more details, please see + "Utility Syntax Guidelines" in the Minutes of the January 2005 + Meeting . + + sdiff now understands '1' and '2' as synonyms for 'l' and 'r'. + +** Changes in behavior + + sdiff and diff3 now invoke diff, not $(bindir)/diff + +** Administrivia + + New discussion and bug-reporting address: bug-diffutils@gnu.org + + updated gnulib support + + +* Noteworthy changes in release 2.8.7 (2004-04-13) [stable] + + Version 2.8.7 contains no user-visible changes. + +User-visible changes in version 2.8.6: + +* New diff3 option --strip-trailing-cr. + +* With -N and -P, inaccessible empty regular files (the kind of files + that 'patch' creates to indicate nonexistent backups) are now + treated as nonexistent when they are in the 'backup' file position. + +* If multiple SKIP values are given to cmp, e.g., `cmp -i 10 -i 20', + cmp now uses the maximal value instead of the last one. + +* diff now omits the ".000000000" on hosts that do not support + fractional time stamps. + +Version 2.8.5 was not publicly released. + +User-visible changes in version 2.8.4: + +* Diff now simply prints "Files A and B differ" instead of "Binary + files A and B differ". The message is output if either A or B + appears to be a binary file, and the old wording was misleading + because it implied that both files are binary, which is not + necessarily the case. + +User-visible changes in version 2.8.3: + +* New locale: en_US. + +User-visible changes in version 2.8.2: + +* New diff and sdiff option: + --tabsize=COLUMNS +* If --ignore-space-change or --ignore-all-space is also specified, + --ignore-blank-lines now considers lines to be empty if they contain + only white space. +* More platforms now handle multibyte characters correctly when + excluding files by name (diff -x and -X). +* New locales: hu, pt_BR. + +User-visible changes in version 2.8.1: + +* Documentation fixes. + +User-visible changes in version 2.8: + +* cmp and diff now conform to POSIX 1003.1-2001 (IEEE Std 1003.1-2001) + if the underlying system conforms to POSIX and if the _POSIX2_VERSION + environment variable is set to 200112. Conformance removes support + for `diff -NUM', where NUM is a number. Use -C NUM or -U NUM instead. +* cmp now supports trailing operands SKIP1 and SKIP2, like BSD cmp. +* cmp -i or --ignore-initial now accepts SKIP1:SKIP2 option value. +* New cmp option: -n or --bytes. +* cmp's old -c or --print-chars option has been renamed; + use -b or --print-bytes instead. +* cmp now outputs "byte" rather than "char" outside the POSIX locale. +* cmp -l's index column width now adjusts to fit larger (or smaller) files. +* cmp -l -s and cmp -s -l are not allowed. Use cmp -s or cmp -l instead. +* diff uses ISO 8601 style time stamps for output times (e.g. "2001-11-23 + 16:44:36.875702460 -0800") unless in the C or POSIX locale and the + -c style is specified. +* diff's -I and -F options use the regexp syntax of grep, not of Emacs. +* diff now accepts multiple context arguments, and uses their maximum value. +* New diff and sdiff options: + -E --ignore-tab-expansion + --strip-trailing-cr +* New diff options: + --from-file=FILE, --to-file=FILE + --ignore-file-name-case + --no-ignore-file-name-case +* New diff3 and sdiff option: + --diff-program=PROGRAM +* The following diff options are still accepted, but are no longer documented. + They may be withdrawn in future releases. + -h (omit; it has no effect) + -H (use --speed-large-files instead) + -L (use --label instead) + -P (use --unidirectional-new-file instead) + --inhibit-hunk-merge (omit; it has no effect) +* Recursive diffs now sort file names according to the LC_COLLATE locale + category if possible, instead of using native byte comparison. +* Recursive diffs now detect and report directory loops. +* Diff printf specs can now use the "0" and "'" flags. +* The new sdiff interactive command `ed' precedes each version with a header. +* On 64-bit hosts, files larger than 2 GB can be compared. +* Some internationalization support has been added, but multibyte locales + are still not completely supported yet. +* Some diagnostics have been reworded slightly for consistency. + Also, `diff -D FOO' now outputs `/* ! FOO */' instead of `/* not FOO */'. +* The `patch' part of the manual now describes `patch' version 2.5.4. +* Man pages are now distributed and installed. +* There is support for DJGPP; see the 'ms' subdirectory and the files + m4/dos.m4 and */setmode.*. + + +User-visible changes in version 2.7: + +* New diff option: --binary (useful only on non-POSIX hosts) +* diff -b and -w now ignore line incompleteness; -B no longer does this. +* cmp -c now uses locale to decide which output characters to quote. +* Help and version messages are reorganized. + + +User-visible changes in version 2.6: + +* New cmp, diff, diff3, sdiff option: --help +* A new heuristic for diff greatly reduces the time needed to compare + large input files that contain many differences. +* Partly as a result, GNU diff's output is not exactly the same as before. + Usually it is a bit smaller, but sometimes it is a bit larger. + + +User-visible changes in version 2.5: + +* New cmp option: -v --version + + +User-visible changes in version 2.4: + +* New cmp option: --ignore-initial=BYTES +* New diff3 option: -T --initial-tab +* New diff option: --line-format=FORMAT +* New diff group format specifications: + [eflmnEFLMN] + A printf spec followed by one of the following letters + causes the integer corresponding to that letter to be + printed according to the printf specification. + E.g. `%5df' prints the number of the first line in the + group in the old file using the "%5d" format. + e: line number just before the group in old file; equals f - 1 + f: first line number in group in the old file + l: last line number in group in the old file + m: line number just after the group in old file; equals l + 1 + n: number of lines in group in the old file; equals l - f + 1 + E, F, L, M, N: likewise, for lines in the new file + %(A=B?T:E) + If A equals B then T else E. A and B are each either a decimal + constant or a single letter interpreted as above. T and E are + arbitrary format strings. This format spec is equivalent to T if + A's value equals B's; otherwise it is equivalent to E. For + example, `%(N=0?no:%dN) line%(N=1?:s)' is equivalent to `no lines' + if N (the number of lines in the group in the new file) is 0, + to `1 line' if N is 1, and to `%dN lines' otherwise. + %c'C' + where C is a single character, stands for the character C. C may not + be a backslash or an apostrophe. E.g. %c':' stands for a colon. + %c'\O' + where O is a string of 1, 2, or 3 octal digits, stands for the + character with octal code O. E.g. %c'\0' stands for a null character. +* New diff line format specifications: + n + The line number, printed with . + E.g. `%5dn' prints the line number with a "%5d" format. + %c'C' + %c'\O' + The character C, or with octal code O, as above. +* Supported s have the same meaning as with printf, but must + match the extended regular expression %-*[0-9]*(\.[0-9]*)?[doxX]. +* The format spec %0 introduced in version 2.1 has been removed, since it + is incompatible with printf specs like %02d. To represent a null char, + use %c'\0' instead. +* cmp and diff now conform to POSIX 1003.2-1992 (ISO/IEC 9945-2:1993) + if the underlying system conforms to POSIX: + - Some messages' wordings are changed in minor ways. + - ``White space'' is now whatever C's `isspace' says it is. + - When comparing directories, if `diff' finds a file that is not a regular + file or a directory, it reports the file's type instead of diffing it. + (As usual, it follows symbolic links first.) + - When signaled, sdiff exits with the signal's status, not with status 2. +* Now portable to hosts where int, long, pointer, etc. are not all the same + size. +* `cmp - -' now works like `diff - -'. + + +User-visible changes in version 2.3: + +* New diff option: --horizon-lines=lines + + +User-visible changes in version 2.1: + +* New diff options: + --{old,new,unchanged}-line-format='format' + --{old,new,unchanged,changed}-group-format='format' + -U +* New diff3 option: + -A --show-all +* diff3 -m now defaults to -A, not -E. +* diff3 now takes up to three -L or --label options, not just two. + If just two options are given, they refer to the first two input files, + not the first and third input files. +* sdiff and diff -y handle incomplete lines. + + +User-visible changes in version 2.0: + +* Add sdiff and cmp programs. +* Add Texinfo documentation. +* Add configure script. +* Improve diff performance. +* New diff options: +-x --exclude +-X --exclude-from +-P --unidirectional-new-file +-W --width +-y --side-by-side +--left-column +--sdiff-merge-assist +--suppress-common-lines +* diff options renamed: +--label renamed from --file-label +--forward-ed renamed from --reversed-ed +--paginate renamed from --print +--entire-new-file renamed from --entire-new-files +--new-file renamed from --new-files +--all-text removed +* New diff3 options: +-v --version +* Add long-named equivalents for other diff3 options. +* diff options -F (--show-function-line) and -I (--ignore-matching-lines) + can now be given more than once. + + + +Copyright (C) 1993-1994, 1998, 2001-2002, 2004, 2006, 2009-2010 Free Software +Foundation, Inc. + +This file is part of GNU Diffutils. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . diff --git a/README b/README new file mode 100644 index 0000000..061ec8a --- /dev/null +++ b/README @@ -0,0 +1,67 @@ +README for GNU DIFF + +This directory contains the GNU diff, diff3, sdiff, and cmp utilities. +Their features are a superset of the Unix features and they are +significantly faster. + +Please see the file COPYING for copying conditions. + +Please see the file doc/version.texi for version information. + +Please see the file doc/diff.texi (or doc/diff.info) for documentation +that can be printed with TeX, or read with the `info' program or with +Emacs's `M-x info'. Brief man pages are in man/*, but they are no +substitute for the documentation. + +Please see the file ABOUT-NLS for notes about translations. + +Please see the file INSTALL for generic compilation and installation +instructions. Briefly, you can run "./configure; make install". The +command "./configure --help" lists the supported --enable and --with +options. + +If you have a problem with internationalization, you might be able to +work around it as described in ABOUT-NLS by invoking `./configure +--disable-nls'. Many of the problems arise from dynamic linking +issues on non-GNU platforms (e.g. with the iconv library). Such +problems tend to be shared by other GNU applications on these +platforms, and can usually be fixed by carefully tweaking your non-GNU +installation. If you have an older version of libiconv, please +upgrade to the latest one; see . If +the problem seems isolated to diffutils, though, please report a bug. + +This program requires a Standard C compiler (C89 or later). If you +have a nonstandard compiler, please install GCC first. + +If you make changes to the source code, you may need appropriate +versions of GNU build tools to regenerate the intermediate files. The +following versions were used to generate the intermediate files in +this distribution: + +* Autoconf 2.59 +* Automake 1.8.3 +* gettext 0.14.1 +* help2man 1.33 +* Texinfo 4.7 + +Please report bugs to . + +----- + +Copyright (C) 1992, 1998, 2001-2002, 2004, 2009-2010 Free Software Foundation, +Inc. + +This file is part of GNU Diffutils. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . diff --git a/THANKS b/THANKS new file mode 100644 index 0000000..a96b68d --- /dev/null +++ b/THANKS @@ -0,0 +1,23 @@ +Thanks to all the following for their contributions to GNU diffutils: + +Thomas Bushnell, BSG +Wayne Davison +Ulrich Drepper +Paul Eggert +Jay Fenlason +John Gilmore +Torbjorn Granlund +Mike Haertel +Bruno Haible +Chris Hanson +Jim Kingdon +Tom Lord +David J. MacKenzie +Roland McGrath +Jim Meyering +Gene Myers +Randy Smith +Richard Stallman +Leonard H. Tower Jr. +Larry Wall +Eli Zaretskii diff --git a/TODO b/TODO new file mode 100644 index 0000000..f8dc34a --- /dev/null +++ b/TODO @@ -0,0 +1,9 @@ +Add --include option (opposite of --exclude). + +Look into sdiff improvement here: +http://www.pkix.net/~chuck/sdiff2.diff + +Propagate stderr from subprocess so that diff3 does +a better job of explaining _why_: + > $ diff3 /bin/sh /bin/false /bin/mv + > diff3: subsidiary program `diff' failed (exit status 2) diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..645ff56 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1184 @@ +# generated automatically by aclocal 1.11a -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009, 2010 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_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65.57-45695],, +[m4_warning([this file was generated for autoconf 2.65.57-45695. +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'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 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.11a' +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.11a], [], + [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.11a])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, 2003, 2005 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], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + + +# Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2005 +# 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 + +# This was merged into AC_PROG_CC in Autoconf. + +AU_DEFUN([AM_PROG_CC_STDC], +[AC_PROG_CC +AC_DIAGNOSE([obsolete], [$0: + your code should no longer depend upon `am_cv_prog_cc_stdc', but upon + `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when + you adjust the code. You can also remove the above call to + AC_PROG_CC if you already called it elsewhere.]) +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc +]) +AU_DEFUN([fp_PROG_CC_STDC]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# 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 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$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, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, +# 2010 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 11 + +# 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", "GCJ", or "OBJC". +# 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 + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" 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'. + 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 8's {/usr,}/bin/sh. + touch 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 + ;; + 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, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +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, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# 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 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 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"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/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, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 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 16 + +# 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. + +# 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.62])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], +[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], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [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([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. 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)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl 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 +]) + +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, 2003, 2005, 2008 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}" != 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, 2005 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 2 + +# 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, 2002, 2003, 2005, 2009 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 + +# 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 +]) + +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# 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 6 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != 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 +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# 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 6 + +# 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 supports --run. +# If it does, 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 --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 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_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 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 5 + +# _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])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008, 2009 +# 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 6 + +# 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 ( + for am_try in 1 2; do + echo timestamp > 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 + rm -f conftest.file + 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 + 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)]) + +# Copyright (C) 2009 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 1 + +# 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], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +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 +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001, 2003, 2005 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, 2008, 2010 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 3 + +# _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, 2005 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 2 + +# _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. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +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 /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/alloca.m4]) +m4_include([m4/argmatch.m4]) +m4_include([m4/btowc.m4]) +m4_include([m4/c-stack.m4]) +m4_include([m4/clock_time.m4]) +m4_include([m4/codeset.m4]) +m4_include([m4/config-h.m4]) +m4_include([m4/dirname.m4]) +m4_include([m4/dos.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/exclude.m4]) +m4_include([m4/extensions.m4]) +m4_include([m4/fcntl-o.m4]) +m4_include([m4/fcntl.m4]) +m4_include([m4/fcntl_h.m4]) +m4_include([m4/file-type.m4]) +m4_include([m4/fnmatch.m4]) +m4_include([m4/freopen.m4]) +m4_include([m4/getdtablesize.m4]) +m4_include([m4/getopt.m4]) +m4_include([m4/gettext_gl.m4]) +m4_include([m4/gettime.m4]) +m4_include([m4/gettimeofday.m4]) +m4_include([m4/glibc21_gl.m4]) +m4_include([m4/gnu-make.m4]) +m4_include([m4/gnulib-common.m4]) +m4_include([m4/gnulib-comp.m4]) +m4_include([m4/hard-locale.m4]) +m4_include([m4/hash.m4]) +m4_include([m4/iconv.m4]) +m4_include([m4/iconv_h.m4]) +m4_include([m4/iconv_open.m4]) +m4_include([m4/include_next.m4]) +m4_include([m4/inline.m4]) +m4_include([m4/intlmacosx.m4]) +m4_include([m4/inttostr.m4]) +m4_include([m4/inttypes-pri.m4]) +m4_include([m4/inttypes.m4]) +m4_include([m4/langinfo_h.m4]) +m4_include([m4/lib-ld_gl.m4]) +m4_include([m4/lib-link.m4]) +m4_include([m4/lib-prefix_gl.m4]) +m4_include([m4/libsigsegv.m4]) +m4_include([m4/localcharset.m4]) +m4_include([m4/locale-fr.m4]) +m4_include([m4/locale-ja.m4]) +m4_include([m4/locale-tr.m4]) +m4_include([m4/locale-zh.m4]) +m4_include([m4/longlong_gl.m4]) +m4_include([m4/lstat.m4]) +m4_include([m4/malloc.m4]) +m4_include([m4/malloca.m4]) +m4_include([m4/manywarnings.m4]) +m4_include([m4/mbchar.m4]) +m4_include([m4/mbiter.m4]) +m4_include([m4/mbrlen.m4]) +m4_include([m4/mbrtowc.m4]) +m4_include([m4/mbsinit.m4]) +m4_include([m4/mbslen.m4]) +m4_include([m4/mbsrtowcs.m4]) +m4_include([m4/mbstate_t.m4]) +m4_include([m4/memchr.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/multiarch.m4]) +m4_include([m4/nl_langinfo.m4]) +m4_include([m4/nls.m4]) +m4_include([m4/onceonly.m4]) +m4_include([m4/open.m4]) +m4_include([m4/pathmax.m4]) +m4_include([m4/po_gl.m4]) +m4_include([m4/progtest.m4]) +m4_include([m4/putenv.m4]) +m4_include([m4/quote.m4]) +m4_include([m4/quotearg.m4]) +m4_include([m4/regex.m4]) +m4_include([m4/setenv.m4]) +m4_include([m4/sigaction.m4]) +m4_include([m4/signal_h.m4]) +m4_include([m4/signalblocking.m4]) +m4_include([m4/sleep.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/stdio-safer.m4]) +m4_include([m4/stdio_h.m4]) +m4_include([m4/stdlib_h.m4]) +m4_include([m4/strcase.m4]) +m4_include([m4/strerror.m4]) +m4_include([m4/strftime.m4]) +m4_include([m4/string_h.m4]) +m4_include([m4/strings_h.m4]) +m4_include([m4/strndup.m4]) +m4_include([m4/strnlen.m4]) +m4_include([m4/strptime.m4]) +m4_include([m4/strtoimax.m4]) +m4_include([m4/strtol.m4]) +m4_include([m4/strtoll.m4]) +m4_include([m4/strtoul.m4]) +m4_include([m4/strtoull.m4]) +m4_include([m4/strtoumax.m4]) +m4_include([m4/symlink.m4]) +m4_include([m4/sys_stat_h.m4]) +m4_include([m4/sys_time_h.m4]) +m4_include([m4/sys_wait_h.m4]) +m4_include([m4/tempname.m4]) +m4_include([m4/time_h.m4]) +m4_include([m4/time_r.m4]) +m4_include([m4/timegm.m4]) +m4_include([m4/timespec.m4]) +m4_include([m4/tm_gmtoff.m4]) +m4_include([m4/unistd_h.m4]) +m4_include([m4/unlocked-io.m4]) +m4_include([m4/usleep.m4]) +m4_include([m4/vararrays.m4]) +m4_include([m4/version-etc.m4]) +m4_include([m4/warn-on-use.m4]) +m4_include([m4/warnings.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/wctype_h.m4]) +m4_include([m4/wcwidth.m4]) +m4_include([m4/wint_t.m4]) +m4_include([m4/xalloc.m4]) +m4_include([m4/xstrndup.m4]) +m4_include([m4/xstrtol.m4]) diff --git a/bootstrap b/bootstrap new file mode 100755 index 0000000..e55b3d2 --- /dev/null +++ b/bootstrap @@ -0,0 +1,853 @@ +#! /bin/sh +# Print a version string. +scriptversion=2010-04-30.16; # UTC + +# Bootstrap this package from checked-out sources. + +# Copyright (C) 2003-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Originally written by Paul Eggert. The canonical version of this +# script is maintained as build-aux/bootstrap in gnulib, however, to +# be useful to your project, you should place a copy of it under +# version control in the top-level directory of your project. The +# intent is that all customization can be done with a bootstrap.conf +# file also maintained in your version control; gnulib comes with a +# template build-aux/bootstrap.conf to get you started. + +# Please report bugs or propose patches to bug-gnulib@gnu.org. + +nl=' +' + +# Ensure file names are sorted consistently across platforms. +LC_ALL=C +export LC_ALL + +local_gl_dir=gl + +# Temporary directory names. +bt='._bootmp' +bt_regex=`echo "$bt"| sed 's/\./[.]/g'` +bt2=${bt}2 + +usage() { + cat </dev/null 2>&1; then + find_tool_res=$i + break + fi + done + else + find_tool_error_prefix="\$$find_tool_envvar: " + fi + if test x"$find_tool_res" = x; then + echo >&2 "$0: one of these is required: $find_tool_names" + exit 1 + fi + ($find_tool_res --version /dev/null 2>&1 || { + echo >&2 "$0: ${find_tool_error_prefix}cannot run $find_tool_res --version" + exit 1 + } + eval "$find_tool_envvar=\$find_tool_res" + eval "export $find_tool_envvar" +} + +# Find sha1sum, named gsha1sum on MacPorts, and shasum on MacOS 10.6. +find_tool SHA1SUM sha1sum gsha1sum shasum + +# Override the default configuration, if necessary. +# Make sure that bootstrap.conf is sourced from the current directory +# if we were invoked as "sh bootstrap". +case "$0" in + */*) test -r "$0.conf" && . "$0.conf" ;; + *) test -r "$0.conf" && . ./"$0.conf" ;; +esac + + +if test "$vc_ignore" = auto; then + vc_ignore= + test -d .git && vc_ignore=.gitignore + test -d CVS && vc_ignore="$vc_ignore .cvsignore" +fi + +# Translate configuration into internal form. + +# Parse options. + +for option +do + case $option in + --help) + usage + exit;; + --gnulib-srcdir=*) + GNULIB_SRCDIR=`expr "X$option" : 'X--gnulib-srcdir=\(.*\)'`;; + --skip-po) + SKIP_PO=t;; + --force) + checkout_only_file=;; + --copy) + copy=true;; + *) + echo >&2 "$0: $option: unknown option" + exit 1;; + esac +done + +if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then + echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2 + exit 1 +fi + +# If $STR is not already on a line by itself in $FILE, insert it, +# sorting the new contents of the file and replacing $FILE with the result. +insert_sorted_if_absent() { + file=$1 + str=$2 + test -f $file || touch $file + echo "$str" | sort -u - $file | cmp - $file > /dev/null \ + || echo "$str" | sort -u - $file -o $file \ + || exit 1 +} + +# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. +found_aux_dir=no +grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \ + >/dev/null && found_aux_dir=yes +grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ + >/dev/null && found_aux_dir=yes +if test $found_aux_dir = no; then + echo "$0: expected line not found in configure.ac. Add the following:" >&2 + echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2 + exit 1 +fi + +# If $build_aux doesn't exist, create it now, otherwise some bits +# below will malfunction. If creating it, also mark it as ignored. +if test ! -d $build_aux; then + mkdir $build_aux + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + insert_sorted_if_absent $dot_ig $build_aux + done +fi + +# 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. +sort_ver() { # sort -V is not generally available + ver1="$1" + ver2="$2" + + # split on '.' and compare each component + i=1 + while : ; do + p1=$(echo "$ver1" | cut -d. -f$i) + p2=$(echo "$ver2" | cut -d. -f$i) + if [ ! "$p1" ]; then + echo "$1 $2" + break + elif [ ! "$p2" ]; then + echo "$2 $1" + break + elif [ ! "$p1" = "$p2" ]; then + if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison + echo "$2 $1" + elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison + echo "$1 $2" + else # numeric, then lexicographic comparison + lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1) + if [ "$lp" = "$p2" ]; then + echo "$1 $2" + else + echo "$2 $1" + fi + fi + break + fi + i=$(($i+1)) + done +} + +get_version() { + app=$1 + + $app --version >/dev/null 2>&1 || return 1 + + $app --version 2>&1 | + sed -n '# extract version within line + s/.*[v ]\{1,\}\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/ + t done + + # extract version at start of line + s/^\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/ + t done + + d + + :done + #the following essentially does s/5.005/5.5/ + s/\.0*\([1-9]\)/.\1/g + p + q' +} + +check_versions() { + ret=0 + + while read app req_ver; do + # Honor $APP variables ($TAR, $AUTOCONF, etc.) + appvar=`echo $app | tr '[a-z]' '[A-Z]'` + test "$appvar" = TAR && appvar=AMTAR + eval "app=\${$appvar-$app}" + inst_ver=$(get_version $app) + if [ ! "$inst_ver" ]; then + echo "Error: '$app' not found" >&2 + ret=1 + elif [ ! "$req_ver" = "-" ]; then + latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) + if [ ! "$latest_ver" = "$inst_ver" ]; then + echo "Error: '$app' version == $inst_ver is too old" >&2 + echo " '$app' version >= $req_ver is required" >&2 + ret=1 + fi + fi + done + + return $ret +} + +print_versions() { + echo "Program Min_version" + echo "----------------------" + printf "$buildreq" + echo "----------------------" + # can't depend on column -t +} + +if ! printf "$buildreq" | check_versions; then + test -f README-prereq && + echo "See README-prereq for notes on obtaining these prerequisite programs:" >&2 + echo + print_versions + exit 1 +fi + +echo "$0: Bootstrapping from checked-out $package sources..." + +# See if we can use gnulib's git-merge-changelog merge driver. +if test -d .git && (git --version) >/dev/null 2>/dev/null ; then + if git config merge.merge-changelog.driver >/dev/null ; then + : + elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then + echo "initializing git-merge-changelog driver" + git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' + git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' + else + echo "consider installing git-merge-changelog from gnulib" + fi +fi + + +cleanup_gnulib() { + status=$? + rm -fr "$gnulib_path" + exit $status +} + +git_modules_config () { + test -f .gitmodules && git config --file .gitmodules "$@" +} + +gnulib_path=`git_modules_config submodule.gnulib.path` + +# Get gnulib files. + +case ${GNULIB_SRCDIR--} in +-) + if git_modules_config submodule.gnulib.url >/dev/null; then + echo "$0: getting gnulib files..." + git submodule init || exit $? + git submodule update || exit $? + + elif [ ! -d "$gnulib_path" ]; then + echo "$0: getting gnulib files..." + + trap cleanup_gnulib 1 2 13 15 + + git clone -h|grep -- --depth > /dev/null && shallow='--depth 2' || shallow= + git clone $shallow git://git.sv.gnu.org/gnulib "$gnulib_path" || + cleanup_gnulib + + trap - 1 2 13 15 + fi + GNULIB_SRCDIR=$gnulib_path + ;; +*) + # Use GNULIB_SRCDIR as a reference. + if test -d "$GNULIB_SRCDIR"/.git && \ + git_modules_config submodule.gnulib.url >/dev/null; then + echo "$0: getting gnulib files..." + if git submodule -h|grep -- --reference > /dev/null; then + # Prefer the one-liner available in git 1.6.4 or newer. + git submodule update --init --reference "$GNULIB_SRCDIR" \ + "$gnulib_path" || exit $? + else + # This fallback allows at least git 1.5.5. + if test -f "$gnulib_path"/gnulib-tool; then + # Since file already exists, assume submodule init already complete. + git submodule update || exit $? + else + # Older git can't clone into an empty directory. + rmdir "$gnulib_path" 2>/dev/null + git clone --reference "$GNULIB_SRCDIR" \ + "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \ + && git submodule init && git submodule update \ + || exit $? + fi + fi + GNULIB_SRCDIR=$gnulib_path + fi + ;; +esac + +gnulib_tool=$GNULIB_SRCDIR/gnulib-tool +<$gnulib_tool || exit + +# Get translations. + +download_po_files() { + subdir=$1 + domain=$2 + echo "$0: getting translations into $subdir for $domain..." + cmd=`printf "$po_download_command_format" "$domain" "$subdir"` + eval "$cmd" +} + +# Download .po files to $po_dir/.reference and copy only the new +# or modified ones into $po_dir. Also update $po_dir/LINGUAS. +update_po_files() { + # Directory containing primary .po files. + # Overwrite them only when we're sure a .po file is new. + po_dir=$1 + domain=$2 + + # Download *.po files into this dir. + # Usually contains *.s1 checksum files. + ref_po_dir="$po_dir/.reference" + + test -d $ref_po_dir || mkdir $ref_po_dir || return + download_po_files $ref_po_dir $domain \ + && ls "$ref_po_dir"/*.po 2>/dev/null | + sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" + + langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'` + test "$langs" = '*' && langs=x + for po in $langs; do + case $po in x) continue;; esac + new_po="$ref_po_dir/$po.po" + cksum_file="$ref_po_dir/$po.s1" + if ! test -f "$cksum_file" || + ! test -f "$po_dir/$po.po" || + ! $SHA1SUM -c --status "$cksum_file" \ + < "$new_po" > /dev/null; then + echo "updated $po_dir/$po.po..." + cp "$new_po" "$po_dir/$po.po" \ + && $SHA1SUM < "$new_po" > "$cksum_file" + fi + done +} + +case $SKIP_PO in +'') + if test -d po; then + update_po_files po $package || exit + fi + + if test -d runtime-po; then + update_po_files runtime-po $package-runtime || exit + fi;; +esac + +symlink_to_dir() +{ + src=$1/$2 + dst=${3-$2} + + test -f "$src" && { + + # If the destination directory doesn't exist, create it. + # This is required at least for "lib/uniwidth/cjk.h". + dst_dir=`dirname "$dst"` + if ! test -d "$dst_dir"; then + mkdir -p "$dst_dir" + + # If we've just created a directory like lib/uniwidth, + # tell version control system(s) it's ignorable. + # FIXME: for now, this does only one level + parent=`dirname "$dst_dir"` + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + ig=$parent/$dot_ig + insert_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'` + done + fi + + if $copy; then + { + test ! -h "$dst" || { + echo "$0: rm -f $dst" && + rm -f "$dst" + } + } && + test -f "$dst" && + cmp -s "$src" "$dst" || { + echo "$0: cp -fp $src $dst" && + cp -fp "$src" "$dst" + } + else + test -h "$dst" && + src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 && + dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 && + test "$src_i" = "$dst_i" || { + dot_dots= + case $src in + /*) ;; + *) + case /$dst/ in + *//* | */../* | */./* | /*/*/*/*/*/) + echo >&2 "$0: invalid symlink calculation: $src -> $dst" + exit 1;; + /*/*/*/*/) dot_dots=../../../;; + /*/*/*/) dot_dots=../../;; + /*/*/) dot_dots=../;; + esac;; + esac + + echo "$0: ln -fs $dot_dots$src $dst" && + ln -fs "$dot_dots$src" "$dst" + } + fi + } +} + +cp_mark_as_generated() +{ + cp_src=$1 + cp_dst=$2 + + if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then + symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst" + elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then + symlink_to_dir $local_gl_dir "$cp_dst" + else + case $cp_dst in + *.[ch]) c1='/* '; c2=' */';; + *.texi) c1='@c '; c2= ;; + *.m4|*/Make*|Make*) c1='# ' ; c2= ;; + *) c1= ; c2= ;; + esac + + # If the destination directory doesn't exist, create it. + # This is required at least for "lib/uniwidth/cjk.h". + dst_dir=`dirname "$cp_dst"` + test -d "$dst_dir" || mkdir -p "$dst_dir" + + if test -z "$c1"; then + cmp -s "$cp_src" "$cp_dst" || { + # Copy the file first to get proper permissions if it + # doesn't already exist. Then overwrite the copy. + echo "$0: cp -f $cp_src $cp_dst" && + rm -f "$cp_dst" && + cp "$cp_src" "$cp_dst-t" && + sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" && + mv -f "$cp_dst-t" "$cp_dst" + } + else + # Copy the file first to get proper permissions if it + # doesn't already exist. Then overwrite the copy. + cp "$cp_src" "$cp_dst-t" && + ( + echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" && + echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" && + sed "s!$bt_regex/!!g" "$cp_src" + ) > $cp_dst-t && + if cmp -s "$cp_dst-t" "$cp_dst"; then + rm -f "$cp_dst-t" + else + echo "$0: cp $cp_src $cp_dst # with edits" && + mv -f "$cp_dst-t" "$cp_dst" + fi + fi + fi +} + +version_controlled_file() { + dir=$1 + file=$2 + found=no + if test -d CVS; then + grep -F "/$file/" $dir/CVS/Entries 2>/dev/null | + grep '^/[^/]*/[0-9]' > /dev/null && found=yes + elif test -d .git; then + git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes + elif test -d .svn; then + svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes + else + echo "$0: no version control for $dir/$file?" >&2 + fi + test $found = yes +} + +slurp() { + for dir in . `(cd $1 && find * -type d -print)`; do + copied= + sep= + for file in `ls -a $1/$dir`; do + case $file in + .|..) continue;; + .*) continue;; # FIXME: should all file names starting with "." be ignored? + esac + test -d $1/$dir/$file && continue + for excluded_file in $excluded_files; do + test "$dir/$file" = "$excluded_file" && continue 2 + done + if test $file = Makefile.am && test "X$gnulib_mk" != XMakefile.am; then + copied=$copied${sep}$gnulib_mk; sep=$nl + remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g" + sed "$remove_intl" $1/$dir/$file | cmp - $dir/$gnulib_mk > /dev/null || { + echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." && + rm -f $dir/$gnulib_mk && + sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk + } + elif { test "${2+set}" = set && test -r $2/$dir/$file; } || + version_controlled_file $dir $file; then + echo "$0: $dir/$file overrides $1/$dir/$file" + else + copied=$copied$sep$file; sep=$nl + if test $file = gettext.m4; then + echo "$0: patching m4/gettext.m4 to remove need for intl/* ..." + rm -f $dir/$file + sed ' + /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\ + AC_DEFUN([AM_INTL_SUBDIR], []) + /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\ + AC_DEFUN([gt_INTL_SUBDIR_CORE], []) + $a\ + AC_DEFUN([gl_LOCK_EARLY], []) + ' $1/$dir/$file >$dir/$file + else + cp_mark_as_generated $1/$dir/$file $dir/$file + fi + fi || exit + done + + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + ig=$dir/$dot_ig + if test -n "$copied"; then + insert_sorted_if_absent $ig "$copied" + # If an ignored file name ends with .in.h, then also add + # the name with just ".h". Many gnulib headers are generated, + # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc. + # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed + f=`echo "$copied"|sed 's/\.in\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'` + insert_sorted_if_absent $ig "$f" + + # For files like sys_stat.in.h and sys_time.in.h, record as + # ignorable the directory we might eventually create: sys/. + f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'` + insert_sorted_if_absent $ig "$f" + fi + done + done +} + + +# Create boot temporary directories to import from gnulib and gettext. +rm -fr $bt $bt2 && +mkdir $bt $bt2 || exit + +# Import from gnulib. + +gnulib_tool_options="\ + --import\ + --no-changelog\ + --aux-dir $bt/$build_aux\ + --doc-base $bt/$doc_base\ + --lib $gnulib_name\ + --m4-base $bt/$m4_base/\ + --source-base $bt/$source_base/\ + --tests-base $bt/$tests_base\ + --local-dir $local_gl_dir\ + $gnulib_tool_option_extras\ +" +echo "$0: $gnulib_tool $gnulib_tool_options --import ..." +$gnulib_tool $gnulib_tool_options --import $gnulib_modules && +slurp $bt || exit + +for file in $gnulib_files; do + symlink_to_dir "$GNULIB_SRCDIR" $file || exit +done + + +# Import from gettext. +with_gettext=yes +grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ + with_gettext=no + +if test $with_gettext = yes; then + echo "$0: (cd $bt2; ${AUTOPOINT-autopoint}) ..." + cp configure.ac $bt2 && + (cd $bt2 && ${AUTOPOINT-autopoint} && rm configure.ac) && + slurp $bt2 $bt || exit +fi +rm -fr $bt $bt2 || exit + +# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some +# gnulib-populated directories. Such .m4 files would cause aclocal to fail. +# The following requires GNU find 4.2.3 or newer. Considering the usual +# portability constraints of this script, that may seem a very demanding +# requirement, but it should be ok. Ignore any failure, which is fine, +# since this is only a convenience to help developers avoid the relatively +# unusual case in which a symlinked-to .m4 file is git-removed from gnulib +# between successive runs of this script. +find "$m4_base" "$source_base" \ + -depth \( -name '*.m4' -o -name '*.[ch]' \) \ + -type l -xtype l -delete > /dev/null 2>&1 + +# Reconfigure, getting other files. + +# Skip autoheader if it's not needed. +grep -E '^[ ]*AC_CONFIG_HEADERS?\>' configure.ac >/dev/null || + AUTOHEADER=true + +for command in \ + libtool \ + "${ACLOCAL-aclocal} --force -I m4" \ + "${AUTOCONF-autoconf} --force" \ + "${AUTOHEADER-autoheader} --force" \ + "${AUTOMAKE-automake} --add-missing --copy --force-missing" +do + if test "$command" = libtool; then + use_libtool=0 + # We'd like to use grep -E, to see if any of LT_INIT, + # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, + # but that's not portable enough (e.g., for Solaris). + grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ + && use_libtool=1 + grep '^[ ]*LT_INIT' configure.ac >/dev/null \ + && use_libtool=1 + test $use_libtool = 0 \ + && continue + command="${LIBTOOLIZE-libtoolize} -c -f" + fi + echo "$0: $command ..." + $command || exit +done + + +# Get some extra files from gnulib, overriding existing files. +for file in $gnulib_extra_files; do + case $file in + */INSTALL) dst=INSTALL;; + build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;; + *) dst=$file;; + esac + symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit +done + +if test $with_gettext = yes; then + # Create gettext configuration. + echo "$0: Creating po/Makevars from po/Makevars.template ..." + rm -f po/Makevars + sed ' + /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ + /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ + /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'| + /^XGETTEXT_OPTIONS *=/{ + s/$/ \\/ + a\ + '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} + } + ' po/Makevars.template >po/Makevars || exit 1 + + if test -d runtime-po; then + # Similarly for runtime-po/Makevars, but not quite the same. + rm -f runtime-po/Makevars + sed ' + /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ + /^subdir *=.*/s/=.*/= runtime-po/ + /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ + /^XGETTEXT_OPTIONS *=/{ + s/$/ \\/ + a\ + '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} + } + ' po/Makevars.template >runtime-po/Makevars || exit 1 + + # Copy identical files from po to runtime-po. + (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) + fi +fi + +bootstrap_epilogue + +echo "$0: done. Now you can run './configure'." + +# 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/build-aux/announce-gen b/build-aux/announce-gen new file mode 100755 index 0000000..7d70fd4 --- /dev/null +++ b/build-aux/announce-gen @@ -0,0 +1,500 @@ +eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}' + & eval 'exec perl -wS "$0" $argv:q' + if 0; +# Generate a release announcement message. + +my $VERSION = '2009-11-20 13:36'; # 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-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Written by Jim Meyering + +use strict; + +use Getopt::Long; +use Digest::MD5; +use Digest::SHA1; +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'); + +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 < = C + +Compute the sizes of the C<@file> and return them as a hash. Return +C if one of the computation failed. + +=cut + +sub sizes (@) +{ + my (@file) = @_; + + my $fail = 0; + my %res; + foreach my $f (@file) + { + my $cmd = "du --human $f"; + my $t = `$cmd`; + # FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS + $@ + and (warn "$ME: command failed: `$cmd'\n"), $fail = 1; + chomp $t; + $t =~ s/^([\d.]+[MkK]).*/${1}B/; + $res{$f} = $t; + } + return $fail ? undef : %res; +} + +=item C 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. + +=cut + +sub print_checksums (@) +{ + my (@file) = @_; + + print "Here are the MD5 and SHA1 checksums:\n"; + print "\n"; + + foreach my $meth (qw (md5 sha1)) + { + foreach my $f (@file) + { + open IN, '<', $f + or die "$ME: $f: cannot open for reading: $!\n"; + binmode IN; + my $dig = + ($meth eq 'md5' + ? Digest::MD5->new->addfile(*IN)->hexdigest + : Digest::SHA1->new->addfile(*IN)->hexdigest); + close IN; + print "$dig $f\n"; + } + } + print "\n"; +} + +=item C addressing changes +between versions C<$prev_version> and C<$curr_version>. + +=cut + +sub print_news_deltas ($$$) +{ + my ($news_file, $prev_version, $curr_version) = @_; + + print "\n$news_file\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)/; + + open NEWS, '<', $news_file + or die "$ME: $news_file: cannot open for reading: $!\n"; + while (defined (my $line = )) + { + 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; + } + } + close NEWS; + + $in_items + or die "$ME: $news_file: no matching lines 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 = )) + { + 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 "$ME: 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 "$ME: $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 $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; + + GetOptions + ( + '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, + '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 sure each required option is specified. + $release_type + or (warn "$ME: release type not specified\n"), $fail = 1; + $package_name + or (warn "$ME: package name not specified\n"), $fail = 1; + $prev_version + or (warn "$ME: previous version string not specified\n"), $fail = 1; + $curr_version + or (warn "$ME: current version string not specified\n"), $fail = 1; + $gpg_key_id + or (warn "$ME: GnuPG key ID not specified\n"), $fail = 1; + @url_dir_list + or (warn "$ME: URL directory name(s) not specified\n"), $fail = 1; + + my @tool_list = split ',', $bootstrap_tools; + + grep (/^gnulib$/, @tool_list) ^ defined $gnulib_version + and (warn "$ME: 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; + + exists $valid_release_types{$release_type} + or (warn "$ME: `$release_type': invalid release type\n"), $fail = 1; + + @ARGV + and (warn "$ME: 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; + + # The markup is escaped as <\# so that when this script is sent by + # mail (or part of a diff), Gnus is not triggered. + print < + +FIXME: put comments here + +EOF + + 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 "To reduce load on the main server, use a mirror listed at:\n"; + print " http://www.gnu.org/order/ftp.html\n\n"; + } + + $print_checksums_p + and print_checksums (@sizable); + + print <. */ + +/* _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/build-aux/c++defs.h b/build-aux/c++defs.h new file mode 100644 index 0000000..798f565 --- /dev/null +++ b/build-aux/c++defs.h @@ -0,0 +1,253 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* C++ compatible function declaration macros. + Copyright (C) 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* 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, ...)); + */ +#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 \ + { \ + rettype (*const func) parameters = ::rpl_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 \ + { \ + rettype (*const func) parameters = \ + reinterpret_cast(::rpl_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, ...)); + */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* If we were to write + rettype (*const func) parameters = ::func; + like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls + better (remove an indirection through a 'static' pointer variable), + but then the _GL_CXXALIASWARN macro below would cause a warning not only + for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */ +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static rettype (*func) parameters = ::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 rettype (*func) parameters = \ + reinterpret_cast(::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 rettype (*func) parameters = \ + reinterpret_cast( \ + (rettype2(*)parameters2)(::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) +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +#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) +# 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.") +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ diff --git a/build-aux/compile b/build-aux/compile new file mode 100755 index 0000000..c0096a7 --- /dev/null +++ b/build-aux/compile @@ -0,0 +1,143 @@ +#! /bin/sh +# Wrapper for compilers which do not understand `-c -o'. + +scriptversion=2009-10-06.20; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software +# Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can 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 . + +# 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 or send patches to +# . + +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 . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; +esac + +ofile= +cfile= +eat= + +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/build-aux/config.guess b/build-aux/config.guess new file mode 100755 index 0000000..115f944 --- /dev/null +++ b/build-aux/config.guess @@ -0,0 +1,1502 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +# Free Software Foundation, Inc. + +timestamp='2010-04-03' + +# 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 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# 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 Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -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 ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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 + +trap 'exit 1' HUP INT TERM + +# 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. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ; +: ${TMPDIR=/tmp} ; + { 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) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; 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 ; set_cc_for_build= ;' + +# 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) >/dev/null 2>&1 ; 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 + +# 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 tupples: *-*-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=`(/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 ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $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 + # 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/[-_].*/\./'` + ;; + 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}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${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 ;; + 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'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + 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.*:*) + eval $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) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* 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 + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + 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:*:[456]) + 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/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + 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:BSD:*) + 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 + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + 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 + eval $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:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + 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 ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + 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 ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-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-gnu`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 '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + 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="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $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-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $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-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + 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-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + 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.*:* | i*86:SYSTEM_V: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' /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 configury 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 + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # 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 ;; + 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 ;; + 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 + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + 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 + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + 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 ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-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. + 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 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +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 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/build-aux/config.rpath b/build-aux/config.rpath new file mode 100755 index 0000000..17298f2 --- /dev/null +++ b/build-aux/config.rpath @@ -0,0 +1,672 @@ +#! /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-2010 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally 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. +# +# 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,' + ;; + darwin*) + case $cc_basename in + xlc*) + wl='-Wl,' + ;; + esac + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + newsos6) + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + ecc*) + wl='-Wl,' + ;; + icc* | ifort*) + wl='-Wl,' + ;; + lf95*) + wl='-Wl,' + ;; + pgcc | pgf77 | pgf90) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + rdos*) + ;; + solaris*) + wl='-Wl,' + ;; + 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*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we cannot use + # them. + ld_shlibs=no + ;; + 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 + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + gnu* | linux* | k*bsd*-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*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + 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 test "$GCC" = yes ; then + : + else + case $cc_basename in + xlc*) + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd1*) + ld_shlibs=no + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + 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=: + ;; + 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*) + library_names_spec='$libname.a' + ;; + 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' + ;; + freebsd1*) + ;; + freebsd* | dragonfly*) + case "$host_os" in + freebsd[123]*) + library_names_spec='$libname$shrext$versuffix' ;; + *) + library_names_spec='$libname$shrext' ;; + esac + ;; + gnu*) + 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) + 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' + ;; + 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=/' <. Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# 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: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# 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 + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -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 ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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" + 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 + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -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) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | 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 \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # 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) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | 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-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile-* | tilegx-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + 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 + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + 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 | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + 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 + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + 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 + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + 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 + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + 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 + ;; + # This must be matched before tile*. + tilegx*) + basic_machine=tilegx-unknown + os=-linux-gnu + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + 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 + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# 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) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/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 + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First 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* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -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 + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + 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 $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + 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 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + 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 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-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 + ;; + *-next) + os=-nextstep3 + ;; + *-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 + ;; + *) + 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. +vendor=unknown +case $basic_machine 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 + ;; + -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 + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/build-aux/depcomp b/build-aux/depcomp new file mode 100755 index 0000000..df8eea7 --- /dev/null +++ b/build-aux/depcomp @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. + +# This program is free software; you can 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 . + +# 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 . + +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 outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +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" + +# 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 + +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 -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## 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). +## - 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 -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## 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. + tr ' ' ' +' < "$tmpdepfile" | +## 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. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then : + else + 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 ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +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. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + 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 -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + 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. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + 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 -eq 0; then : + else + 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,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#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. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # 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.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + 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" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + 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:: \1 \\:p' >> "$depfile" + echo " " >> "$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 '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/build-aux/do-release-commit-and-tag b/build-aux/do-release-commit-and-tag new file mode 100755 index 0000000..353c460 --- /dev/null +++ b/build-aux/do-release-commit-and-tag @@ -0,0 +1,139 @@ +#!/bin/sh +# In a git/autoconf/automake-enabled project with a NEWS file and a version- +# controlled .prev-version file, automate the procedure by which we record +# the date, release-type and version string in the NEWS file. That commit +# will serve to identify the release, so apply a signed tag to it as well. +VERSION=2009-11-06.10 # UTC + +# Note: this is a bash script (could be zsh or dash) + +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Written by Jim Meyering + +ME=`basename "$0"` +warn() { printf '%s: %s\n' "$ME" "$*" >&2; } +die() { warn "$*"; exit 1; } + +help_version() +{ + case $1 in + --help) cat <. +EOF + exit ;; + + --version) + year=`echo "$VERSION" | sed 's/[^0-9].*//'` + cat < +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +EOF + exit ;; + + *) die "unrecognized option: $1";; + esac +} + +case $# in + 1) help_version $1; exit 0;; + 2) ;; + *) warn "Usage: $ME VERSION TYPE"; exit 1;; +esac + +ver=$1 +type=$2 + +# Verify that $ver looks like a version number, and... +echo "$ver"|grep -E '^[0-9][0-9.]*[0-9]$' > /dev/null \ + || die "invalid version: $ver" +prev_ver=$(cat .prev-version) \ + || die 'failed to determine previous version number from .prev-version' + +# Verify that $ver is sensible (> .prev-version). +case $(printf "$prev_ver\n$ver\n"|sort -V -u|tr '\n' ':') in + "$prev_ver:$ver:") ;; + *) die "invalid version: $ver";; +esac + +case $type in + alpha|beta|stable) ;; + *) die "invalid release type: $type";; +esac + +# Extract package name from Makefile. +pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' Makefile) \ + || die 'failed to determine package name from Makefile' + +# simple check: no question marks on line 3 of NEWS +noteworthy='* Noteworthy changes in release' +test "$(sed -n 3p NEWS)" = "$noteworthy ?.? (????-??-??) [?]" \ + || die 'line 3 of NEWS looks fishy!' + +# No dirt allowed. +case $(git diff-index --name-only HEAD) in + '') ;; + *) die 'this tree is dirty; commit your changes first';; +esac + +# update NEWS to have today's date, plus desired version number and $type +perl -MPOSIX -ni -e 'my $today = strftime "%F", localtime time;' \ + -e 'my ($type, $ver) = qw('"$type $ver"');' \ + -e 'my $pfx = "'"$noteworthy"'";' \ + -e 'print $.==3 ? "$pfx $ver ($today) [$type]\n" : $_' \ + NEWS || die 'failed to update NEWS' + +# Ensure the current branch name is "master": +curr_br=$(git rev-parse --symbolic-full-name HEAD) +test "$curr_br" = refs/heads/master || die not on master + +printf "version $ver\n\n* NEWS: Record release date.\n" \ + | git commit -F - -a || die 'git commit failed' +git tag -s -m "$pkg $ver" v$ver HEAD || die 'git tag failed' + +# Local variables: +# indent-tabs-mode: nil +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "VERSION=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: " # UTC" +# End: diff --git a/build-aux/gendocs.sh b/build-aux/gendocs.sh new file mode 100755 index 0000000..67d5b52 --- /dev/null +++ b/build-aux/gendocs.sh @@ -0,0 +1,367 @@ +#!/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=2010-02-13.20 + +# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +# Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Original author: Mohit Agarwal. +# Send bug reports and any other correspondence to bug-texinfo@gnu.org. + +prog=`basename "$0"` +srcdir=`pwd` + +scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh" +templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template" + +: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="} +: ${MAKEINFO="makeinfo"} +: ${TEXI2DVI="texi2dvi -t @finalout"} +: ${DVIPS="dvips"} +: ${DOCBOOK2HTML="docbook2html"} +: ${DOCBOOK2PDF="docbook2pdf"} +: ${DOCBOOK2PS="docbook2ps"} +: ${DOCBOOK2TXT="docbook2txt"} +: ${GENDOCS_TEMPLATE_DIR="."} +: ${TEXI2HTML="texi2html"} +unset CDPATH +unset use_texi2html + +version="gendocs.sh $scriptversion + +Copyright 2009 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 various output formats from PACKAGE.texinfo (or .texi or .txi) source. +See the GNU Maintainers document for a more extensive discussion: + http://www.gnu.org/prep/maintain_toc.html + +Options: + -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} + -o OUTDIR write files into OUTDIR, instead of manual/. + --email ADR use ADR as contact in generated web pages. + --docbook convert to DocBook too (xml, txt, html, pdf and ps). + --html ARG pass indicated ARG to makeinfo or texi2html for HTML targets. + --texi2html use texi2html to generate HTML targets. + --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 to specify your bug-reporting +address in the generated HTML pages. + +MANUAL-TITLE is included as part of the HTML 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.) + +You can set the environment variables MAKEINFO, TEXI2DVI, and DVIPS 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, DOCBOOK2PS, and +DOCBOOK2TXT are also respected.) + +By default, makeinfo is 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-texinfo@gnu.org. +" + +calcsize() +{ + size=`ls -ksl $1 | awk '{print $1}'` + echo $size +} + +MANUAL_TITLE= +PACKAGE= +EMAIL=webmasters@gnu.org # please override with --email +htmlarg= +outdir=manual +srcfile= + +while test $# -gt 0; do + case $1 in + --email) shift; EMAIL=$1;; + --help) echo "$usage"; exit 0;; + --version) echo "$version"; exit 0;; + -s) shift; srcfile=$1;; + -o) shift; outdir=$1;; + --docbook) docbook=yes;; + --html) shift; htmlarg=$1;; + --texi2html) use_texi2html=1;; + -*) + 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 + +if test -n "$srcfile"; then + : +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 + +case $outdir in + /*) dotdot_outdir="$outdir";; + *) dotdot_outdir="../$outdir";; +esac + +echo Generating output formats for $srcfile + +cmd="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\"" +echo "Generating info files... ($cmd)" +eval "$cmd" +mkdir -p $outdir/ +tar czf $outdir/$PACKAGE.info.tar.gz $PACKAGE.info* +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. + +cmd="${TEXI2DVI} \"$srcfile\"" +echo "Generating dvi ... ($cmd)" +eval "$cmd" + +# now, before we compress dvi: +echo Generating postscript... +${DVIPS} $PACKAGE -o +gzip -f -9 $PACKAGE.ps +ps_gz_size=`calcsize $PACKAGE.ps.gz` +mv $PACKAGE.ps.gz $outdir/ + +# compress/finish dvi: +gzip -f -9 $PACKAGE.dvi +dvi_gz_size=`calcsize $PACKAGE.dvi.gz` +mv $PACKAGE.dvi.gz $outdir/ + +cmd="${TEXI2DVI} --pdf \"$srcfile\"" +echo "Generating pdf ... ($cmd)" +eval "$cmd" +pdf_size=`calcsize $PACKAGE.pdf` +mv $PACKAGE.pdf $outdir/ + +cmd="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\"" +echo "Generating ASCII... ($cmd)" +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/ + +html_split() +{ + opt="--split=$1 $htmlarg --node-files" + cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" + echo "Generating html by $1... ($cmd)" + eval "$cmd" + split_html_dir=$PACKAGE.html + ( + cd ${split_html_dir} || exit 1 + ln -sf ${PACKAGE}.html index.html + tar -czf $dotdot_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 $htmlarg" + cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" + echo "Generating monolithic html... ($cmd)" + 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/ + + cmd="$SETLANG $MAKEINFO --html -o $PACKAGE.html $htmlarg \"$srcfile\"" + echo "Generating html by node... ($cmd)" + eval "$cmd" + split_html_dir=$PACKAGE.html + ( + cd ${split_html_dir} || exit 1 + tar -czf $dotdot_outdir/${PACKAGE}.html_node.tar.gz -- *.html + ) + html_node_tgz_size=`calcsize $outdir/${PACKAGE}.html_node.tar.gz` + rm -f $outdir/html_node/*.html + mkdir -p $outdir/html_node/ + mv ${split_html_dir}/*.html $outdir/html_node/ + rmdir ${split_html_dir} +else + cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $htmlarg \"$srcfile\"" + echo "Generating monolithic html... ($cmd)" + 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 + +echo Making .tar.gz for sources... +d=`dirname $srcfile` +srcfiles=`ls $d/*.texinfo $d/*.texi $d/*.txi $d/*.eps 2>/dev/null` || true +tar cvzfh $outdir/$PACKAGE.texi.tar.gz $srcfiles +texi_tgz_size=`calcsize $outdir/$PACKAGE.texi.tar.gz` + +if test -n "$docbook"; then + cmd="$SETLANG $MAKEINFO -o - --docbook \"$srcfile\" > ${srcdir}/$PACKAGE-db.xml" + echo "Generating docbook XML... ($cmd)" + 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/ + + cmd="${DOCBOOK2HTML} -o $split_html_db_dir ${outdir}/$PACKAGE-db.xml" + echo "Generating docbook HTML... ($cmd)" + eval "$cmd" + split_html_db_dir=html_node_db + ( + cd ${split_html_db_dir} || exit 1 + tar -czf $dotdot_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" + echo "Generating docbook ASCII... ($cmd)" + eval "$cmd" + docbook_ascii_size=`calcsize $PACKAGE-db.txt` + mv $PACKAGE-db.txt $outdir/ + + cmd="${DOCBOOK2PS} ${outdir}/$PACKAGE-db.xml" + echo "Generating docbook PS... ($cmd)" + eval "$cmd" + gzip -f -9 -c $PACKAGE-db.ps >$outdir/$PACKAGE-db.ps.gz + docbook_ps_gz_size=`calcsize $outdir/$PACKAGE-db.ps.gz` + mv $PACKAGE-db.ps $outdir/ + + cmd="${DOCBOOK2PDF} ${outdir}/$PACKAGE-db.xml" + echo "Generating docbook PDF... ($cmd)" + eval "$cmd" + docbook_pdf_size=`calcsize $PACKAGE-db.pdf` + mv $PACKAGE-db.pdf $outdir/ +fi + +echo "Writing index file..." +if test -z "$use_texi2html"; then + CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ + /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d" +else + 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!%%PS_GZ_SIZE%%!$ps_gz_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_PS_GZ_SIZE%%!$docbook_ps_gz_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 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen new file mode 100755 index 0000000..5a7e989 --- /dev/null +++ b/build-aux/git-version-gen @@ -0,0 +1,151 @@ +#!/bin/sh +# Print a version string. +scriptversion=2010-04-26.16; # UTC + +# Copyright (C) 2007-2010 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/. +# It may be run two ways: +# - from a git repository in which the "git describe" command below +# produces useful output (thus requiring at least one signed tag) +# - from a non-git-repo directory containing a .tarball-version file, which +# presumes this script is invoked like "./git-version-gen .tarball-version". + +# In order to use intra-version strings in your project, you will need two +# separate generated version string files: +# +# .tarball-version - present only in a distribution tarball, and not in +# a checked-out repository. Created with contents that were learned at +# the last time autoconf was run, and used by git-version-gen. Must not +# be present in either $(srcdir) or $(builddir) for git-version-gen to +# give accurate answers during normal development with a checked out tree, +# but must be present in a tarball when there is no version control system. +# Therefore, it cannot be used in any dependencies. GNUmakefile has +# hooks to force a reconfigure at distribution time to get the value +# correct, without penalizing normal development with extra reconfigures. +# +# .version - present in a checked-out repository and in a distribution +# tarball. Usable in dependencies, particularly for files that don't +# want to depend on config.h but do want to track version changes. +# Delete this file prior to any autoconf run where you want to rebuild +# files to pick up a version string change; and leave it stale to +# minimize rebuild time after unrelated changes to configure sources. +# +# It is probably wise to add these two files to .gitignore, so that you +# don't accidentally commit either generated file. +# +# Use the following line in your configure.ac, so that $(VERSION) will +# automatically be up-to-date each time configure is run (and note that +# since configure.ac no longer includes a version string, Makefile rules +# should not depend on configure.ac for version updates). +# +# AC_INIT([GNU project], +# m4_esyscmd([build-aux/git-version-gen .tarball-version]), +# [bug-project@example]) +# +# Then use the following lines in your Makefile.am, so that .version +# will be present for dependencies, and so that .tarball-version will +# exist in distribution tarballs. +# +# BUILT_SOURCES = $(top_srcdir)/.version +# $(top_srcdir)/.version: +# echo $(VERSION) > $@-t && mv $@-t $@ +# dist-hook: +# echo $(VERSION) > $(distdir)/.tarball-version + +case $# in + 1) ;; + *) echo 1>&2 "Usage: $0 \$srcdir/.tarball-version"; exit 1;; +esac + +tarball_version_file=$1 +nl=' +' + +# First see if there is a tarball-only version file. +# then try "git describe", then default. +if test -f $tarball_version_file +then + v=`cat $tarball_version_file` || exit 1 + case $v in + *$nl*) v= ;; # reject multi-line output + [0-9]*) ;; + *) v= ;; + esac + test -z "$v" \ + && echo "$0: WARNING: $tarball_version_file seems to be damaged" 1>&2 +fi + +if test -n "$v" +then + : # use $v +elif test -d .git \ + && v=`git describe --abbrev=4 --match='v*' HEAD 2>/dev/null \ + || git describe --abbrev=4 HEAD 2>/dev/null` \ + && case $v in + v[0-9]*) ;; + *) (exit 1) ;; + esac +then + # Is this a new git that lists number of commits since the last + # tag or the previous older version that did not? + # Newer: v6.10-77-g0f8faeb + # Older: v6.10-g0f8faeb + case $v in + *-*-*) : git describe is okay three part flavor ;; + *-*) + : git describe is older two part flavor + # Recreate the number of commits and rewrite such that the + # result is the same as if we were using the newer version + # of git describe. + vtag=`echo "$v" | sed 's/-.*//'` + numcommits=`git rev-list "$vtag"..HEAD | wc -l` + v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`; + ;; + esac + + # Change the first '-' to a '.', so version-comparing tools work properly. + # Remove the "g" in git describe's output string, to save a byte. + v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`; +else + v=UNKNOWN +fi + +v=`echo "$v" |sed 's/^v//'` + +# Don't declare a version "dirty" merely because a time stamp has changed. +git update-index --refresh > /dev/null 2>&1 + +dirty=`sh -c 'git diff-index --name-only HEAD' 2>/dev/null` || dirty= +case "$dirty" in + '') ;; + *) # Append the suffix only if there isn't one already. + case $v in + *-dirty) ;; + *) v="$v-dirty" ;; + esac ;; +esac + +# Omit the trailing newline, so that m4_esyscmd can use the result directly. +echo "$v" | tr -d "$nl" + +# 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/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog new file mode 100755 index 0000000..7660af5 --- /dev/null +++ b/build-aux/gitlog-to-changelog @@ -0,0 +1,191 @@ +eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}' + & eval 'exec perl -wS "$0" $argv:q' + if 0; +# Convert git log output to ChangeLog format. + +my $VERSION = '2009-10-30 13: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) 2008-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +# Written by Jim Meyering + +use strict; +use warnings; +use Getopt::Long; +use POSIX qw(strftime); + +(my $ME = $0) =~ s|.*/||; + +# use File::Coda; # http://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] [ARGS] + +Convert git log output to ChangeLog format. If present, any ARGS +are passed to "git log". To avoid ARGS being parsed as options to +$ME, they may be preceded by '--'. + +OPTIONS: + + --since=DATE convert only the logs since DATE; + the default is to convert all log entries. + --format=FMT set format string for commit subject and body; + see 'man git-log' for the list of format metacharacters; + the default is '%s%n%b%n' + + --help display this help and exit + --version output version information and exit + +EXAMPLE: + + $ME --since=2008-01-01 > ChangeLog + $ME -- -n 5 foo > last-5-commits-to-branch-foo + +EOF + } + exit $exit_code; +} + +# If the string $S is a well-behaved file name, simply return it. +# If it contains white space, quotes, etc., quote it, and return the new string. +sub shell_quote($) +{ + my ($s) = @_; + if ($s =~ m![^\w+/.,-]!) + { + # Convert each single quote to '\'' + $s =~ s/\'/\'\\\'\'/g; + # Then single quote the string. + $s = "'$s'"; + } + return $s; +} + +sub quoted_cmd(@) +{ + return join (' ', map {shell_quote $_} @_); +} + +{ + my $since_date = '1970-01-01 UTC'; + my $format_string = '%s%n%b%n'; + GetOptions + ( + help => sub { usage 0 }, + version => sub { print "$ME version $VERSION\n"; exit }, + 'since=s' => \$since_date, + 'format=s' => \$format_string, + ) or usage 1; + + my @cmd = (qw (git log --log-size), "--since=$since_date", + '--pretty=format:%ct %an <%ae>%n%n'.$format_string, @ARGV); + open PIPE, '-|', @cmd + or die ("$ME: failed to run `". quoted_cmd (@cmd) ."': $!\n" + . "(Is your Git too old? Version 1.5.1 or later is required.)\n"); + + my $prev_date_line = ''; + while (1) + { + defined (my $in = <PIPE>) + or last; + $in =~ /^log size (\d+)$/ + or die "$ME:$.: Invalid line (expected log size):\n$in"; + my $log_nbytes = $1; + + my $log; + my $n_read = read PIPE, $log, $log_nbytes; + $n_read == $log_nbytes + or die "$ME:$.: unexpected EOF\n"; + + my @line = split "\n", $log; + my $author_line = shift @line; + defined $author_line + or die "$ME:$.: unexpected EOF\n"; + $author_line =~ /^(\d+) (.*>)$/ + or die "$ME:$.: Invalid line " + . "(expected date/author/email):\n$author_line\n"; + + my $date_line = sprintf "%s $2\n", strftime ("%F", localtime ($1)); + # If this line would be the same as the previous date/name/email + # line, then arrange not to print it. + if ($date_line ne $prev_date_line) + { + $prev_date_line eq '' + or print "\n"; + print $date_line; + } + $prev_date_line = $date_line; + + # Omit "Signed-off-by..." lines. + @line = grep !/^Signed-off-by: .*>$/, @line; + + # If there were any lines + if (@line == 0) + { + warn "$ME: warning: empty commit message:\n $date_line\n"; + } + else + { + # Remove leading and trailing blank lines. + while ($line[0] =~ /^\s*$/) { shift @line; } + while ($line[$#line] =~ /^\s*$/) { pop @line; } + + # Prefix each non-empty line with a TAB. + @line = map { length $_ ? "\t$_" : '' } @line; + + print "\n", join ("\n", @line), "\n"; + } + + defined ($in = <PIPE>) + or last; + $in ne "\n" + and die "$ME:$.: unexpected line:\n$in"; + } + + close PIPE + or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n"; + # FIXME-someday: include $PROCESS_STATUS in the diagnostic +} + +# Local Variables: +# mode: perl +# indent-tabs-mode: nil +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "my $VERSION = '" +# time-stamp-format: "%:y-%02m-%02d %02H:%02M" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "'; # UTC" +# End: diff --git a/build-aux/gnu-web-doc-update b/build-aux/gnu-web-doc-update new file mode 100755 index 0000000..2c1a0cc --- /dev/null +++ b/build-aux/gnu-web-doc-update @@ -0,0 +1,115 @@ +#!/bin/sh +# Run this after each non-alpha release, to update the web documentation at +# http://www.gnu.org/software/$pkg/manual/ +# This script must be run from the top-level directory, +# assumes you're using git for revision control, +# and requires a .prev-version file as well as a Makefile, +# from which it extracts the version number and package name, respectively. +# Also, it assumes all documentation is in the doc/ sub-directory. + +VERSION=2009-07-21.16; # UTC + +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +# Requirements: everything required to bootstrap your package, +# plus these: git, cvs, cvsu, rsync, mktemp + +ME=`basename "$0"` +warn() { printf '%s: %s\n' "$ME" "$*" >&2; } +die() { warn "$*"; exit 1; } + +help_version() +{ + case $1 in + --help) cat <<EOF +Usage: $ME + +Run this script (no options or arguments) after each non-alpha release, +to update the web documentation at http://www.gnu.org/software/\$pkg/manual/ +Run it from your project's the top-level directory. + +Options: + --help print this help, then exit + --version print version number, then exit + +Report bugs and patches to <bug-gnulib@gnu.org>. +EOF + exit ;; + + --version) + year=`echo "$VERSION" | sed 's/[^0-9].*//'` + cat <<EOF +$ME $VERSION +Copyright (C) $year Free Software Foundation, Inc, +License GPLv3+: GNU GPL version 3 or later <http://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 ;; + + *) die "unrecognized option: $1";; + esac +} + +case $# in + 0) ;; + 1) help_version $1 ;; + *) die "$ME: too many options" ;; +esac + +prev=.prev-version +version=$(cat $prev) || die "$ME: no $prev file?" +pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' Makefile) || die "$ME: no Makefile?" +tmp_branch=web-doc-$version-$$ + +cleanup() +{ + __st=$?; + rm -rf "$tmp" + git checkout master + git branch -d $tmp_branch + exit $__st +} +trap cleanup 0 +trap 'exit $?' 1 2 13 15 + +# We must build using sources for which --version reports the +# just-released version number, not some string like 7.6.18-20761. +# That version string propagates into all documentation. +git checkout -b $tmp_branch v$version +./bootstrap && ./configure && make && make web-manual + +tmp=$(mktemp -d --tmpdir=. web-doc-update.XXXXXX) || exit 1 +( cd $tmp \ + && cvs -d $USER@cvs.sv.gnu.org:/webcvs/$pkg co $pkg ) +rsync -avP doc/manual/ $tmp/$pkg/manual + +( + cd $tmp/$pkg/manual + + # Add any new files: + cvsu --types='?'|sed s/..// | xargs --no-run-if-empty -- cvs add -ko + + cvs ci -m $version +) + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "VERSION=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/build-aux/gnupload b/build-aux/gnupload new file mode 100755 index 0000000..a7ce5e6 --- /dev/null +++ b/build-aux/gnupload @@ -0,0 +1,413 @@ +#!/bin/sh +# Sign files and upload them. + +scriptversion=2010-04-25.17; # UTC + +# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# This program is free software; you can redistribute 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/>. + +# Originally written by Alexandre Duret-Lutz <adl@gnu.org>. + +set -e + +GPG='gpg --batch --no-tty' +conffile=.gnuploadrc +to= +dry_run=false +symlink_files= +delete_files= +delete_symlinks= +collect_var= +dbg= + +usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...] + +Sign all FILES, and process them at selected destinations according to CMD. +<http://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html> +explains further. + +Commands: + --delete delete FILES from destination + --symlink create symbolic links + --rmsymlink remove symbolic links + -- treat the remaining arguments as files to upload + +Options: + --help print this help text and exit + --to DEST specify one destination for FILES + (multiple --to options are allowed) + --user NAME sign with key NAME + --symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names + --dry-run do nothing, show what would have been done + --version output version information 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. + +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 uses the ncftpput program 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 +(http://savannah.gnu.org/projects/gnulib) may serve as a replacement. + +Report bugs to <bug-automake@gnu.org>. +Send patches to <automake-patches@gnu.org>." + +# Read local configuration file +if test -r "$conffile"; then + echo "$0: Reading configuration file $conffile" + eval set x "`sed 's/#.*$//;/^$/d' \"$conffile\" | tr '\012\015' ' '` \"\$@\"" + shift +fi + +while test -n "$1"; do + case $1 in + -*) + collect_var= + case $1 in + --help) + echo "$usage" + exit $? + ;; + --to) + if test -z "$2"; then + echo "$0: Missing argument for --to" 1>&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 + ;; + --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 + ;; + --dry-run|-n) + 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 + +# 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. +PATH=/empty echo -n "Enter GPG passphrase: " +stty -echo +read -r passphrase +stty echo +echo + +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.1 +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= + 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 '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/build-aux/install-sh b/build-aux/install-sh new file mode 100755 index 0000000..3f83ce9 --- /dev/null +++ b/build-aux/install-sh @@ -0,0 +1,524 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2010-02-06.18; # 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. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# 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_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +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 +no_target_directory= + +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 + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +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 + 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 + 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 starting with `-'. + 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 + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + 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. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/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-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 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 + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && 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=$dstdir/_inst.$$_ + rmtmp=$dstdir/_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` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob 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 '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/build-aux/mdate-sh b/build-aux/mdate-sh new file mode 100755 index 0000000..c477512 --- /dev/null +++ b/build-aux/mdate-sh @@ -0,0 +1,206 @@ +#!/bin/sh +# Get modification time of a file or directory and pretty-print it. + +scriptversion=2010-02-22.21; # UTC + +# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005, 2007, 2009, 2010 +# 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 <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>. + +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 + +# Prevent date giving response in another language. +LANG=C +export LANG +LC_ALL=C +export LC_ALL +LC_TIME=C +export LC_TIME + +# 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 + 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 + +# 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 '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/build-aux/missing b/build-aux/missing new file mode 100755 index 0000000..28055d2 --- /dev/null +++ b/build-aux/missing @@ -0,0 +1,376 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc. +# Originally 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 + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +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 + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# 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/build-aux/mkinstalldirs b/build-aux/mkinstalldirs new file mode 100755 index 0000000..4191a45 --- /dev/null +++ b/build-aux/mkinstalldirs @@ -0,0 +1,162 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy + +scriptversion=2009-04-28.21; # UTC + +# Original author: Noah Friedman <friedman@prep.ai.mit.edu> +# Created: 1993-05-16 +# Public domain. +# +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +nl=' +' +IFS=" "" $nl" +errstatus=0 +dirmode= + +usage="\ +Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... + +Create each directory DIR (with mode MODE, if specified), including all +leading file name components. + +Report bugs to <bug-automake@gnu.org>." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" + exit $? + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --version) + echo "$0 $scriptversion" + exit $? + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and +# mkdir -p a/c at the same time, both will detect that a is missing, +# one will create a, then the other will try to create a and die with +# a "File exists" error. This is a problem when calling mkinstalldirs +# from a parallel make. We use --version in the probe to restrict +# ourselves to GNU mkdir, which is thread-safe. +case $dirmode in + '') + if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + test -d ./-p && rmdir ./-p + test -d ./--version && rmdir ./--version + fi + ;; + *) + if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && + test ! -d ./--version; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + else + # Clean up after NextStep and OpenStep mkdir. + for d in ./-m ./-p ./--version "./$dirmode"; + do + test -d $d && rmdir $d + done + fi + ;; +esac + +for file +do + case $file in + /*) pathcomp=/ ;; + *) pathcomp= ;; + esac + oIFS=$IFS + IFS=/ + set fnord $file + shift + IFS=$oIFS + + for d + do + test "x$d" = x && continue + + pathcomp=$pathcomp$d + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr= + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp=$pathcomp/ + done +done + +exit $errstatus + +# 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/build-aux/texinfo.tex b/build-aux/texinfo.tex new file mode 100644 index 0000000..0eb49ce --- /dev/null +++ b/build-aux/texinfo.tex @@ -0,0 +1,9333 @@ +% 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{2010-04-23.06} +% +% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +% 2007, 2008, 2009, 2010 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\ptexraggedright=\raggedright +\let\ptexrbrace=\} +\let\ptexslash=\/ +\let\ptexstar=\* +\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\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 } + +% 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} + +% 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.} + + +% 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'. 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 +} + +% @| 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). This command +% is not documented, not supported, and doesn't work. +% +\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 + }% + }% +} + +% @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 = {}% +} + + +% @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, + % 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. + \def\rgbDarkRed{0.50 0.09 0.12} + \def\rgbBlack{0 0 0} + % + % k sets the color for filling (usual text, etc.); + % K 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\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{\rgbDarkRed} + \def\linkcolor{\rgbDarkRed} + \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\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. + % + % 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 + % 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} + \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 + + +\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} + +\textleading = 13.2pt % line spacing for 11pt CM +\textfonts % reset the current fonts +\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} + +\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 + + +% 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}} + +% 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} + +% 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 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} + +% 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\ptexslash + \fi\fi\fi} + +% like \smartslanted except unconditionally uses \ttsl, and no ic. +% @var is set to this for defun arguments. +\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} + +\let\i=\smartitalic +\let\slanted=\smartslanted +\def\var#1{\smartslanted{#1}} +\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\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 + +% @t, explicit typewriter. +\def\t#1{% + {\tt \rawbackslash \plainfrenchspacing #1}% + \null +} + +% @samp. +\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} + +% 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} + +% ctrl is no longer a Texinfo command. +\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. +\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} + +% @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 + +% 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} + +% @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} + +% @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 +} + +% @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 + } +} + + +\message{glyphs,} +% and logos. + +% @@ prints an @. +\def\@{\char64 } + +% Used to generate quoted braces. Unless we're in typewriter, use +% \ecfont because the CM text fonts do not have braces, and we don't +% want to switch into math. +\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} +\def\myrbrace{{\ifmonospace\else\ecfont\fi \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\, = \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{\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 +} + +% 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 +} + +% @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} + +% @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 ec* fonts (cm-super in outline format) for non-CM glyphs. +\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{% 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{\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\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 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}% + % + \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. \everycr 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 + \global\everytab={\bf}% can't use \headitemfont since the parsing differs + \the\everytab % for the first item +}% +% +% 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={}% + \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 unexpandable (because we define \tt as a dummy) + % definitions when @{ or @} appear in index entry text. Also, more + % complicated, when \tex is in effect and \{ is a \delimiter again. + % We can't use \lbracecmd and \rbracecmd because texindex assumes + % braces and backslashes are used only as delimiters. Perhaps we + % should define @lbrace and @rbrace commands a la @comma. + \def\{{{\tt\char123}}% + \def\}{{\tt\char125}}% + % + % 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\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\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\email + \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\DH{DZZ}% + \def\L{L}% + \def\OE{OE}% + \def\O{O}% + \def\TH{ZZZ}% + \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{zzz}% + % + \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\dots{...}% + \def\enddots{...}% + \def\equiv{==}% + \def\error{error}% + \def\euro{euro}% + \def\expansion{==>}% + \def\guillemetleft{<<}% + \def\guillemetright{>>}% + \def\guilsinglleft{<}% + \def\guilsinglright{>}% + \def\minus{-}% + \def\point{.}% + \def\pounds{pounds}% + \def\print{-|}% + \def\quotedblbase{"}% + \def\quotedblleft{"}% + \def\quotedblright{"}% + \def\quoteleft{`}% + \def\quoteright{'}% + \def\quotesinglbase{,}% + \def\registeredsymbol{R}% + \def\result{=>}% + \def\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\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 + % + % 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}% + % + % 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. + +% 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\rmisbold #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 + \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 +} + +\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\ptexraggedright + \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 + \headingsoff + \null + \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}% + % \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 \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 \ptexraggedright + \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\ptexraggedright + \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}% + % \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. + \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.) + \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\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{\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{#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}\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. + +% @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=`\\ + % + % ' 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 + % + \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. +\newdimen\nonfillparindent +\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 + % 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 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\relax + \gobble +} +\let\Eflushright = \afterenvbreak + + +% @raggedright does more-or-less normal line breaking but no right +% justification. From plain.tex. +\envdef\raggedright{% + \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax +} +\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. +% +\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\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 +% +% 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 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. +% +\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 +} + +% 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{\DH} + \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{\TH} + \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{\dh} + \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{\th} + \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{\DH} + \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{\dh} + \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{00D0}{\DH} + \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{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{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{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 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 + \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.} + +% 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 +\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/build-aux/update-copyright b/build-aux/update-copyright new file mode 100755 index 0000000..28ff441 --- /dev/null +++ b/build-aux/update-copyright @@ -0,0 +1,266 @@ +eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}' + & eval 'exec perl -wS -0777 -pi "$0" $argv:q' + if 0; +# Update an FSF copyright year list to include the current year. + +my $VERSION = '2009-12-28.11:09'; # UTC + +# Copyright (C) 2009-2010 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute 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/>. + +# Written by Jim Meyering and Joel E. Denny + +# The arguments to this script should be names of files that contain FSF +# copyright statements to be updated. For example, you might wish to +# use the update-copyright target rule in maint.mk from gnulib's +# maintainer-makefile module. +# +# Iff an FSF copyright statement is recognized in a file and the final +# year is not the current year, then the statement is updated for the +# new year and it is reformatted to: +# +# 1. Fit within 72 columns. +# 2. Convert 2-digit years to 4-digit years by prepending "19". +# 3. Expand copyright year intervals. (See "Environment variables" +# below.) +# +# A warning is printed for every file for which no FSF copyright +# statement is recognized. +# +# Each file's FSF copyright statement must be formated correctly in +# order to be recognized. For example, each of these is fine: +# +# Copyright @copyright{} 1990-2005, 2007-2009 Free Software +# Foundation, Inc. +# +# # Copyright (C) 1990-2005, 2007-2009 Free Software +# # Foundation, Inc. +# +# /* +# * Copyright © 90,2005,2007-2009 +# * Free Software Foundation, Inc. +# */ +# +# However, the following format is not recognized because the line +# prefix changes after the first line: +# +# ## Copyright (C) 1990-2005, 2007-2009 Free Software +# # Foundation, Inc. +# +# The following copyright statement is not recognized because the +# copyright holder is not the FSF: +# +# Copyright (C) 1990-2005, 2007-2009 Acme, Inc. +# +# However, any correctly formatted FSF copyright statement following +# either of the previous two copyright statements would be recognized. +# +# The exact conditions that a file's FSF copyright statement must meet +# to be recognized are: +# +# 1. It is the first FSF copyright statement that meets all of the +# following conditions. Subsequent FSF copyright statements are +# ignored. +# 2. Its format is "Copyright (C)", then a list of copyright years, +# and then the name of the copyright holder, which is "Free +# Software Foundation, Inc.". +# 3. The "(C)" takes one of the following forms or is omitted +# entirely: +# +# A. (C) +# B. (c) +# C. @copyright{} +# D. © +# +# 4. The "Copyright" appears at the beginning of a line except that it +# may be prefixed by any sequence (e.g., a comment) of no more than +# 5 characters. +# 5. Iff such a prefix is present, the same prefix appears at the +# beginning of each remaining line within the FSF copyright +# statement. There is one exception in order to support C-style +# comments: if the first line's prefix contains nothing but +# whitespace surrounding a "/*", then the prefix for all subsequent +# lines is the same as the first line's prefix except with each of +# "/" and possibly "*" replaced by a " ". The replacement of "*" +# by " " is consistent throughout all subsequent lines. +# 6. Blank lines, even if preceded by the prefix, do not appear +# within the FSF copyright statement. +# 7. Each copyright year is 2 or 4 digits, and years are separated by +# commas or dashes. Whitespace may appear after commas. +# +# Environment variables: +# +# 1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement +# is reformatted even if it does not need updating for the new +# year. If unset or set to 0, only updated FSF copyright +# statements are reformatted. +# 2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive +# copyright years (such as 90, 1991, 1992-2007, 2008) in a +# reformatted FSF copyright statement is collapsed to a single +# interval (such as 1990-2008). If unset or set to 0, all existing +# copyright year intervals in a reformatted FSF copyright statement +# are expanded instead. +# 3. For testing purposes, you can set the assumed current year in +# UPDATE_COPYRIGHT_YEAR. +# 4. The default maximum line length for a copyright line is 72. +# Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length. + +use strict; +use warnings; + +my $copyright_re = 'Copyright'; +my $circle_c_re = '(?:\([cC]\)|@copyright{}|©)'; +my $holder = 'Free Software Foundation, Inc.'; +my $prefix_max = 5; +my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH}; +!$margin || $margin !~ m/^\d+$/ + and $margin = 72; + +my $tab_width = 8; + +my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR}; +if (!$this_year || $this_year !~ m/^\d{4}$/) + { + my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ()); + $this_year = $year + 1900; + } + +# Unless the file consistently uses "\r\n" as the EOL, use "\n" instead. +my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n"; + +my $leading; +my $prefix; +my $ws_re; +my $stmt_re; +while (/(^|\n)(.{0,$prefix_max})$copyright_re/g) + { + $leading = "$1$2"; + $prefix = $2; + if ($prefix =~ /^(\s*\/)\*(\s*)$/) + { + $prefix =~ s,/, ,; + my $prefix_ws = $prefix; + $prefix_ws =~ s/\*/ /; # Only whitespace. + if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/) + { + $prefix = $prefix_ws; + } + } + $ws_re = '[ \t\r\f]'; # \s without \n + $ws_re = + "(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)"; + my $holder_re = $holder; + $holder_re =~ s/\s/$ws_re/g; + my $stmt_remainder_re = + "(?:$ws_re$circle_c_re)?" + . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|-))*" + . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re"; + if (/\G$stmt_remainder_re/) + { + $stmt_re = + quotemeta($leading) . "($copyright_re$stmt_remainder_re)"; + last; + } + } +if (defined $stmt_re) + { + /$stmt_re/ or die; # Should never die. + my $stmt = $1; + my $final_year_orig = $2; + + # Handle two-digit year numbers like "98" and "99". + my $final_year = $final_year_orig; + $final_year <= 99 + and $final_year += 1900; + + if ($final_year != $this_year) + { + # Update the year. + $stmt =~ s/$final_year_orig/$final_year, $this_year/; + } + if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'}) + { + # Normalize all whitespace including newline-prefix sequences. + $stmt =~ s/$ws_re/ /g; + + # Put spaces after commas. + $stmt =~ s/, ?/, /g; + + # Convert 2-digit to 4-digit years. + $stmt =~ s/(\b\d\d\b)/19$1/g; + + # Make the use of intervals consistent. + if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS}) + { + $stmt =~ s/(\d{4})-(\d{4})/join(', ', $1..$2)/eg; + } + else + { + $stmt =~ + s/ + (\d{4}) + (?: + (,\ |-) + ((??{ + if ($2 eq '-') { '\d{4}'; } + elsif (!$3) { $1 + 1; } + else { $3 + 1; } + })) + )+ + /$1-$3/gx; + } + + # Format within margin. + my $stmt_wrapped; + my $text_margin = $margin - length($prefix); + if ($prefix =~ /^(\t+)/) + { + $text_margin -= length($1) * ($tab_width - 1); + } + while (length $stmt) + { + if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//) + || ($stmt =~ s/^([\S]+)(?: |$)//)) + { + my $line = $1; + $stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading; + $stmt_wrapped .= $line; + } + else + { + # Should be unreachable, but we don't want an infinite + # loop if it can be reached. + die; + } + } + + # Replace the old copyright statement. + s/$stmt_re/$stmt_wrapped/; + } + } +else + { + print STDERR "$ARGV: warning: FSF copyright statement not found\n"; + } + +# Local variables: +# mode: perl +# indent-tabs-mode: nil +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "my $VERSION = '" +# time-stamp-format: "%:y-%02m-%02d.%02H:%02M" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "'; # UTC" +# End: diff --git a/build-aux/useless-if-before-free b/build-aux/useless-if-before-free new file mode 100755 index 0000000..6aa7d39 --- /dev/null +++ b/build-aux/useless-if-before-free @@ -0,0 +1,209 @@ +eval '(exit $?0)' && eval 'exec perl -wST "$0" ${1+"$@"}' + & eval 'exec perl -wST "$0" $argv:q' + if 0; +# Detect instances of "if (p) free (p);". +# Likewise for "if (p != NULL) free (p);". And with braces. +# Also detect "if (NULL != p) free (p);". +# And with 0 in place of NULL. + +my $VERSION = '2009-04-16 15:57'; # 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-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +# Written by Jim Meyering + +use strict; +use warnings; +use Getopt::Long; + +(my $ME = $0) =~ s|.*/||; + +# use File::Coda; # http://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>)) + { + while ($line =~ + /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\) + # 1 2 3 + (?: \s*$regexp\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*\))/$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 'write-file-hooks 'time-stamp) +## time-stamp-start: "my $VERSION = '" +## time-stamp-format: "%:y-%02m-%02d %02H:%02M" +## time-stamp-time-zone: "UTC" +## time-stamp-end: "'; # UTC" +## End: diff --git a/build-aux/vc-list-files b/build-aux/vc-list-files new file mode 100755 index 0000000..48a33ee --- /dev/null +++ b/build-aux/vc-list-files @@ -0,0 +1,118 @@ +#!/bin/sh +# List version-controlled file names. + +# Print a version string. +scriptversion=2010-04-23.22; # UTC + +# Copyright (C) 2006-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + + +# 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 <http://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 + +dir= +case $# in + 0) ;; + 1) dir=$1 ;; + *) echo "$0: too many arguments" 1>&2 + echo "Usage: $0 [-C srcdir] [DIR]" 1>&2; exit 1;; +esac + +test "x$dir" = x && dir=. + +if test -d .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 + +# 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/build-aux/warn-on-use.h b/build-aux/warn-on-use.h new file mode 100644 index 0000000..7b42432 --- /dev/null +++ b/build-aux/warn-on-use.h @@ -0,0 +1,111 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General 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/>. */ + +/* _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. + + This macro is 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. 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 inline 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 + */ +#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))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# 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/cfg.mk b/cfg.mk new file mode 100644 index 0000000..fcebfab --- /dev/null +++ b/cfg.mk @@ -0,0 +1,64 @@ +# Customize maint.mk -*- makefile -*- +# Copyright (C) 2003-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +# Used in maint.mk's web-manual rule +manual_title = Comparing and Merging Files + +# Tests not to run as part of "make distcheck". +local-checks-to-skip = \ + sc_error_message_period \ + sc_error_message_uppercase \ + sc_texinfo_acronym + +# Tools used to bootstrap this package, used for "announcement". +bootstrap-tools = autoconf,automake,gnulib + +# Now that we have better tests, make this the default. +export VERBOSE = yes + +old_NEWS_hash = 5ce999f299bd2e9f44cbfef49015b45f + +# Tell maint.mk's syntax-check rules that diff gets config.h directly or +# via diff.h or system.h. +config_h_header = (<config\.h>|"(diff|system)\.h") + +update-copyright-env = \ + UPDATE_COPYRIGHT_USE_INTERVALS=1 \ + UPDATE_COPYRIGHT_MAX_LINE_LENGTH=79 + +include $(srcdir)/dist-check.mk + +_cf_state_dir ?= .config-state +_date_time := $(shell date +%F.%T) +config-compare: + diff -u \ + -I'define VERSION ' \ + -I'define PACKAGE_VERSION ' \ + -I'define PACKAGE_STRING ' \ + $(_cf_state_dir)/latest lib/config.h + diff -u \ + -I'$(PACKAGE_NAME)' \ + -I'[SD]\["VERSION"\]' \ + -I'[SD]\["PACKAGE_VERSION"\]' \ + -I'D\["PACKAGE_STRING"\]' \ + $(_cf_state_dir)/latest config.status + +config-save: + $(MAKE) --quiet config-compare > /dev/null 2>&1 \ + && { echo no change; exit 1; } || : + mkdir -p $(_cf_state_dir)/$(_date_time) + ln -nsf $(date_time) $(_cf_state_dir)/latest + cp lib/config.h config.status $(_cf_state_dir)/latest diff --git a/configure b/configure new file mode 100755 index 0000000..fb122c0 --- /dev/null +++ b/configure @@ -0,0 +1,31625 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.65.57-45695 for GNU diffutils 3.0. +# +# Report bugs to <bug-diffutils@gnu.org>. +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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. +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 + +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" + 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" + 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 : + # 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. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +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-diffutils@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_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; } + + # 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 -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +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 + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# 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'" + + +test -n "$DJDIR" || exec 7<&0 </dev/null +exec 6>&1 + +# Name of the host. +# hostname on some systems (SVR3.2, 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 diffutils' +PACKAGE_TARNAME='diffutils' +PACKAGE_VERSION='3.0' +PACKAGE_STRING='GNU diffutils 3.0' +PACKAGE_BUGREPORT='bug-diffutils@gnu.org' +PACKAGE_URL='http://www.gnu.org/software/diffutils/' + +ac_unique_file="src/diff.c" +# 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_func_list= +gl_header_list= +gl_fnmatch_required=POSIX +gl_getopt_required=POSIX +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 +POSUB +INTLLIBS +INTL_MACOSX_LIBS +XGETTEXT_EXTRA_OPTIONS +MSGMERGE +XGETTEXT_015 +XGETTEXT +GMSGFMT_015 +MSGFMT_015 +GMSGFMT +MSGFMT +GETTEXT_MACRO_VERSION +USE_NLS +PR_PROGRAM +GNULIB_WARN_CFLAGS +WERROR_CFLAGS +LIBTESTS_LIBDEPS +LIBDIFFUTILS_LTLIBDEPS +LIBDIFFUTILS_LIBDEPS +abs_aux_dir +LOCALE_TR_UTF8 +gltests_WITNESS +REPLACE_ISWCNTRL +HAVE_WCTYPE_H +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H +NEXT_WCTYPE_H +HAVE_ISWBLANK +HAVE_ISWCNTRL +HAVE_WINT_T +HAVE_WCHAR_H +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H +NEXT_WCHAR_H +WARN_CFLAGS +HAVE_UNISTD_H +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H +NEXT_UNISTD_H +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 +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H +NEXT_SYS_STAT_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_RANDOM_H +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H +NEXT_STDLIB_H +NEXT_AS_FIRST_DIRECTIVE_STDIO_H +NEXT_STDIO_H +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H +NEXT_STDDEF_H +STDDEF_H +HAVE_WCHAR_T +REPLACE_NULL +NEXT_AS_FIRST_DIRECTIVE_STDARG_H +NEXT_STDARG_H +STDARG_H +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H +NEXT_SIGNAL_H +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T +HAVE_STRUCT_SIGACTION_SA_SIGACTION +HAVE_SIGACTION +HAVE_SIGINFO_T +HAVE_SIGSET_T +HAVE_POSIX_SIGNALBLOCKING +GNULIB_SIGACTION +GNULIB_SIGPROCMASK +GNULIB_SIGNAL_H_SIGPIPE +REPLACE_TIMEGM +REPLACE_NANOSLEEP +REPLACE_MKTIME +REPLACE_LOCALTIME_R +HAVE_TIMEGM +HAVE_STRPTIME +HAVE_NANOSLEEP +HAVE_LOCALTIME_R +GNULIB_TIME_R +GNULIB_TIMEGM +GNULIB_STRPTIME +GNULIB_NANOSLEEP +GNULIB_MKTIME +UNDEFINE_STRTOK_R +REPLACE_STRTOK_R +REPLACE_STRSIGNAL +REPLACE_STRNLEN +REPLACE_STRNDUP +REPLACE_STRNCAT +REPLACE_STRERROR +REPLACE_STRCASESTR +REPLACE_STRSTR +REPLACE_STRDUP +REPLACE_STPNCPY +REPLACE_MEMMEM +REPLACE_MEMCHR +HAVE_STRVERSCMP +HAVE_DECL_STRSIGNAL +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_MBSLEN +GNULIB_STRVERSCMP +GNULIB_STRSIGNAL +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 +LOCALE_FR_UTF8 +LOCALE_ZH_CN +LOCALE_JA +REPLACE_UNSETENV +REPLACE_STRTOD +REPLACE_SETENV +REPLACE_REALPATH +REPLACE_PUTENV +REPLACE_MKSTEMP +REPLACE_CANONICALIZE_FILE_NAME +HAVE_UNSETENV +HAVE_UNLOCKPT +HAVE_SYS_LOADAVG_H +HAVE_STRUCT_RANDOM_DATA +HAVE_STRTOULL +HAVE_STRTOLL +HAVE_STRTOD +HAVE_SETENV +HAVE_RPMATCH +HAVE_REALPATH +HAVE_REALLOC_POSIX +HAVE_RANDOM_R +HAVE_PTSNAME +HAVE_MKSTEMPS +HAVE_MKSTEMP +HAVE_MKOSTEMPS +HAVE_MKOSTEMP +HAVE_MKDTEMP +HAVE_GRANTPT +HAVE_GETSUBOPT +HAVE_DECL_GETLOADAVG +HAVE_CANONICALIZE_FILE_NAME +HAVE_CALLOC_POSIX +HAVE_ATOLL +GNULIB_UNSETENV +GNULIB_UNLOCKPT +GNULIB_STRTOULL +GNULIB_STRTOLL +GNULIB_STRTOD +GNULIB_SETENV +GNULIB_RPMATCH +GNULIB_REALPATH +GNULIB_REALLOC_POSIX +GNULIB_RANDOM_R +GNULIB_PUTENV +GNULIB_PTSNAME +GNULIB_MKSTEMPS +GNULIB_MKSTEMP +GNULIB_MKOSTEMPS +GNULIB_MKOSTEMP +GNULIB_MKDTEMP +GNULIB_MALLOC_POSIX +GNULIB_GRANTPT +GNULIB_GETSUBOPT +GNULIB_GETLOADAVG +GNULIB_CANONICALIZE_FILE_NAME +GNULIB_CALLOC_POSIX +GNULIB_ATOLL +HAVE_MALLOC_POSIX +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_UTIMENSAT +GNULIB_STAT +GNULIB_MKNODAT +GNULIB_MKNOD +GNULIB_MKFIFOAT +GNULIB_MKFIFO +GNULIB_MKDIRAT +GNULIB_LSTAT +GNULIB_LCHMOD +GNULIB_FUTIMENS +GNULIB_FSTATAT +GNULIB_FCHMODAT +LOCALCHARSET_TESTS_ENVIRONMENT +GLIBC21 +HAVE_LANGINFO_ERA +HAVE_LANGINFO_CODESET +HAVE_LANGINFO_H +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H +NEXT_LANGINFO_H +REPLACE_NL_LANGINFO +HAVE_NL_LANGINFO +GNULIB_NL_LANGINFO +UINT64_MAX_EQ_ULONG_MAX +UINT32_MAX_LT_UINTMAX_MAX +INT64_MAX_EQ_LONG_MAX +INT32_MAX_LT_INTMAX_MAX +PRIPTR_PREFIX +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H +NEXT_INTTYPES_H +HAVE_DECL_STRTOUMAX +HAVE_DECL_STRTOIMAX +HAVE_DECL_IMAXDIV +HAVE_DECL_IMAXABS +GNULIB_STRTOUMAX +GNULIB_STRTOIMAX +GNULIB_IMAXDIV +GNULIB_IMAXABS +PRI_MACROS_BROKEN +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 +APPLE_UNIVERSAL_BUILD +HAVE_SYS_BITYPES_H +HAVE_SYS_INTTYPES_H +HAVE_STDINT_H +NEXT_AS_FIRST_DIRECTIVE_STDINT_H +NEXT_STDINT_H +HAVE_SYS_TYPES_H +HAVE_INTTYPES_H +HAVE_UNSIGNED_LONG_LONG_INT +HAVE_LONG_LONG_INT +NEXT_AS_FIRST_DIRECTIVE_ICONV_H +NEXT_ICONV_H +ICONV_H +REPLACE_ICONV_UTF +REPLACE_ICONV_OPEN +REPLACE_ICONV +LTLIBICONV +LIBICONV +HAVE__BOOL +STDBOOL_H +GNU_MAKE_FALSE +GNU_MAKE_TRUE +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H +NEXT_SYS_TIME_H +REPLACE_GETTIMEOFDAY +HAVE_SYS_TIME_H +HAVE_STRUCT_TIMEVAL +HAVE_GETTIMEOFDAY +GNULIB_GETTIMEOFDAY +LTLIBINTL +LIBINTL +GETOPT_H +HAVE_GETOPT_H +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H +NEXT_GETOPT_H +REPLACE_VSPRINTF +REPLACE_VSNPRINTF +REPLACE_VPRINTF +REPLACE_VFPRINTF +REPLACE_VDPRINTF +REPLACE_VASPRINTF +REPLACE_TMPFILE +REPLACE_STDIO_WRITE_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_FCLOSE +REPLACE_DPRINTF +HAVE_VDPRINTF +HAVE_VASPRINTF +HAVE_RENAMEAT +HAVE_FTELLO +HAVE_FSEEKO +HAVE_DPRINTF +HAVE_DECL_VSNPRINTF +HAVE_DECL_SNPRINTF +HAVE_DECL_OBSTACK_PRINTF +HAVE_DECL_GETLINE +HAVE_DECL_GETDELIM +HAVE_DECL_FPURGE +GNULIB_VSPRINTF_POSIX +GNULIB_VSNPRINTF +GNULIB_VPRINTF_POSIX +GNULIB_VPRINTF +GNULIB_VFPRINTF_POSIX +GNULIB_VFPRINTF +GNULIB_VDPRINTF +GNULIB_VASPRINTF +GNULIB_TMPFILE +GNULIB_STDIO_H_SIGPIPE +GNULIB_SPRINTF_POSIX +GNULIB_SNPRINTF +GNULIB_RENAMEAT +GNULIB_RENAME +GNULIB_REMOVE +GNULIB_PUTS +GNULIB_PUTCHAR +GNULIB_PUTC +GNULIB_PRINTF_POSIX +GNULIB_PRINTF +GNULIB_POPEN +GNULIB_PERROR +GNULIB_OBSTACK_PRINTF_POSIX +GNULIB_OBSTACK_PRINTF +GNULIB_GETLINE +GNULIB_GETDELIM +GNULIB_FWRITE +GNULIB_FTELLO +GNULIB_FTELL +GNULIB_FSEEKO +GNULIB_FSEEK +GNULIB_FREOPEN +GNULIB_FPUTS +GNULIB_FPUTC +GNULIB_FPURGE +GNULIB_FPRINTF_POSIX +GNULIB_FPRINTF +GNULIB_FOPEN +GNULIB_FFLUSH +GNULIB_FCLOSE +GNULIB_DPRINTF +FNMATCH_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_FCNTL +EOVERFLOW_VALUE +EOVERFLOW_HIDDEN +ENOLINK_VALUE +ENOLINK_HIDDEN +EMULTIHOP_VALUE +EMULTIHOP_HIDDEN +ERRNO_H +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H +NEXT_ERRNO_H +PRAGMA_SYSTEM_HEADER +INCLUDE_NEXT_AS_FIRST_DIRECTIVE +INCLUDE_NEXT +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_SYMLINK +REPLACE_SLEEP +REPLACE_RMDIR +REPLACE_READLINK +REPLACE_PREAD +REPLACE_LSEEK +REPLACE_LINKAT +REPLACE_LINK +REPLACE_LCHOWN +REPLACE_GETPAGESIZE +REPLACE_GETGROUPS +REPLACE_GETCWD +REPLACE_FCHOWNAT +REPLACE_DUP2 +REPLACE_DUP +REPLACE_CLOSE +REPLACE_CHOWN +HAVE_SYS_PARAM_H +HAVE_OS_H +HAVE_DECL_GETUSERSHELL +HAVE_DECL_GETPAGESIZE +HAVE_DECL_GETLOGIN_R +HAVE_DECL_ENVIRON +HAVE_USLEEP +HAVE_UNLINKAT +HAVE_TTYNAME_R +HAVE_SYMLINKAT +HAVE_SYMLINK +HAVE_SLEEP +HAVE_READLINKAT +HAVE_READLINK +HAVE_PREAD +HAVE_PIPE2 +HAVE_LINKAT +HAVE_LINK +HAVE_LCHOWN +HAVE_GETPAGESIZE +HAVE_GETLOGIN +HAVE_GETHOSTNAME +HAVE_GETGROUPS +HAVE_GETDTABLESIZE +HAVE_GETDOMAINNAME +HAVE_FTRUNCATE +HAVE_FSYNC +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_GETOPT +GNULIB_TTYNAME_R +GNULIB_SYMLINKAT +GNULIB_SYMLINK +GNULIB_SLEEP +GNULIB_RMDIR +GNULIB_READLINKAT +GNULIB_READLINK +GNULIB_PREAD +GNULIB_PIPE2 +GNULIB_LSEEK +GNULIB_LINKAT +GNULIB_LINK +GNULIB_LCHOWN +GNULIB_GETUSERSHELL +GNULIB_GETPAGESIZE +GNULIB_GETLOGIN_R +GNULIB_GETLOGIN +GNULIB_GETHOSTNAME +GNULIB_GETGROUPS +GNULIB_GETDTABLESIZE +GNULIB_GETDOMAINNAME +GNULIB_GETCWD +GNULIB_FTRUNCATE +GNULIB_FSYNC +GNULIB_FCHOWNAT +GNULIB_FCHDIR +GNULIB_FACCESSAT +GNULIB_EUIDACCESS +GNULIB_ENVIRON +GNULIB_DUP3 +GNULIB_DUP2 +GNULIB_CLOSE +GNULIB_CHOWN +LIB_CLOCK_GETTIME +LTLIBCSTACK +LIBCSTACK +LIBSIGSEGV_PREFIX +LTLIBSIGSEGV +LIBSIGSEGV +HAVE_LIBSIGSEGV +LOCALE_FR +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_WCSNRTOMBS +HAVE_WCSRTOMBS +HAVE_WCRTOMB +HAVE_MBSNRTOWCS +HAVE_MBSRTOWCS +HAVE_MBRLEN +HAVE_MBRTOWC +HAVE_MBSINIT +HAVE_BTOWC +GNULIB_WCWIDTH +GNULIB_WCSNRTOMBS +GNULIB_WCSRTOMBS +GNULIB_WCRTOMB +GNULIB_MBSNRTOWCS +GNULIB_MBSRTOWCS +GNULIB_MBRLEN +GNULIB_MBRTOWC +GNULIB_MBSINIT +GNULIB_WCTOB +GNULIB_BTOWC +ALLOCA_H +ALLOCA +GL_COND_LIBTOOL_FALSE +GL_COND_LIBTOOL_TRUE +EGREP +GREP +CPP +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +RANLIB +HELP2MAN +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 +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +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 +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 +with_gnu_ld +enable_rpath +with_libsigsegv_prefix +with_libiconv_prefix +with_included_regex +with_packager +with_packager_version +with_packager_bug_reports +enable_gcc_warnings +enable_nls +with_libintl_prefix +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# 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' +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=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 ;; + + -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 +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 + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + 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 diffutils 3.0 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] + --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/diffutils] + --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 diffutils 3.0:";; + 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') + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --disable-largefile omit support for large files + --disable-rpath do not hardcode runtime library paths + --enable-gcc-warnings turn on lots of GCC warnings (for developers) + --disable-nls do not use Native Language Support + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld default=no + --with-libsigsegv-prefix[=DIR] search for libsigsegv in DIR/include and DIR/lib + --without-libsigsegv-prefix don't search for libsigsegv in includedir and libdir + --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 + --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). + --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-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 + +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-diffutils@gnu.org>. +GNU diffutils home page: <http://www.gnu.org/software/diffutils/>. +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 diffutils configure 3.0 +generated by GNU Autoconf 2.65.57-45695 + +Copyright (C) 2010 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; test "x$as_lineno_stack" = x && { as_lineno=; 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; } >/dev/null && { + 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; test "x$as_lineno_stack" = x && { as_lineno=; 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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.$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;} +( cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-diffutils@gnu.org ## +## ------------------------------------ ## +_ASBOX + ) | 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; 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; test "x$as_lineno_stack" = x && { as_lineno=; 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; 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 || + $as_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; test "x$as_lineno_stack" = x && { as_lineno=; 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + +# 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_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 +$as_echo_n "checking whether $2 is declared... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $2 + (void) $2; +#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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_decl + +# 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; 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 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 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 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 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 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_compute_int + +# 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 { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; 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 diffutils $as_me 3.0, which was +generated by GNU Autoconf 2.65.57-45695. 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 + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + 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 + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + 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 + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + 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 + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + 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 + ac_site_file1=$CONFIG_SITE +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" + 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 + +gl_func_list="$gl_func_list btowc" +gl_func_list="$gl_func_list setrlimit" +gl_header_list="$gl_header_list ucontext.h" +gl_func_list="$gl_func_list sigaltstack" +gl_header_list="$gl_header_list unistd.h" +gl_func_list="$gl_func_list dup2" +gl_header_list="$gl_header_list errno.h" +gl_func_list="$gl_func_list fcntl" +gl_header_list="$gl_header_list fcntl.h" +gl_func_list="$gl_func_list isblank" +gl_func_list="$gl_func_list iswctype" +gl_func_list="$gl_func_list mbsrtowcs" +gl_func_list="$gl_func_list mempcpy" +gl_func_list="$gl_func_list wmemchr" +gl_func_list="$gl_func_list wmemcpy" +gl_func_list="$gl_func_list wmempcpy" +gl_header_list="$gl_header_list wctype.h" +gl_fnmatch_required=GNU +gl_func_list="$gl_func_list getdtablesize" +gl_getopt_required=GNU +gl_header_list="$gl_header_list getopt.h" +gl_func_list="$gl_func_list gettimeofday" +gl_func_list="$gl_func_list nanotime" +gl_header_list="$gl_header_list sys/time.h" +gl_header_list="$gl_header_list iconv.h" +gl_header_list="$gl_header_list stdint.h" +gl_header_list="$gl_header_list wchar.h" +gl_header_list="$gl_header_list inttypes.h" +gl_header_list="$gl_header_list langinfo.h" +gl_func_list="$gl_func_list lstat" +gl_func_list="$gl_func_list mbsinit" +gl_func_list="$gl_func_list mbrtowc" +gl_func_list="$gl_func_list mbrlen" +gl_func_list="$gl_func_list mbslen" +gl_header_list="$gl_header_list sys/mman.h" +gl_func_list="$gl_func_list mprotect" +gl_func_list="$gl_func_list memchr" +gl_func_list="$gl_func_list mkstemp" +gl_func_list="$gl_func_list alarm" +gl_func_list="$gl_func_list nl_langinfo" +gl_header_list="$gl_header_list locale.h" +gl_func_list="$gl_func_list wcscoll" +gl_func_list="$gl_func_list sigaction" +gl_func_list="$gl_func_list siginterrupt" +gl_header_list="$gl_header_list signal.h" +gl_header_list="$gl_header_list stdarg.h" +gl_header_list="$gl_header_list stddef.h" +gl_header_list="$gl_header_list stdio.h" +gl_header_list="$gl_header_list stdlib.h" +gl_header_list="$gl_header_list sys/socket.h" +gl_func_list="$gl_func_list tzset" +gl_header_list="$gl_header_list string.h" +gl_header_list="$gl_header_list strings.h" +gl_func_list="$gl_func_list strndup" +gl_func_list="$gl_func_list strptime" +gl_header_list="$gl_header_list sys/stat.h" +gl_header_list="$gl_header_list sys/wait.h" +gl_header_list="$gl_header_list time.h" +gl_func_list="$gl_func_list localtime_r" +gl_func_list="$gl_func_list timegm" +gl_func_list="$gl_func_list wcrtomb" +gl_func_list="$gl_func_list iswcntrl" +gl_func_list="$gl_func_list iswblank" +gl_func_list="$gl_func_list wcwidth" +gl_func_list="$gl_func_list pathconf" +gl_header_list="$gl_header_list sys/param.h" +gl_func_list="$gl_func_list setenv" +gl_func_list="$gl_func_list sleep" +gl_func_list="$gl_func_list symlink" +gl_func_list="$gl_func_list usleep" +gl_func_list="$gl_func_list wctob" +gl_func_list="$gl_func_list sigprocmask" +gl_func_list="$gl_func_list strcasecoll" +gl_func_list="$gl_func_list stricoll" +gt_needs="$gt_needs need-ngettext" +# 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.11a' + +# 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 test "${ac_cv_path_install+set}" = set; 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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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 ( + for am_try in 1 2; do + echo timestamp > 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 + rm -f conftest.file + 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 + 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; } +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 --run true"; then + am_missing_run="$MISSING --run " +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}" != 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 test "${ac_cv_prog_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_path_mkdir+set}" = set; 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 + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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; } + + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +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 test "${ac_cv_prog_AWK+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; 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 + +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='diffutils' + VERSION='3.0' + + +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"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +# 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=0;; +esac +AM_BACKSLASH='\' + # make --enable-silent-rules the default. + +ac_config_headers="$ac_config_headers lib/config.h:lib/config.hin" + + +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 test "${ac_cv_prog_AWK+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + +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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_objext+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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> +#include <sys/types.h> +#include <sys/stat.h> +/* 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 +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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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'. + 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 8's {/usr,}/bin/sh. + touch 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 + ;; + 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 +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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + +{ $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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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> +#include <sys/types.h> +#include <sys/stat.h> +/* 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 + +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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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'. + 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 8's {/usr,}/bin/sh. + touch 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 + ;; + 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 + + + +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc + + +HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"} + +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 test "${ac_cv_prog_RANLIB+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + +if test "x$CC" != xcc; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $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; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; 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. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { { 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; } && + test -f conftest2.$ac_objext && { { 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 + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&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_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { { 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; } && + test -f conftest2.$ac_objext && { { 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 + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; 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; } + +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != 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 + + +# 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 test "${ac_cv_build+set}" = set; 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 test "${ac_cv_host+set}" = set; 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 + + + +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 test "${ac_cv_prog_CPP+set}" = set; 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.$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.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f 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.$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.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f 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 test "${ac_cv_path_GREP+set}" = set; 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" + { test -f "$ac_path_GREP" && $as_test_x "$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 test "${ac_cv_path_EGREP+set}" = set; 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" + { test -f "$ac_path_EGREP" && $as_test_x "$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 test "${ac_cv_header_stdc+set}" = set; 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 +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = 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" = x""yes; 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 + + fi + + case "$host_os" in + hpux*) + +$as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h + + ;; + esac + + + { $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 test "${ac_cv_safe_to_define___extensions__+set}" = set; 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 _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + + + + + + + + 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 test "${ac_cv_prog_cc_c99+set}" = set; 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 -xc99=all -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 test "${ac_cv_prog_cc_c89+set}" = set; 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> +#include <sys/types.h> +#include <sys/stat.h> +/* 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 test "${ac_cv_prog_cc_stdc+set}" = set; 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 + + + + + # Code from module alloca: + # Code from module alloca-opt: + # Code from module alloca-opt-tests: + # Code from module announce-gen: + # Code from module arg-nonnull: + # Code from module argmatch: + # Code from module argmatch-tests: + # Code from module binary-io: + # Code from module binary-io-tests: + # Code from module bitrotate: + # Code from module bitrotate-tests: + # Code from module btowc: + # Code from module btowc-tests: + # Code from module c++defs: + # Code from module c-ctype: + # Code from module c-ctype-tests: + # Code from module c-stack: + # Code from module c-stack-tests: + # Code from module c-strcase: + # Code from module c-strcase-tests: + # Code from module clock-time: + # Code from module config-h: + # Code from module configmake: + # Code from module diffseq: + # Code from module dirname: + # Code from module dirname-lgpl: + # Code from module dirname-tests: + # Code from module do-release-commit-and-tag: + # Code from module double-slash-root: + # Code from module dup2: + # Code from module dup2-tests: + # Code from module environ: + # Code from module environ-tests: + # Code from module errno: + # Code from module errno-tests: + # Code from module error: + # Code from module exclude: + # Code from module exclude-tests: + # Code from module exit: + # Code from module exitfail: + # Code from module extensions: + + # Code from module fcntl: + # Code from module fcntl-h: + # Code from module fcntl-h-tests: + # Code from module fcntl-tests: + # Code from module fdl: + # Code from module file-type: + # Code from module fnmatch: + # Code from module fnmatch-gnu: + # Code from module fnmatch-tests: + # Code from module freopen: + # Code from module freopen-safer: + # Code from module freopen-safer-tests: + # Code from module freopen-tests: + # Code from module gendocs: + # Code from module getdtablesize: + # Code from module getdtablesize-tests: + # Code from module getopt: + # Code from module getopt-gnu: + # Code from module getopt-posix: + # Code from module getopt-posix-tests: + # Code from module gettext: + # Code from module gettext-h: + # Code from module gettime: + # Code from module gettimeofday: + # Code from module gettimeofday-tests: + # Code from module git-version-gen: + # Code from module gitlog-to-changelog: + # Code from module gnu-make: + # Code from module gnu-web-doc-update: + # Code from module gnumakefile: + # Code from module gnupload: + # Code from module gperf: + # Code from module hard-locale: + # Code from module hash: + # Code from module hash-pjw: + # Code from module hash-tests: + # Code from module havelib: + # Code from module iconv: + # Code from module iconv-h: + # Code from module iconv-h-tests: + # Code from module iconv-tests: + # Code from module iconv_open: + # Code from module ignore-value: + # Code from module include_next: + # Code from module inline: + # Code from module intprops: + # Code from module inttostr: + # Code from module inttypes: + # Code from module inttypes-tests: + # Code from module langinfo: + # Code from module langinfo-tests: + # Code from module libsigsegv: + # Code from module localcharset: + # Code from module lstat: + # Code from module lstat-tests: + # Code from module maintainer-makefile: + # Code from module malloc: + # Code from module malloc-posix: + # Code from module malloca: + # Code from module malloca-tests: + # Code from module manywarnings: + # Code from module mbchar: + # Code from module mbiter: + # Code from module mbrlen: + # Code from module mbrtowc: + # Code from module mbrtowc-tests: + # Code from module mbscasecmp: + # Code from module mbscasecmp-tests: + # Code from module mbsinit: + # Code from module mbsinit-tests: + # Code from module mbslen: + # Code from module mbsrtowcs: + # Code from module mbsrtowcs-tests: + # Code from module mbsstr: + # Code from module mbsstr-tests: + # Code from module mbuiter: + # Code from module memchr: + # Code from module memchr-tests: + # Code from module mkstemp: + # Code from module mktime: + # Code from module multiarch: + # Code from module nl_langinfo: + # Code from module nl_langinfo-tests: + # Code from module open: + # Code from module open-tests: + # Code from module pathmax: + # Code from module progname: + # Code from module propername: + # Code from module putenv: + # Code from module quote: + # Code from module quotearg: + # Code from module quotearg-tests: + # Code from module regex: + # Code from module same-inode: + # Code from module setenv: + # Code from module setenv-tests: + # Code from module sh-quote: + # Code from module sigaction: + # Code from module sigaction-tests: + # Code from module signal: + # Code from module signal-tests: + # Code from module sigprocmask: + # Code from module sleep: + # Code from module sleep-tests: + # Code from module ssize_t: + # Code from module stat: + # Code from module stat-macros: + # Code from module stat-tests: + # Code from module stat-time: + # Code from module stat-time-tests: + # Code from module stdarg: + + # Code from module stdbool: + # Code from module stdbool-tests: + # Code from module stddef: + # Code from module stddef-tests: + # Code from module stdint: + # Code from module stdint-tests: + # Code from module stdio: + # Code from module stdio-tests: + # Code from module stdlib: + # Code from module stdlib-tests: + # Code from module strcase: + # Code from module streq: + # Code from module strerror: + # Code from module strerror-tests: + # Code from module strftime: + # Code from module striconv: + # Code from module striconv-tests: + # Code from module string: + # Code from module string-tests: + # Code from module strings: + # Code from module strings-tests: + # Code from module strndup: + # Code from module strnlen: + # Code from module strnlen1: + # Code from module strptime: + # Code from module strtoimax: + # Code from module strtol: + # Code from module strtoll: + # Code from module strtoul: + # Code from module strtoull: + # Code from module strtoumax: + # Code from module symlink: + # Code from module symlink-tests: + # Code from module sys_stat: + # Code from module sys_stat-tests: + # Code from module sys_time: + # Code from module sys_time-tests: + # Code from module sys_wait: + # Code from module sys_wait-tests: + # Code from module tempname: + # Code from module time: + # Code from module time-tests: + # Code from module time_r: + # Code from module timegm: + # Code from module timespec: + # Code from module trim: + # Code from module unistd: + # Code from module unistd-tests: + # Code from module unitypes: + # Code from module uniwidth/base: + # Code from module uniwidth/width: + # Code from module uniwidth/width-tests: + # Code from module unlocked-io: + # Code from module unsetenv: + # Code from module unsetenv-tests: + # Code from module update-copyright: + # Code from module update-copyright-tests: + # Code from module useless-if-before-free: + # Code from module usleep: + # Code from module usleep-tests: + # Code from module vc-list-files: + # Code from module vc-list-files-tests: + # Code from module verify: + # Code from module version-etc: + # Code from module version-etc-fsf: + # Code from module version-etc-tests: + # Code from module warn-on-use: + # Code from module warnings: + # Code from module wchar: + # Code from module wchar-tests: + # Code from module wcrtomb: + # Code from module wcrtomb-tests: + # Code from module wctob: + # Code from module wctype: + # Code from module wctype-tests: + # Code from module wcwidth: + # Code from module wcwidth-tests: + # Code from module xalloc: + # Code from module xalloc-die: + # Code from module xalloc-die-tests: + # Code from module xfreopen: + # Code from module xstriconv: + # Code from module xstrndup: + # Code from module xstrtol: + # Code from module xstrtol-tests: + # Code from module xstrtoumax: + # Code from module xstrtoumax-tests: + + +# 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 test "${ac_cv_sys_largefile_CC+set}" = set; 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 test "${ac_cv_sys_file_offset_bits+set}" = set; 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 test "${ac_cv_sys_large_files+set}" = set; 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 +fi + + + + + + LIBC_FATAL_STDERR_=1 + export LIBC_FATAL_STDERR_ + +# 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 test "${ac_cv_working_alloca_h+set}" = set; 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 test "${ac_cv_func_alloca_works+set}" = set; 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 */ +char *alloca (); +# 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 test "${ac_cv_os_cray+set}" = set; 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" +eval as_val=\$$as_ac_var + if test "x$as_val" = 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 test "${ac_cv_c_stack_direction+set}" = set; 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 () +{ + static char *addr = 0; + auto char dummy; + if (addr == 0) + { + addr = &dummy; + return find_stack_direction (); + } + else + return (&dummy > addr) ? 1 : -1; +} + +int +main () +{ + return find_stack_direction () < 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 inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if test "${ac_cv_c_inline+set}" = set; 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_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; + 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_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; + + + { $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 test "${gl_cv_header_wchar_h_correct_inline+set}" = set; 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 +#include <wchar.h> +extern int zero (void); +int main () { return zero(); } + +_ACEOF + 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 + mv conftest.$ac_objext conftest1.$ac_objext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define wcstod renamed_wcstod +#include <wchar.h> +int zero (void) { return 0; } + +_ACEOF + 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 + mv conftest.$ac_objext conftest2.$ac_objext + 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 + rm -f conftest1.$ac_objext conftest2.$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 + <http://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 + + + + + + for ac_func in $gl_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" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + + + { $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 test "${am_cv_langinfo_codeset+set}" = set; 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 test "${gt_cv_locale_fr+set}" = set; 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 () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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; + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + + + + + + + + for ac_header in $gl_header_list +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" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + +# for STACK_DIRECTION + + + + : + + + + + + + : + + + + + + + case "$host_os" in + sunos4* | freebsd* | dragonfly* | openbsd* | netbsd* | kfreebsd* | knetbsd*) # BSD systems + FAULT_YIELDS_SIGBUS=1 ;; + hpux*) # HP-UX + FAULT_YIELDS_SIGBUS=1 ;; + macos* | darwin*) # MacOS X + FAULT_YIELDS_SIGBUS=1 ;; + gnu*) # Hurd + FAULT_YIELDS_SIGBUS=1 ;; + *) + FAULT_YIELDS_SIGBUS=0 ;; + esac + +cat >>confdefs.h <<_ACEOF +#define FAULT_YIELDS_SIGBUS $FAULT_YIELDS_SIGBUS +_ACEOF + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working C stack overflow detection" >&5 +$as_echo_n "checking for working C stack overflow detection... " >&6; } +if test "${ac_cv_sys_stack_overflow_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_sys_stack_overflow_works=cross-compiling +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <unistd.h> + #include <signal.h> + #if HAVE_SETRLIMIT + # include <sys/types.h> + # include <sys/time.h> + # include <sys/resource.h> + #endif + #ifndef SIGSTKSZ + # define SIGSTKSZ 16384 + #endif + + static union + { + char buffer[2 * SIGSTKSZ]; + long double ld; + long u; + void *p; + } alternate_signal_stack; + + static void + segv_handler (int signo) + { + _exit (0); + } + + static int + c_stack_action () + { + stack_t st; + struct sigaction act; + int r; + + st.ss_flags = 0; + /* Use the midpoint to avoid Irix sigaltstack bug. */ + st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ; + st.ss_size = SIGSTKSZ; + r = sigaltstack (&st, 0); + if (r != 0) + return r; + + sigemptyset (&act.sa_mask); + act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND; + act.sa_handler = segv_handler; + #if FAULT_YIELDS_SIGBUS + if (sigaction (SIGBUS, &act, 0) < 0) + return -1; + #endif + return sigaction (SIGSEGV, &act, 0); + } + static volatile int * + recurse_1 (volatile int n, volatile int *p) + { + if (n >= 0) + *recurse_1 (n + 1, p) += n; + return p; + } + static int + recurse (volatile int n) + { + int sum = 0; + return *recurse_1 (n, &sum); + } + int + main () + { + #if HAVE_SETRLIMIT && defined RLIMIT_STACK + /* Before starting the endless recursion, try to be friendly + to the user's machine. On some Linux 2.2.x systems, there + is no stack limit for user processes at all. We don't want + to kill such systems. */ + struct rlimit rl; + rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ + setrlimit (RLIMIT_STACK, &rl); + #endif + + return c_stack_action () || recurse (0); + } + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_sys_stack_overflow_works=yes +else + ac_cv_sys_stack_overflow_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_sys_stack_overflow_works" >&5 +$as_echo "$ac_cv_sys_stack_overflow_works" >&6; } + + if test $ac_cv_sys_stack_overflow_works = yes; then + +$as_echo "#define HAVE_STACK_OVERFLOW_HANDLING 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct stack_t interpretation" >&5 +$as_echo_n "checking for correct stack_t interpretation... " >&6; } +if test "${gl_cv_sigaltstack_low_base+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + gl_cv_sigaltstack_low_base=cross-compiling +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include <stdlib.h> +#include <signal.h> +#if HAVE_SYS_SIGNAL_H +# include <sys/signal.h> +#endif +#ifndef SIGSTKSZ +# define SIGSTKSZ 16384 +#endif +volatile char *stack_lower_bound; +volatile char *stack_upper_bound; +static void check_stack_location (volatile char *addr) +{ + if (addr >= stack_lower_bound && addr <= stack_upper_bound) + exit (0); + else + exit (1); +} +static void stackoverflow_handler (int sig) +{ + char dummy; + check_stack_location (&dummy); +} +int main () +{ + char mystack[2 * SIGSTKSZ]; + stack_t altstack; + struct sigaction action; + /* Install the alternate stack. */ + altstack.ss_sp = mystack + SIGSTKSZ; + altstack.ss_size = SIGSTKSZ; + stack_lower_bound = (char *) altstack.ss_sp; + stack_upper_bound = (char *) altstack.ss_sp + altstack.ss_size - 1; + altstack.ss_flags = 0; /* no SS_DISABLE */ + if (sigaltstack (&altstack, NULL) < 0) + exit (2); + /* Install the SIGSEGV handler. */ + sigemptyset (&action.sa_mask); + action.sa_handler = &stackoverflow_handler; + action.sa_flags = SA_ONSTACK; + if (sigaction (SIGSEGV, &action, (struct sigaction *) NULL) < 0) + exit(3); + /* Provoke a SIGSEGV. */ + raise (SIGSEGV); + exit (3); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_sigaltstack_low_base=yes +else + gl_cv_sigaltstack_low_base=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_sigaltstack_low_base" >&5 +$as_echo "$gl_cv_sigaltstack_low_base" >&6; } + if test "$gl_cv_sigaltstack_low_base" = no; then + +$as_echo "#define SIGALTSTACK_SS_REVERSED 1" >>confdefs.h + + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for precise C stack overflow detection" >&5 +$as_echo_n "checking for precise C stack overflow detection... " >&6; } +if test "${ac_cv_sys_xsi_stack_overflow_heuristic+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_sys_xsi_stack_overflow_heuristic=cross-compiling +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <unistd.h> + #include <signal.h> + #if HAVE_UCONTEXT_H + # include <ucontext.h> + #endif + #if HAVE_SETRLIMIT + # include <sys/types.h> + # include <sys/time.h> + # include <sys/resource.h> + #endif + #ifndef SIGSTKSZ + # define SIGSTKSZ 16384 + #endif + + static union + { + char buffer[2 * SIGSTKSZ]; + long double ld; + long u; + void *p; + } alternate_signal_stack; + + #if STACK_DIRECTION + # define find_stack_direction(ptr) STACK_DIRECTION + #else + static int + find_stack_direction (char const *addr) + { + char dummy; + return (! addr ? find_stack_direction (&dummy) + : addr < &dummy ? 1 : -1); + } + #endif + + static void + segv_handler (int signo, siginfo_t *info, void *context) + { + if (0 < info->si_code) + { + /* For XSI heuristics to work, we need uc_stack to describe + the interrupted stack (as on Solaris), and not the + currently executing stack (as on Linux). */ + ucontext_t const *user_context = context; + char const *stack_min = user_context->uc_stack.ss_sp; + size_t stack_size = user_context->uc_stack.ss_size; + char const *faulting_address = info->si_addr; + size_t s = faulting_address - stack_min; + size_t page_size = sysconf (_SC_PAGESIZE); + if (find_stack_direction (0) < 0) + s += page_size; + if (s < stack_size + page_size) + _exit (0); + } + + _exit (1); + } + + static int + c_stack_action () + { + stack_t st; + struct sigaction act; + int r; + + st.ss_flags = 0; + /* Use the midpoint to avoid Irix sigaltstack bug. */ + st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ; + st.ss_size = SIGSTKSZ; + r = sigaltstack (&st, 0); + if (r != 0) + return r; + + sigemptyset (&act.sa_mask); + act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND | SA_SIGINFO; + act.sa_sigaction = segv_handler; + #if FAULT_YIELDS_SIGBUS + if (sigaction (SIGBUS, &act, 0) < 0) + return -1; + #endif + return sigaction (SIGSEGV, &act, 0); + } + static volatile int * + recurse_1 (volatile int n, volatile int *p) + { + if (n >= 0) + *recurse_1 (n + 1, p) += n; + return p; + } + static int + recurse (volatile int n) + { + int sum = 0; + return *recurse_1 (n, &sum); + } + int + main () + { + #if HAVE_SETRLIMIT && defined RLIMIT_STACK + /* Before starting the endless recursion, try to be friendly + to the user's machine. On some Linux 2.2.x systems, there + is no stack limit for user processes at all. We don't want + to kill such systems. */ + struct rlimit rl; + rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ + setrlimit (RLIMIT_STACK, &rl); + #endif + + return c_stack_action () || recurse (0); + } + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_sys_xsi_stack_overflow_heuristic=yes +else + ac_cv_sys_xsi_stack_overflow_heuristic=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_sys_xsi_stack_overflow_heuristic" >&5 +$as_echo "$ac_cv_sys_xsi_stack_overflow_heuristic" >&6; } + + if test $ac_cv_sys_xsi_stack_overflow_heuristic = yes; then + +$as_echo "#define HAVE_XSI_STACK_OVERFLOW_HEURISTIC 1" >>confdefs.h + + fi + 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 + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 +$as_echo_n "checking for ld used by GCC... " >&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. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path 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 "$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 "${acl_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + 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 GNU ld's 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="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$acl_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 test "${acl_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU ld's 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 test "${acl_cv_rpath+set}" = set; 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 + + + + + acl_libdirstem=lib + acl_libdirstem2= + 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 test "${gl_cv_solaris_64bit+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _LP64 +sixtyfour bits +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sixtyfour bits" >/dev/null 2>&1; then : + gl_cv_solaris_64bit=yes +else + gl_cv_solaris_64bit=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 +$as_echo "$gl_cv_solaris_64bit" >&6; } + 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 + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 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 + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + + + + + + + + + + + + + + + + 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-libsigsegv-prefix was given. +if test "${with_libsigsegv_prefix+set}" = set; then : + withval=$with_libsigsegv_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 + + LIBSIGSEGV= + LTLIBSIGSEGV= + INCSIGSEGV= + LIBSIGSEGV_PREFIX= + HAVE_LIBSIGSEGV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='sigsegv ' + 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" || LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }$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 $LTLIBSIGSEGV; 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 + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-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 + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$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 + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$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 $LIBSIGSEGV; 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 + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_so" + else + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_a" + else + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-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" = 'sigsegv'; then + LIBSIGSEGV_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" = 'sigsegv'; then + LIBSIGSEGV_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 $INCSIGSEGV; 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 + INCSIGSEGV="${INCSIGSEGV}${INCSIGSEGV:+ }-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 $LIBSIGSEGV; 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 + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBSIGSEGV; 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 + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-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$,,'` + ;; + *) + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$dep" + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }$dep" + ;; + esac + done + fi + else + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-l$name" + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-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" + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$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" + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-R$found_dir" + done + fi + + + + + + + + ac_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCSIGSEGV; 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 libsigsegv" >&5 +$as_echo_n "checking for libsigsegv... " >&6; } +if test "${ac_cv_libsigsegv+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + ac_save_LIBS="$LIBS" + case " $LIBSIGSEGV" in + *" -l"*) LIBS="$LIBS $LIBSIGSEGV" ;; + *) LIBS="$LIBSIGSEGV $LIBS" ;; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sigsegv.h> +int +main () +{ +sigsegv_deinstall_handler(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_libsigsegv=yes +else + ac_cv_libsigsegv='no, consider installing GNU libsigsegv' +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_libsigsegv" >&5 +$as_echo "$ac_cv_libsigsegv" >&6; } + if test "$ac_cv_libsigsegv" = yes; then + HAVE_LIBSIGSEGV=yes + +$as_echo "#define HAVE_LIBSIGSEGV 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libsigsegv" >&5 +$as_echo_n "checking how to link with libsigsegv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBSIGSEGV" >&5 +$as_echo "$LIBSIGSEGV" >&6; } + else + HAVE_LIBSIGSEGV=no + CPPFLAGS="$ac_save_CPPFLAGS" + LIBSIGSEGV= + LTLIBSIGSEGV= + LIBSIGSEGV_PREFIX= + fi + + + + + + + + gl_cv_lib_sigsegv="$ac_cv_libsigsegv" + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system is Windows or MSDOS" >&5 +$as_echo_n "checking whether system is Windows or MSDOS... " >&6; } +if test "${ac_cv_win_or_dos+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + +#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __CYGWIN__ +neither MSDOS nor Windows +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_win_or_dos=yes +else + ac_cv_win_or_dos=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_win_or_dos" >&5 +$as_echo "$ac_cv_win_or_dos" >&6; } + + if test x"$ac_cv_win_or_dos" = xyes; then + ac_fs_accepts_drive_letter_prefix=1 + ac_fs_backslash_is_file_name_separator=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether drive letter can start relative path" >&5 +$as_echo_n "checking whether drive letter can start relative path... " >&6; } +if test "${ac_cv_drive_letter_can_be_relative+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + +#if defined __CYGWIN__ +drive letters are always absolute +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_drive_letter_can_be_relative=yes +else + ac_cv_drive_letter_can_be_relative=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_drive_letter_can_be_relative" >&5 +$as_echo "$ac_cv_drive_letter_can_be_relative" >&6; } + if test x"$ac_cv_drive_letter_can_be_relative" = xyes; then + ac_fs_drive_letter_can_be_relative=1 + else + ac_fs_drive_letter_can_be_relative=0 + fi + else + ac_fs_accepts_drive_letter_prefix=0 + ac_fs_backslash_is_file_name_separator=0 + ac_fs_drive_letter_can_be_relative=0 + fi + + +cat >>confdefs.h <<_ACEOF +#define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX $ac_fs_accepts_drive_letter_prefix +_ACEOF + + + + + +cat >>confdefs.h <<_ACEOF +#define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR $ac_fs_backslash_is_file_name_separator +_ACEOF + + + +cat >>confdefs.h <<_ACEOF +#define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE $ac_fs_drive_letter_can_be_relative +_ACEOF + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 +$as_echo_n "checking whether // is distinct from /... " >&6; } +if test "${gl_cv_double_slash_root+set}" = set; 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 + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS basename-lgpl.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS dirname-lgpl.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS stripslash.$ac_objext" + + + + + + + + GNULIB_CHOWN=0; + GNULIB_CLOSE=0; + GNULIB_DUP2=0; + GNULIB_DUP3=0; + GNULIB_ENVIRON=0; + GNULIB_EUIDACCESS=0; + GNULIB_FACCESSAT=0; + GNULIB_FCHDIR=0; + GNULIB_FCHOWNAT=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_GETUSERSHELL=0; + GNULIB_LCHOWN=0; + GNULIB_LINK=0; + GNULIB_LINKAT=0; + GNULIB_LSEEK=0; + GNULIB_PIPE2=0; + GNULIB_PREAD=0; + GNULIB_READLINK=0; + GNULIB_READLINKAT=0; + GNULIB_RMDIR=0; + GNULIB_SLEEP=0; + GNULIB_SYMLINK=0; + GNULIB_SYMLINKAT=0; + GNULIB_TTYNAME_R=0; + GNULIB_UNISTD_H_GETOPT=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_FSYNC=1; + HAVE_FTRUNCATE=1; + HAVE_GETDOMAINNAME=1; + HAVE_GETDTABLESIZE=1; + HAVE_GETGROUPS=1; + HAVE_GETHOSTNAME=1; + HAVE_GETLOGIN=1; + HAVE_GETPAGESIZE=1; + HAVE_LCHOWN=1; + HAVE_LINK=1; + HAVE_LINKAT=1; + HAVE_PIPE2=1; + HAVE_PREAD=1; + HAVE_READLINK=1; + HAVE_READLINKAT=1; + HAVE_SLEEP=1; + HAVE_SYMLINK=1; + HAVE_SYMLINKAT=1; + HAVE_TTYNAME_R=1; + HAVE_UNLINKAT=1; + HAVE_USLEEP=1; + HAVE_DECL_ENVIRON=1; + HAVE_DECL_GETLOGIN_R=1; + HAVE_DECL_GETPAGESIZE=1; + HAVE_DECL_GETUSERSHELL=1; + HAVE_OS_H=0; + HAVE_SYS_PARAM_H=0; + REPLACE_CHOWN=0; + REPLACE_CLOSE=0; + REPLACE_DUP=0; + REPLACE_DUP2=0; + REPLACE_FCHOWNAT=0; + REPLACE_GETCWD=0; + REPLACE_GETGROUPS=0; + REPLACE_GETPAGESIZE=0; + REPLACE_LCHOWN=0; + REPLACE_LINK=0; + REPLACE_LINKAT=0; + REPLACE_LSEEK=0; + REPLACE_PREAD=0; + REPLACE_READLINK=0; + REPLACE_RMDIR=0; + REPLACE_SLEEP=0; + REPLACE_SYMLINK=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; + + + + + + + + + + { $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 test "${gl_cv_have_include_next+set}" = set; 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 for complete errno.h" >&5 +$as_echo_n "checking for complete errno.h... " >&6; } +if test "${gl_cv_header_errno_h_complete+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#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 ESTALE +booboo +#endif +#if !defined ECANCELED +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 test "${gl_cv_next_errno_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_errno_h = yes; then + 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 + gl_cv_next_errno_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/errno.h#{ + s#.*"\(.*/errno.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_errno_h='<'errno.h'>' + fi + +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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5 +$as_echo_n "checking for EMULTIHOP value... " >&6; } +if test "${gl_cv_header_errno_h_EMULTIHOP+set}" = set; 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 test "${gl_cv_header_errno_h_ENOLINK+set}" = set; 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 test "${gl_cv_header_errno_h_EOVERFLOW+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_func_strerror_r_char_p+set}" = set; 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= + + + GNULIB_FCNTL=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 test "${gl_cv_header_working_fcntl_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_header_working_fcntl_h=cross-compiling +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/stat.h> + #include <unistd.h> + #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 status = !constants; + { + static char const sym[] = "conftest.sym"; + if (symlink (".", sym) != 0 + || close (open (sym, O_RDONLY | O_NOFOLLOW)) == 0) + status |= 32; + unlink (sym); + } + { + static char const file[] = "confdefs.h"; + int fd = open (file, O_RDONLY | O_NOATIME); + char c; + struct stat st0, st1; + if (fd < 0 + || fstat (fd, &st0) != 0 + || sleep (1) != 0 + || read (fd, &c, 1) != 1 + || close (fd) != 0 + || stat (file, &st1) != 0 + || st0.st_atime != st1.st_atime) + status |= 64; + } + return status; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_header_working_fcntl_h=yes +else + case $? in #( + 32) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( + 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( + 96) 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 + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 +$as_echo_n "checking for mbstate_t... " >&6; } +if test "${ac_cv_type_mbstate_t+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +# 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GNULIB_DPRINTF=0; + GNULIB_FCLOSE=0; + GNULIB_FFLUSH=0; + GNULIB_FOPEN=0; + GNULIB_FPRINTF=0; + GNULIB_FPRINTF_POSIX=0; + GNULIB_FPURGE=0; + GNULIB_FPUTC=0; + GNULIB_FPUTS=0; + GNULIB_FREOPEN=0; + GNULIB_FSEEK=0; + GNULIB_FSEEKO=0; + GNULIB_FTELL=0; + GNULIB_FTELLO=0; + GNULIB_FWRITE=0; + GNULIB_GETDELIM=0; + GNULIB_GETLINE=0; + GNULIB_OBSTACK_PRINTF=0; + GNULIB_OBSTACK_PRINTF_POSIX=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_SNPRINTF=0; + GNULIB_SPRINTF_POSIX=0; + GNULIB_STDIO_H_SIGPIPE=0; + GNULIB_TMPFILE=0; + GNULIB_VASPRINTF=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_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_RENAMEAT=1; + HAVE_VASPRINTF=1; + HAVE_VDPRINTF=1; + REPLACE_DPRINTF=0; + REPLACE_FCLOSE=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_WRITE_FUNCS=0; + REPLACE_TMPFILE=0; + REPLACE_VASPRINTF=0; + REPLACE_VDPRINTF=0; + REPLACE_VFPRINTF=0; + REPLACE_VPRINTF=0; + REPLACE_VSNPRINTF=0; + REPLACE_VSPRINTF=0; + + + + + + + + + + + + + + + + + + + + : + + + + + + + + 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 test "${gl_cv_next_getopt_h+set}" = set; 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 + gl_cv_next_getopt_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/getopt.h#{ + s#.*"\(.*/getopt.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + 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" = x""yes; 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" = x""yes; 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 + ac_fn_c_check_decl "$LINENO" "optreset" "ac_cv_have_decl_optreset" "#include <getopt.h> +" +if test "x$ac_cv_have_decl_optreset" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_OPTRESET $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + ac_fn_c_check_decl "$LINENO" "getopt_clip" "ac_cv_have_decl_getopt_clip" "#include <getopt.h> +" +if test "x$ac_cv_have_decl_getopt_clip" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETOPT_CLIP $ac_have_decl +_ACEOF + + +fi + + 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 test "${gl_cv_func_getopt_posix+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host_os" in + mingw*) gl_cv_func_getopt_posix="guessing no";; + darwin*) gl_cv_func_getopt_posix="guessing no";; + *) gl_cv_func_getopt_posix="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +#if !HAVE_DECL_OPTRESET && !HAVE_DECL_GETOPT_CLIP +# define OPTIND_MIN 0 +#else +# define OPTIND_MIN 1 +#endif + +int +main () +{ + { + int argc = 0; + char *argv[10]; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-a"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = OPTIND_MIN; + opterr = 0; + + c = getopt (argc, argv, "ab"); + if (!(c == 'a')) + return 1; + c = getopt (argc, argv, "ab"); + if (!(c == -1)) + return 2; + if (!(optind == 2)) + return 3; + } + /* Some internal state exists at this point. */ + { + int argc = 0; + char *argv[10]; + int c; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = OPTIND_MIN; + opterr = 0; + + c = getopt (argc, 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; + } + /* Detect MacOS 10.5 bug. */ + { + char *argv[3] = { "program", "-ab", NULL }; + optind = OPTIND_MIN; + opterr = 0; + 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 +{ $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 test "${gl_cv_func_getopt_gnu+set}" = set; 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. + gl_had_POSIXLY_CORRECT=${POSIXLY_CORRECT:+yes} + POSIXLY_CORRECT=1 + export POSIXLY_CORRECT + if test "$cross_compiling" = yes; then : + case $host_os:$ac_cv_have_decl_optreset in + *-gnu*:* | mingw*:*) gl_cv_func_getopt_gnu=no;; + *:yes) gl_cv_func_getopt_gnu=no;; + *) gl_cv_func_getopt_gnu=yes;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <getopt.h> + #include <stddef.h> + #include <string.h> + +int +main () +{ + + /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, + and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, + OSF/1 5.1, Solaris 10. */ + { + char *myargv[3]; + myargv[0] = "conftest"; + myargv[1] = "-+"; + myargv[2] = 0; + opterr = 0; + if (getopt (2, myargv, "+a") != '?') + return 1; + } + /* This code succeeds on glibc 2.8, mingw, + and fails on MacOS 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. */ + { + char *argv[] = { "program", "-p", "foo", "bar", NULL }; + + optind = 1; + if (getopt (4, argv, "p::") != 'p') + return 2; + if (optarg != NULL) + return 3; + if (getopt (4, argv, "p::") != -1) + return 4; + if (optind != 2) + return 5; + } + /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ + { + char *argv[] = { "program", "foo", "-p", NULL }; + optind = 0; + if (getopt (3, argv, "-p") != 1) + return 6; + if (getopt (3, argv, "-p") != 'p') + return 7; + } + /* This code fails on glibc 2.11. */ + { + char *argv[] = { "program", "-b", "-a", NULL }; + optind = opterr = 0; + if (getopt (3, argv, "+:a:b") != 'b') + return 8; + if (getopt (3, argv, "+:a:b") != ':') + return 9; + } + return 0; + + ; + 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 + + if test "$gl_had_POSIXLY_CORRECT" != yes; then + { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} + fi + +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" = "no"; then + gl_replace_getopt=yes + fi + fi + + + ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default" +if test "x$ac_cv_have_decl_getenv" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETENV $ac_have_decl +_ACEOF + + + + + + + + if test -n "$gl_replace_getopt"; then : + + + + GETOPT_H=getopt.h + +$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h + + + + GNULIB_UNISTD_H_GETOPT=1 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext" + + + + : + + + + + + + + +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 test "${ac_cv_c_restrict+set}" = set; 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 +main () +{ +int s[1]; + int * $ac_kw t = s; + t[0] = 0; + return foo(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_GETTIMEOFDAY=0; + HAVE_GETTIMEOFDAY=1; + HAVE_STRUCT_TIMEVAL=1; + HAVE_SYS_TIME_H=1; + REPLACE_GETTIMEOFDAY=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 test "${gl_cv_next_sys_time_h+set}" = set; 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 + gl_cv_next_sys_time_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/sys/time.h#{ + s#.*"\(.*/sys/time.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + 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 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timeval" >&5 +$as_echo_n "checking for struct timeval... " >&6; } +if test "${gl_cv_sys_struct_timeval+set}" = set; 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> + +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 + fi + + + for gl_func in gettimeofday; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; 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> + +int +main () +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval as_val=\$$as_gl_Symbol + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + + + +{ $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 test "${ac_cv_header_stdbool_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <stdbool.h> + #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 + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { _Bool s: 1; _Bool t; } 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]; + bool e = &s; + 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 }; + _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]; + #if defined __xlc__ || defined __GNUC__ + /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 + reported by James Lemley on 2005-10-05; see + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + This test is not quite right, since xlc is allowed to + reject this program, as the initializer for xlcbug is + not one of the forms that C requires support for. + However, doing the test right would require a run-time + test, and that would make cross-compilation harder. + Let us hope that IBM fixes the xlc bug, and also adds + support for this kind of constant expression. In the + meantime, this test will reject xlc, which is OK, since + our stdbool.h substitute should suffice. We also test + this with GCC, where it should work, to detect more + quickly whether someone messes up the test in the + future. */ + char digs[] = "0123456789"; + int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); + #endif + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main () +{ + + *pq |= q; + *pq |= ! 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); + + ; + 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" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + + if test $ac_cv_header_stdbool_h = yes; then + +$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h + + 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 "$ac_cv_type__Bool" = yes; then + HAVE__BOOL=1 + else + HAVE__BOOL=0 + 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-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 + + + + + + + + + REPLACE_ICONV=0; + REPLACE_ICONV_OPEN=0; + REPLACE_ICONV_UTF=0; + ICONV_H=''; + + + + + + +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = x""yes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define off_t long int +_ACEOF + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 +$as_echo_n "checking for long long int... " >&6; } +if test "${ac_cv_type_long_long_int+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + 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 : + if test "$cross_compiling" = yes; then : + ac_cv_type_long_long_int=yes +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 : + ac_cv_type_long_long_int=yes +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 + +else + ac_cv_type_long_long_int=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_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 unsigned long long int" >&5 +$as_echo_n "checking for unsigned long long int... " >&6; } +if test "${ac_cv_type_unsigned_long_long_int+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + 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 : + ac_cv_type_unsigned_long_long_int=yes +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 +{ $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 + + + + + + + + + + + + + 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 + +$as_echo "#define AA_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + APPLE_UNIVERSAL_BUILD=1 + else + APPLE_UNIVERSAL_BUILD=0 + 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_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 test "${gl_cv_next_stdint_h+set}" = set; 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 + gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/stdint.h#{ + s#.*"\(.*/stdint.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + 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 test "${gl_cv_header_working_stdint_h+set}" = set; 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 __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#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; + +#include <limits.h> /* for CHAR_BIT */ +#define TYPE_MINIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +#define TYPE_MAXIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 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 : + gl_cv_header_working_stdint_h=yes + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#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 + + +#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 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 + if test "$gl_cv_header_working_stdint_h" = yes; then + STDINT_H= + else + 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" +eval as_val=\$$as_ac_Header + if test "x$as_val" = 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 + else + HAVE_SYS_INTTYPES_H=0 + fi + + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + else + HAVE_SYS_BITYPES_H=0 + 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 { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; 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 { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; 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 { as_var=gl_cv_type_${gltype}_signed; eval "test \"\${$as_var+set}\" = set"; }; 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 { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; 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 { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; 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 + + + + STDINT_H=stdint.h + fi + + + + 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" = x""yes; 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 test "${gt_cv_inttypes_pri_broken+set}" = set; 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 + + + + + + + + + ac_fn_c_check_decl "$LINENO" "imaxabs" "ac_cv_have_decl_imaxabs" "$ac_includes_default" +if test "x$ac_cv_have_decl_imaxabs" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_IMAXABS $ac_have_decl +_ACEOF + + + + ac_fn_c_check_decl "$LINENO" "imaxdiv" "ac_cv_have_decl_imaxdiv" "$ac_includes_default" +if test "x$ac_cv_have_decl_imaxdiv" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_IMAXDIV $ac_have_decl +_ACEOF + + + + ac_fn_c_check_decl "$LINENO" "strtoimax" "ac_cv_have_decl_strtoimax" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoimax" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOIMAX $ac_have_decl +_ACEOF + + + + ac_fn_c_check_decl "$LINENO" "strtoumax" "ac_cv_have_decl_strtoumax" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoumax" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOUMAX $ac_have_decl +_ACEOF + + + + 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; + + + GNULIB_NL_LANGINFO=0; + HAVE_NL_LANGINFO=1; + REPLACE_NL_LANGINFO=0; + + + + + + + + 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" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl +_ACEOF + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2.1 or newer" >&5 +$as_echo_n "checking whether we are using the GNU C Library 2.1 or newer... " >&6; } +if test "${ac_cv_gnu_library_2_1+set}" = set; 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 + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky GNU user" >/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" + + + + GNULIB_FCHMODAT=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; + 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 lstat correctly handles trailing slash" >&5 +$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } +if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest.sym conftest.file +echo >conftest.file +if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then + if test "$cross_compiling" = yes; then : + ac_cv_func_lstat_dereferences_slashed_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + /* 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 : + ac_cv_func_lstat_dereferences_slashed_symlink=yes +else + ac_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 + +else + # If the `ln -s' command failed, then we probably don't even + # have an lstat function. + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f conftest.sym conftest.file + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } + +test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && + +cat >>confdefs.h <<_ACEOF +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + +if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS lstat.$ac_objext" + +fi + + + { $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 test "${gl_cv_func_malloc_posix+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#if (defined _WIN32 || 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; } + + + 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_MKDTEMP=0; + GNULIB_MKOSTEMP=0; + GNULIB_MKOSTEMPS=0; + GNULIB_MKSTEMP=0; + GNULIB_MKSTEMPS=0; + GNULIB_PTSNAME=0; + GNULIB_PUTENV=0; + GNULIB_RANDOM_R=0; + GNULIB_REALLOC_POSIX=0; + GNULIB_REALPATH=0; + GNULIB_RPMATCH=0; + GNULIB_SETENV=0; + GNULIB_STRTOD=0; + GNULIB_STRTOLL=0; + GNULIB_STRTOULL=0; + GNULIB_UNLOCKPT=0; + GNULIB_UNSETENV=0; + HAVE_ATOLL=1; + HAVE_CALLOC_POSIX=1; + HAVE_CANONICALIZE_FILE_NAME=1; + HAVE_DECL_GETLOADAVG=1; + HAVE_GETSUBOPT=1; + HAVE_GRANTPT=1; + HAVE_MALLOC_POSIX=1; + HAVE_MKDTEMP=1; + HAVE_MKOSTEMP=1; + HAVE_MKOSTEMPS=1; + HAVE_MKSTEMP=1; + HAVE_MKSTEMPS=1; + HAVE_PTSNAME=1; + HAVE_RANDOM_R=1; + HAVE_REALLOC_POSIX=1; + HAVE_REALPATH=1; + HAVE_RPMATCH=1; + HAVE_SETENV=1; + HAVE_STRTOD=1; + HAVE_STRTOLL=1; + HAVE_STRTOULL=1; + HAVE_STRUCT_RANDOM_DATA=1; + HAVE_SYS_LOADAVG_H=0; + HAVE_UNLOCKPT=1; + HAVE_UNSETENV=1; + REPLACE_CANONICALIZE_FILE_NAME=0; + REPLACE_MKSTEMP=0; + REPLACE_PUTENV=0; + REPLACE_REALPATH=0; + REPLACE_SETENV=0; + REPLACE_STRTOD=0; + REPLACE_UNSETENV=0; + + + 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" = x""yes; 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 test "${ac_cv_func_malloc_0_nonnull+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +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 () +{ +return ! malloc (0); + ; + 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 whether mbrtowc and mbstate_t are properly declared" >&5 +$as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; } +if test "${ac_cv_func_mbrtowc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <wchar.h> +int +main () +{ +wchar_t wc; + char const s[] = ""; + size_t n = 1; + mbstate_t state; + return ! (sizeof state && (mbrtowc) (&wc, s, n, &state)); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_mbrtowc=yes +else + ac_cv_func_mbrtowc=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_mbrtowc" >&5 +$as_echo "$ac_cv_func_mbrtowc" >&6; } + if test $ac_cv_func_mbrtowc = yes; then + +$as_echo "#define HAVE_MBRTOWC 1" >>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 test "${gt_cv_locale_ja+set}" = set; 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 () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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. */ + 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; +} + +_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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 test "${gt_cv_locale_zh_CN+set}" = set; 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 () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 a month name, no byte in the range 0x80..0x9F occurs. + 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) < 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; +} + +_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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 test "${gt_cv_locale_fr_utf8+set}" = set; 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 (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + 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> +#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 1; + } + 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 test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; 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> +#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 1; + } + 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 $REPLACE_MBSTATE_T = 1; then + + : + + fi + + + + : + + + + + + if test $ac_cv_func_mbrtowc = no; then + HAVE_MBRTOWC=0 + 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 string argument" >&5 +$as_echo_n "checking whether mbrtowc handles a NULL string argument... " >&6; } +if test "${gl_cv_func_mbrtowc_null_arg+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on OSF/1. + osf*) gl_cv_func_mbrtowc_null_arg="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg="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> +#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 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_null_arg=yes +else + gl_cv_func_mbrtowc_null_arg=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_arg" >&5 +$as_echo "$gl_cv_func_mbrtowc_null_arg" >&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 test "${gl_cv_func_mbrtowc_retval+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on HP-UX and Solaris. + hpux* | solaris*) 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; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + /* 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) + return 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) + return 1; + } + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_retval=yes +else + gl_cv_func_mbrtowc_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_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 test "${gl_cv_func_mbrtowc_nul_retval+set}" = set; 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> +#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 1; + } + 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; } + + case "$gl_cv_func_mbrtowc_null_arg" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NULL_ARG_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 + fi + fi + if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then + + : + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext" + + + : + + fi + + + + + + + + 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_STRSIGNAL=0; + GNULIB_STRVERSCMP=0; + HAVE_MBSLEN=0; + 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_STRSIGNAL=1; + HAVE_STRVERSCMP=1; + REPLACE_MEMCHR=0; + REPLACE_MEMMEM=0; + REPLACE_STPNCPY=0; + REPLACE_STRDUP=0; + REPLACE_STRSTR=0; + REPLACE_STRCASESTR=0; + REPLACE_STRERROR=0; + REPLACE_STRNCAT=0; + REPLACE_STRNDUP=0; + REPLACE_STRNLEN=0; + REPLACE_STRSIGNAL=0; + REPLACE_STRTOK_R=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" = x""yes; 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 cant identify this map. +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "I cant 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 cant identify this map. +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "I cant 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 $ac_cv_func_memchr = yes; then + # Detect platform-specific bugs in some versions of glibc: + # memchr should not dereference anything with length 0 + # http://bugzilla.redhat.com/499689 + # memchr should not dereference overestimated length after a match + # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 + # http://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 test "${gl_cv_func_memchr_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_func_memchr_works="guessing no" +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 () +{ + + 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)) + return 1; + strcpy (fence - 9, "12345678"); + if (memchr (fence - 9, 0, 79) != fence - 1) + return 2; + } + return 0; + + ; + 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; } + if test "$gl_cv_func_memchr_works" != yes; then + REPLACE_MEMCHR=1 + fi + else + HAVE_MEMCHR=0 + fi + 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" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_BP_SYM_H 1 +_ACEOF + +fi + +done + + + fi + + + + + + + + GNULIB_MKTIME=0; + GNULIB_NANOSLEEP=0; + GNULIB_STRPTIME=0; + GNULIB_TIMEGM=0; + GNULIB_TIME_R=0; + HAVE_LOCALTIME_R=1; + HAVE_NANOSLEEP=1; + HAVE_STRPTIME=1; + HAVE_TIMEGM=1; + REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; + REPLACE_MKTIME=GNULIB_PORTCHECK; + REPLACE_NANOSLEEP=GNULIB_PORTCHECK; + REPLACE_TIMEGM=GNULIB_PORTCHECK; + + + + + + + + + + + +ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" +if test "x$ac_cv_type_mode_t" = x""yes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define mode_t int +_ACEOF + +fi + + + + { $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 test "${gl_cv_promoted_mode_t+set}" = set; 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 + + + + + + + + + + + + + + GNULIB_SIGNAL_H_SIGPIPE=0; + GNULIB_SIGPROCMASK=0; + GNULIB_SIGACTION=0; + HAVE_POSIX_SIGNALBLOCKING=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; + + + + + + + +{ $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 test "${ac_cv_type_uid_t+set}" = set; 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 + + + + + + + + + + + + + + + + + + + + + REPLACE_NULL=0; + HAVE_WCHAR_T=1; + STDDEF_H=''; + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 +$as_echo_n "checking for wchar_t... " >&6; } +if test "${gt_cv_c_wchar_t+set}" = set; 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 + + + + + + + + + + + + + + + + + + HAVE_STRCASECMP=1; + HAVE_DECL_STRNCASECMP=1; + + + + + + + + + + if test -z "$ERRNO_H"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5 +$as_echo_n "checking for working strerror function... " >&6; } +if test "${gl_cv_func_working_strerror+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +int +main () +{ +return !*strerror (-2); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_working_strerror=yes +else + gl_cv_func_working_strerror=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +int +main () +{ +return !*strerror (-2); + ; + 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; } + if test $gl_cv_func_working_strerror = no; then + REPLACE_STRERROR=1 + fi + else + REPLACE_STRERROR=1 + fi + if test $REPLACE_STRERROR = 1; then + + ac_fn_c_check_decl "$LINENO" "strerror" "ac_cv_have_decl_strerror" "$ac_includes_default" +if test "x$ac_cv_have_decl_strerror" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRERROR $ac_have_decl +_ACEOF + + + : + + + + + + 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" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WINSOCK2_H 1 +_ACEOF + +fi + +done + + fi + + fi + +{ $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 test "${ac_cv_struct_tm+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_var_tzname+set}" = set; 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" = x""yes; then : + +$as_echo "#define HAVE_TM_GMTOFF 1" >>confdefs.h + +fi + + + + + + + + + + + + + + + + + + + + : + + + + + + + + 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 test "${gl_cv_next_string_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_string_h = yes; then + 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 + gl_cv_next_string_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/string.h#{ + s#.*"\(.*/string.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_string_h='<'string.h'>' + fi + +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 + + + + + + for gl_func in memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strsignal strverscmp; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +int +main () +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval as_val=\$$as_gl_Symbol + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + + + + + + + + + + + + : + + + + + + + + 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 test "${gl_cv_next_strings_h+set}" = set; 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 + gl_cv_next_strings_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/strings.h#{ + s#.*"\(.*/strings.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + 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 + + + + + + for gl_func in strcasecmp strncasecmp; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <strings.h> + +int +main () +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval as_val=\$$as_gl_Symbol + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + + ac_fn_c_check_decl "$LINENO" "strndup" "ac_cv_have_decl_strndup" "$ac_includes_default" +if test "x$ac_cv_have_decl_strndup" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRNDUP $ac_have_decl +_ACEOF + + + + + + + + + ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default" +if test "x$ac_cv_have_decl_strnlen" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRNLEN $ac_have_decl +_ACEOF + + + + + + + +{ $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 test "${ac_cv_header_stat_broken+set}" = set; 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 + + + + + + + + + + + + + + + + + + + + + : + + + + + + { $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 test "${gl_cv_sys_struct_timespec_in_time_h+set}" = set; 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 + 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 test "${gl_cv_sys_struct_timespec_in_sys_time_h+set}" = set; 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 + 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 test "${gl_cv_next_time_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_time_h = yes; then + 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 + gl_cv_next_time_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/time.h#{ + s#.*"\(.*/time.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_time_h='<'time.h'>' + fi + +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" = x""yes; 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" = x""yes; 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" = x""yes; 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" "fflush_unlocked" "ac_cv_have_decl_fflush_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fflush_unlocked" = x""yes; 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" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fgets_unlocked" = x""yes; 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" = x""yes; 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" "fputs_unlocked" "ac_cv_have_decl_fputs_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fputs_unlocked" = x""yes; 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" "fread_unlocked" "ac_cv_have_decl_fread_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fread_unlocked" = x""yes; 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" = x""yes; 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" "getchar_unlocked" "ac_cv_have_decl_getchar_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_getchar_unlocked" = x""yes; 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" "putc_unlocked" "ac_cv_have_decl_putc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_putc_unlocked" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PUTC_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" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PUTCHAR_UNLOCKED $ac_have_decl +_ACEOF + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 +$as_echo_n "checking for wint_t... " >&6; } +if test "${gt_cv_c_wint_t+set}" = set; 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 + + 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 test "${gt_cv_var_environ_declaration+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.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 + + + + + + + + + + + + + + + + + + + + : + + + + + + 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 test "${gl_cv_func_setenv_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_func_setenv_works="guessing no" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <stdlib.h> + #include <errno.h> + #include <string.h> + +int +main () +{ + + if (setenv ("", "", 0) != -1) return 1; + if (errno != EINVAL) return 2; + if (setenv ("a", "=", 1) != 0) return 3; + if (strcmp (getenv ("a"), "=") != 0) return 4; + + ; + 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; } + if test "$gl_cv_func_setenv_works" != yes; then + REPLACE_SETENV=1 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS setenv.$ac_objext" + + fi + 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" = x""yes; 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" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TSEARCH 1 +_ACEOF + +fi +done + + + + + + + + + + ac_fn_c_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default" +if test "x$ac_cv_have_decl_alarm" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ALARM $ac_have_decl +_ACEOF + + + + + + + + + + + + + + + + + + + if false; then + GL_COND_LIBTOOL_TRUE= + GL_COND_LIBTOOL_FALSE='#' +else + GL_COND_LIBTOOL_TRUE='#' + GL_COND_LIBTOOL_FALSE= +fi + + gl_cond_libtool=false + gl_libdeps= + gl_ltlibdeps= + gl_m4_base='m4' + + + + + + + + + + gl_source_base='lib' + # Code from module alloca: + # Code from module alloca-opt: + + + + + + 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 test "${gl_cv_rpl_alloca+set}" = set; 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 + + + # Code from module announce-gen: + # Code from module arg-nonnull: + # Code from module bitrotate: + + # Code from module btowc: + + + + + + + : + + + + + + 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 test "${gl_cv_func_btowc_nul+set}" = set; 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 otherwise. + *) gl_cv_func_btowc_nul="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.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 test "${gl_cv_func_btowc_eof+set}" = set; 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 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 <stdio.h> +#include <string.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 + + + + # Code from module c++defs: + # Code from module c-ctype: + # Code from module c-stack: + + + + + # for STACK_DIRECTION + + + + : + + + + + + ac_fn_c_check_decl "$LINENO" "sigaltstack" "ac_cv_have_decl_sigaltstack" "#include <signal.h> +" +if test "x$ac_cv_have_decl_sigaltstack" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SIGALTSTACK $ac_have_decl +_ACEOF + + + + : + + + + + + + + + + ac_fn_c_check_type "$LINENO" "stack_t" "ac_cv_type_stack_t" "#include <signal.h> +" +if test "x$ac_cv_type_stack_t" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STACK_T 1 +_ACEOF + + +fi + + + if test "$gl_cv_lib_sigsegv" = yes \ + && test $"ac_cv_sys_xsi_stack_overflow_heuristic" != yes ; then + LIBCSTACK=$LIBSIGSEGV + + LTLIBCSTACK=$LTLIBSIGSEGV + + fi + + + # Code from module c-strcase: + # Code from module clock-time: + + + + # 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 test "${ac_cv_search_clock_gettime+set}" = set; 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 test "${ac_cv_search_clock_gettime+set}" = set; then : + break +fi +done +if test "${ac_cv_search_clock_gettime+set}" = set; 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" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + LIBS=$gl_saved_libs + + # Code from module config-h: + + # Code from module configmake: + # Code from module diffseq: + # Code from module dirname: + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS basename.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS dirname.$ac_objext" + + + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_DIRNAME 1 +_ACEOF + + + # Code from module dirname-lgpl: + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS basename-lgpl.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS dirname-lgpl.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS stripslash.$ac_objext" + + + + + + + # Code from module do-release-commit-and-tag: + # Code from module double-slash-root: + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 +$as_echo_n "checking whether // is distinct from /... " >&6; } +if test "${gl_cv_double_slash_root+set}" = set; 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 + + # Code from module dup2: + + + + + : + + + + + + if test $ac_cv_func_dup2 = no; then + HAVE_DUP2=0 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS dup2.$ac_objext" + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dup2 works" >&5 +$as_echo_n "checking whether dup2 works... " >&6; } +if test "${gl_cv_func_dup2_works+set}" = set; 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=no;; + cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 + gl_cv_func_dup2_works=no;; + linux*) # On linux between 2008-07-27 and 2009-05-11, dup2 of a + # closed fd may yield -EBADF instead of -1 / errno=EBADF. + gl_cv_func_dup2_works=no;; + freebsd*) # on FreeBSD 6.1, dup2(1,1000000) gives EMFILE, not EBADF. + gl_cv_func_dup2_works=no;; + *) gl_cv_func_dup2_works=yes;; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <unistd.h> +#include <errno.h> +int +main () +{ +if (dup2 (1, 1) == 0) + return 1; + close (0); + if (dup2 (0, 0) != -1) + return 2; + /* Many gnulib modules require POSIX conformance of EBADF. */ + if (dup2 (1, 1000000) == -1 && errno != EBADF) + return 3; + return 0; + + ; + 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; } + if test "$gl_cv_func_dup2_works" = no; then + + + if test $ac_cv_func_dup2 = yes; then + REPLACE_DUP2=1 + fi + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS dup2.$ac_objext" + + + fi + fi + + + + + GNULIB_DUP2=1 + + + +$as_echo "#define GNULIB_TEST_DUP2 1" >>confdefs.h + + + + # Code from module errno: + + # Code from module error: + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 +$as_echo_n "checking for error_at_line... " >&6; } +if test "${ac_cv_lib_error_at_line+set}" = set; 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" + + # Code from module exclude: + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS exclude.$ac_objext" + + + # Code from module exit: + # Code from module exitfail: + # Code from module extensions: + # Code from module fcntl: + + + + + + : + + + + + + if test $ac_cv_func_fcntl = no; then + + + + : + + + + + + if test $ac_cv_func_fcntl = no; then + HAVE_FCNTL=0 + else + REPLACE_FCNTL=1 + fi + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext" + + + 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 test "${gl_cv_func_fcntl_f_dupfd_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + # Guess that it works on glibc systems + case $host_os in #(( + *-gnu*) gl_cv_func_fcntl_f_dupfd_works="guessing yes";; + *) gl_cv_func_fcntl_f_dupfd_works="guessing no";; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <fcntl.h> + +int +main () +{ +return fcntl (0, F_DUPFD, -1) != -1; + + ; + 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 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext" + + + +$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 test "${gl_cv_func_fcntl_f_dupfd_cloexec+set}" = set; 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 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext" + + + fi + fi + + + + + GNULIB_FCNTL=1 + + + +$as_echo "#define GNULIB_TEST_FCNTL 1" >>confdefs.h + + + + # Code from module fcntl-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 test "${gl_cv_next_fcntl_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_fcntl_h = yes; then + 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 + gl_cv_next_fcntl_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/fcntl.h#{ + s#.*"\(.*/fcntl.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_fcntl_h='<'fcntl.h'>' + fi + +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 + + + + + + for gl_func in fcntl openat; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <fcntl.h> + +int +main () +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval as_val=\$$as_gl_Symbol + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + # Code from module fdl: + # Code from module file-type: + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS file-type.$ac_objext" + + + # Code from module fnmatch: + + + + + + FNMATCH_H= + gl_fnmatch_required_lowercase=`echo $gl_fnmatch_required | tr 'A-Z' 'a-z'` + gl_fnmatch_cache_var="gl_cv_func_fnmatch_${gl_fnmatch_required_lowercase}" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working $gl_fnmatch_required fnmatch" >&5 +$as_echo_n "checking for working $gl_fnmatch_required fnmatch... " >&6; } +if { as_var=$gl_fnmatch_cache_var; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + if test $gl_fnmatch_required = GNU; then + gl_fnmatch_gnu_start= + gl_fnmatch_gnu_end= + else + gl_fnmatch_gnu_start='#if 0' + gl_fnmatch_gnu_end='#endif' + fi + if test "$cross_compiling" = yes; then : + eval "$gl_fnmatch_cache_var=\"guessing no\"" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <fnmatch.h> + static int + y (char const *pattern, char const *string, int flags) + { + return fnmatch (pattern, string, flags) == 0; + } + static int + n (char const *pattern, char const *string, int flags) + { + return fnmatch (pattern, string, flags) == FNM_NOMATCH; + } + +int +main () +{ +char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]"; + char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]"; + static char const A_1[] = { 'A' - 1, 0 }; + static char const A01[] = { 'A' + 1, 0 }; + static char const a_1[] = { 'a' - 1, 0 }; + static char const a01[] = { 'a' + 1, 0 }; + static char const bs_1[] = { '\\\\' - 1, 0 }; + static char const bs01[] = { '\\\\' + 1, 0 }; + return + !(n ("a*", "", 0) + && y ("a*", "abc", 0) + && n ("d*/*1", "d/s/1", FNM_PATHNAME) + && y ("a\\\\bc", "abc", 0) + && n ("a\\\\bc", "abc", FNM_NOESCAPE) + && y ("*x", ".x", 0) + && n ("*x", ".x", FNM_PERIOD) + && y (Apat, "\\\\", 0) && y (Apat, "A", 0) + && y (apat, "\\\\", 0) && y (apat, "a", 0) + && n (Apat, A_1, 0) == ('A' < '\\\\') + && n (apat, a_1, 0) == ('a' < '\\\\') + && y (Apat, A01, 0) == ('A' < '\\\\') + && y (apat, a01, 0) == ('a' < '\\\\') + && y (Apat, bs_1, 0) == ('A' < '\\\\') + && y (apat, bs_1, 0) == ('a' < '\\\\') + && n (Apat, bs01, 0) == ('A' < '\\\\') + && n (apat, bs01, 0) == ('a' < '\\\\') + $gl_fnmatch_gnu_start + && y ("xxXX", "xXxX", FNM_CASEFOLD) + && y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH) + && n ("d*/*1", "d/s/1", FNM_FILE_NAME) + && y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR) + && y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR) + && y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR) + $gl_fnmatch_gnu_end + ); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + eval "$gl_fnmatch_cache_var=yes" +else + eval "$gl_fnmatch_cache_var=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 +eval ac_res=\$$gl_fnmatch_cache_var + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\"" + if test "$gl_fnmatch_result" = yes; then + rm -f "$gl_source_base/fnmatch.h" + else + FNMATCH_H=fnmatch.h + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fnmatch.$ac_objext" + + +cat >>confdefs.h <<_ACEOF +#define fnmatch ${gl_fnmatch_required_lowercase}_fnmatch +_ACEOF + + + ac_fn_c_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include <ctype.h> +" +if test "x$ac_cv_have_decl_isblank" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ISBLANK $ac_have_decl +_ACEOF + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + : + + + + + + fi + + + # Code from module fnmatch-gnu: + + + + + + # Code from module freopen: + + + + case "$host_os" in + mingw* | pw*) + REPLACE_FREOPEN=1 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS freopen.$ac_objext" + + + + + ;; + esac + + + + + GNULIB_FREOPEN=1 + + + +$as_echo "#define GNULIB_TEST_FREOPEN 1" >>confdefs.h + + + + # Code from module freopen-safer: + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS freopen-safer.$ac_objext" + + + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_FREOPEN_SAFER 1 +_ACEOF + + + # Code from module gendocs: + # Code from module getdtablesize: + + + + : + + + + + + if test $ac_cv_func_getdtablesize != yes; then + HAVE_GETDTABLESIZE=0 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getdtablesize.$ac_objext" + + fi + + + + + GNULIB_GETDTABLESIZE=1 + + + +$as_echo "#define GNULIB_TEST_GETDTABLESIZE 1" >>confdefs.h + + + + # Code from module getopt: + # Code from module getopt-gnu: + + + + + + + +$as_echo "#define GNULIB_TEST_GETOPT_GNU 1" >>confdefs.h + + + # Code from module getopt-posix: + + + + + + if test -n "$gl_replace_getopt"; then : + + + + GETOPT_H=getopt.h + +$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h + + + + GNULIB_UNISTD_H_GETOPT=1 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext" + + + + : + + + + + + + + +fi + + + # Code from module gettext: + + # Code from module gettext-h: + + + # Code from module gettime: + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS gettime.$ac_objext" + + + + + + : + + + + + + + + + + # Code from module gettimeofday: + + + + + + : + + + + + + + gl_gettimeofday_timezone=void + if test $ac_cv_func_gettimeofday != yes; then + HAVE_GETTIMEOFDAY=0 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS gettimeofday.$ac_objext" + + + for ac_header in sys/timeb.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/timeb.h" "ac_cv_header_sys_timeb_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_timeb_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_TIMEB_H 1 +_ACEOF + +fi + +done + + for ac_func in _ftime +do : + ac_fn_c_check_func "$LINENO" "_ftime" "ac_cv_func__ftime" +if test "x$ac_cv_func__ftime" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE__FTIME 1 +_ACEOF + +fi +done + + + 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 test "${gl_cv_func_gettimeofday_clobber+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_func_gettimeofday_clobber=yes +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; } + + if test $gl_cv_func_gettimeofday_clobber = yes; then + REPLACE_GETTIMEOFDAY=1 + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS gettimeofday.$ac_objext" + + + for ac_header in sys/timeb.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/timeb.h" "ac_cv_header_sys_timeb_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_timeb_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_TIMEB_H 1 +_ACEOF + +fi + +done + + for ac_func in _ftime +do : + ac_fn_c_check_func "$LINENO" "_ftime" "ac_cv_func__ftime" +if test "x$ac_cv_func__ftime" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE__FTIME 1 +_ACEOF + +fi +done + + + +$as_echo "#define gmtime rpl_gmtime" >>confdefs.h + + +$as_echo "#define localtime rpl_localtime" >>confdefs.h + + + +$as_echo "#define GETTIMEOFDAY_CLOBBERS_LOCALTIME 1" >>confdefs.h + + fi + + { $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 test "${gl_cv_func_gettimeofday_posix_signature+set}" = set; 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 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS gettimeofday.$ac_objext" + + + for ac_header in sys/timeb.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/timeb.h" "ac_cv_header_sys_timeb_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_timeb_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_TIMEB_H 1 +_ACEOF + +fi + +done + + for ac_func in _ftime +do : + ac_fn_c_check_func "$LINENO" "_ftime" "ac_cv_func__ftime" +if test "x$ac_cv_func__ftime" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE__FTIME 1 +_ACEOF + +fi +done + + + fi + fi + +cat >>confdefs.h <<_ACEOF +#define GETTIMEOFDAY_TIMEZONE $gl_gettimeofday_timezone +_ACEOF + + + + + + GNULIB_GETTIMEOFDAY=1 + + + +$as_echo "#define GNULIB_TEST_GETTIMEOFDAY 1" >>confdefs.h + + + + # Code from module git-version-gen: + # Code from module gitlog-to-changelog: + # Code from module gnu-make: + + if ${MAKE-make} --version /cannot/make/this >/dev/null 2>&1; then + GNU_MAKE_TRUE= + GNU_MAKE_FALSE='#' +else + GNU_MAKE_TRUE='#' + GNU_MAKE_FALSE= +fi + + + # Code from module gnu-web-doc-update: + # Code from module gnumakefile: + # 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" + + # Code from module gnupload: + # Code from module gperf: + # Code from module hard-locale: + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS hard-locale.$ac_objext" + + + # Code from module hash: + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS hash.$ac_objext" + + + + + # Code from module havelib: + # Code from module iconv: + + + + + + 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 test "${am_cv_func_iconv+set}" = set; 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 test "${am_cv_func_iconv_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + 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> +int main () +{ + /* 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 const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + 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, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + return 1; + } + } + /* 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 const char input[] = "\263"; + char buf[10]; + 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, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + return 1; + } + } +#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 const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + 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, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + return 1; + } + } +#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)) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + am_cv_func_iconv_works=yes +else + am_cv_func_iconv_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 + + 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 + + + + if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 +$as_echo_n "checking for iconv declaration... " >&6; } + if test "${am_cv_proto_iconv+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdlib.h> +#include <iconv.h> +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + am_cv_proto_iconv_arg1="" +else + am_cv_proto_iconv_arg1="const" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + 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);" +fi + + am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: + $am_cv_proto_iconv" >&5 +$as_echo " + $am_cv_proto_iconv" >&6; } + +cat >>confdefs.h <<_ACEOF +#define ICONV_CONST $am_cv_proto_iconv_arg1 +_ACEOF + + fi + + # Code from module iconv-h: + + + + + + + + : + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_iconv_h='<'iconv.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <iconv.h>" >&5 +$as_echo_n "checking absolute name of <iconv.h>... " >&6; } +if test "${gl_cv_next_iconv_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_iconv_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <iconv.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_iconv_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/iconv.h#{ + s#.*"\(.*/iconv.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_iconv_h='<'iconv.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_iconv_h" >&5 +$as_echo "$gl_cv_next_iconv_h" >&6; } + fi + NEXT_ICONV_H=$gl_cv_next_iconv_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='<'iconv.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_iconv_h + fi + NEXT_AS_FIRST_DIRECTIVE_ICONV_H=$gl_next_as_first_directive + + + + + # Code from module iconv_open: + + + + + if test "$am_cv_func_iconv" = yes; then + + + ICONV_H='iconv.h' + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <iconv.h> + #if defined _LIBICONV_VERSION || defined __GLIBC__ + gnu_iconv + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "gnu_iconv" >/dev/null 2>&1; then : + gl_func_iconv_gnu=yes +else + gl_func_iconv_gnu=no +fi +rm -f conftest* + + if test $gl_func_iconv_gnu = no; then + iconv_flavor= + case "$host_os" in + aix*) iconv_flavor=ICONV_FLAVOR_AIX ;; + irix*) iconv_flavor=ICONV_FLAVOR_IRIX ;; + hpux*) iconv_flavor=ICONV_FLAVOR_HPUX ;; + osf*) iconv_flavor=ICONV_FLAVOR_OSF ;; + solaris*) iconv_flavor=ICONV_FLAVOR_SOLARIS ;; + esac + if test -n "$iconv_flavor"; then + +cat >>confdefs.h <<_ACEOF +#define ICONV_FLAVOR $iconv_flavor +_ACEOF + + + + + ICONV_H='iconv.h' + + REPLACE_ICONV_OPEN=1 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS iconv_open.$ac_objext" + + + fi + fi + fi + + # Code from module ignore-value: + + # Code from module include_next: + # Code from module inline: + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler generally respects inline" >&5 +$as_echo_n "checking whether the compiler generally respects inline... " >&6; } +if test "${gl_cv_c_inline_effective+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test $ac_cv_c_inline = no; then + gl_cv_c_inline_effective=no + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifdef __NO_INLINE__ + #error "inline is not effective" + #endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_c_inline_effective=yes +else + gl_cv_c_inline_effective=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_inline_effective" >&5 +$as_echo "$gl_cv_c_inline_effective" >&6; } + if test $gl_cv_c_inline_effective = yes; then + +$as_echo "#define HAVE_INLINE 1" >>confdefs.h + + fi + + # Code from module intprops: + # Code from module inttostr: + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS imaxtostr.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS offtostr.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS umaxtostr.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS uinttostr.$ac_objext" + + + + + : + + : + : + : + : + + # Code from module inttypes: + + + + + : + + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether inttypes.h conforms to C99" >&5 +$as_echo_n "checking whether inttypes.h conforms to C99... " >&6; } +if test "${gl_cv_header_working_inttypes_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_header_working_inttypes_h=no + if test "$gl_cv_header_working_stdint_h" = yes \ + && test $ac_cv_header_inttypes_h = yes \ + && test "$ac_cv_have_decl_imaxabs" = yes \ + && test "$ac_cv_have_decl_imaxdiv" = yes \ + && test "$ac_cv_have_decl_strtoimax" = yes \ + && test "$ac_cv_have_decl_strtoumax" = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include <stddef.h> +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_FORMAT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* work if build isn't clean */ +#include <inttypes.h> + +/* No need to duplicate the tests of stdint.m4; they are subsumed by + $gl_cv_header_working_stdint_h = yes. */ + +/* Tests for macros supposed to be defined in inttypes.h. */ + +const char *k = /* implicit string concatenation */ +#ifdef INT8_MAX + PRId8 PRIi8 +#endif +#ifdef UINT8_MAX + PRIo8 PRIu8 PRIx8 PRIX8 +#endif +#ifdef INT16_MAX + PRId16 PRIi16 +#endif +#ifdef UINT16_MAX + PRIo16 PRIu16 PRIx16 PRIX16 +#endif +#ifdef INT32_MAX + PRId32 PRIi32 +#endif +#ifdef UINT32_MAX + PRIo32 PRIu32 PRIx32 PRIX32 +#endif +#ifdef INT64_MAX + PRId64 PRIi64 +#endif +#ifdef UINT64_MAX + PRIo64 PRIu64 PRIx64 PRIX64 +#endif + PRIdLEAST8 PRIiLEAST8 PRIoLEAST8 PRIuLEAST8 PRIxLEAST8 PRIXLEAST8 + PRIdLEAST16 PRIiLEAST16 PRIoLEAST16 PRIuLEAST16 PRIxLEAST16 PRIXLEAST16 + PRIdLEAST32 PRIiLEAST32 PRIoLEAST32 PRIuLEAST32 PRIxLEAST32 PRIXLEAST32 + PRIdLEAST64 PRIiLEAST64 + PRIoLEAST64 PRIuLEAST64 PRIxLEAST64 PRIXLEAST64 + PRIdFAST8 PRIiFAST8 PRIoFAST8 PRIuFAST8 PRIxFAST8 PRIXFAST8 + PRIdFAST16 PRIiFAST16 PRIoFAST16 PRIuFAST16 PRIxFAST16 PRIXFAST16 + PRIdFAST32 PRIiFAST32 PRIoFAST32 PRIuFAST32 PRIxFAST32 PRIXFAST32 + PRIdFAST64 PRIiFAST64 + PRIoFAST64 PRIuFAST64 PRIxFAST64 PRIXFAST64 + PRIdMAX PRIiMAX PRIoMAX PRIuMAX PRIxMAX PRIXMAX +#ifdef INTPTR_MAX + PRIdPTR PRIiPTR +#endif +#ifdef UINTPTR_MAX + PRIoPTR PRIuPTR PRIxPTR PRIXPTR +#endif + ; +const char *l = /* implicit string concatenation */ +#ifdef INT8_MAX + SCNd8 SCNi8 +#endif +#ifdef UINT8_MAX + SCNo8 SCNu8 SCNx8 +#endif +#ifdef INT16_MAX + SCNd16 SCNi16 +#endif +#ifdef UINT16_MAX + SCNo16 SCNu16 SCNx16 +#endif +#ifdef INT32_MAX + SCNd32 SCNi32 +#endif +#ifdef UINT32_MAX + SCNo32 SCNu32 SCNx32 +#endif +#ifdef INT64_MAX + SCNd64 SCNi64 +#endif +#ifdef UINT64_MAX + SCNo64 SCNu64 SCNx64 +#endif + SCNdLEAST8 SCNiLEAST8 SCNoLEAST8 SCNuLEAST8 SCNxLEAST8 + SCNdLEAST16 SCNiLEAST16 SCNoLEAST16 SCNuLEAST16 SCNxLEAST16 + SCNdLEAST32 SCNiLEAST32 SCNoLEAST32 SCNuLEAST32 SCNxLEAST32 + SCNdLEAST64 SCNiLEAST64 + SCNoLEAST64 SCNuLEAST64 SCNxLEAST64 + SCNdFAST8 SCNiFAST8 SCNoFAST8 SCNuFAST8 SCNxFAST8 + SCNdFAST16 SCNiFAST16 SCNoFAST16 SCNuFAST16 SCNxFAST16 + SCNdFAST32 SCNiFAST32 SCNoFAST32 SCNuFAST32 SCNxFAST32 + SCNdFAST64 SCNiFAST64 + SCNoFAST64 SCNuFAST64 SCNxFAST64 + SCNdMAX SCNiMAX SCNoMAX SCNuMAX SCNxMAX +#ifdef INTPTR_MAX + SCNdPTR SCNiPTR +#endif +#ifdef UINTPTR_MAX + SCNoPTR SCNuPTR SCNxPTR +#endif + ; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_working_inttypes_h=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_inttypes_h" >&5 +$as_echo "$gl_cv_header_working_inttypes_h" >&6; } + + + + + + + : + + + + + + + + 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 test "${gl_cv_next_inttypes_h+set}" = set; 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 + gl_cv_next_inttypes_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/inttypes.h#{ + s#.*"\(.*/inttypes.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + 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 + + + + + + + +$as_echo "#define GL_TRIGGER_STDC_LIMIT_MACROS 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 + + + if test "$ac_cv_have_decl_imaxabs" = yes; then + HAVE_DECL_IMAXABS=1 + else + HAVE_DECL_IMAXABS=0 + fi + + if test "$ac_cv_have_decl_imaxdiv" = yes; then + HAVE_DECL_IMAXDIV=1 + else + HAVE_DECL_IMAXDIV=0 + fi + + if test "$ac_cv_have_decl_strtoimax" = yes; then + HAVE_DECL_STRTOIMAX=1 + else + HAVE_DECL_STRTOIMAX=0 + fi + + if test "$ac_cv_have_decl_strtoumax" = yes; then + HAVE_DECL_STRTOUMAX=1 + else + HAVE_DECL_STRTOUMAX=0 + 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 test "${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+set}" = set; 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 test "${gl_cv_test_INT64_MAX_EQ_LONG_MAX+set}" = set; 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 test "${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+set}" = set; 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 test "${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+set}" = set; 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 + + + for gl_func in imaxabs imaxdiv strtoimax strtoumax; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <inttypes.h> + +int +main () +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval as_val=\$$as_gl_Symbol + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + # Code from module langinfo: + + + + + + + + + + : + + + + + + + + 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 test "${gl_cv_next_langinfo_h+set}" = set; 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 + gl_cv_next_langinfo_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/langinfo.h#{ + s#.*"\(.*/langinfo.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + 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_ERA=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 test "${gl_cv_header_langinfo_codeset+set}" = set; 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 ERA" >&5 +$as_echo_n "checking whether langinfo.h defines ERA... " >&6; } +if test "${gl_cv_header_langinfo_era+set}" = set; 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 + else + HAVE_LANGINFO_H=0 + fi + + + + + + for gl_func in nl_langinfo; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> + +int +main () +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval as_val=\$$as_gl_Symbol + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + # Code from module libsigsegv: + + + + + + + + + + + + + + + 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-libsigsegv-prefix was given. +if test "${with_libsigsegv_prefix+set}" = set; then : + withval=$with_libsigsegv_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 + + LIBSIGSEGV= + LTLIBSIGSEGV= + INCSIGSEGV= + LIBSIGSEGV_PREFIX= + HAVE_LIBSIGSEGV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='sigsegv ' + 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" || LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }$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 $LTLIBSIGSEGV; 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 + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-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 + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$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 + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$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 $LIBSIGSEGV; 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 + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_so" + else + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_a" + else + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-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" = 'sigsegv'; then + LIBSIGSEGV_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" = 'sigsegv'; then + LIBSIGSEGV_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 $INCSIGSEGV; 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 + INCSIGSEGV="${INCSIGSEGV}${INCSIGSEGV:+ }-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 $LIBSIGSEGV; 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 + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBSIGSEGV; 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 + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-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$,,'` + ;; + *) + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$dep" + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }$dep" + ;; + esac + done + fi + else + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-l$name" + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-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" + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$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" + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-R$found_dir" + done + fi + + + + + + + + ac_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCSIGSEGV; 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 libsigsegv" >&5 +$as_echo_n "checking for libsigsegv... " >&6; } +if test "${ac_cv_libsigsegv+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + ac_save_LIBS="$LIBS" + case " $LIBSIGSEGV" in + *" -l"*) LIBS="$LIBS $LIBSIGSEGV" ;; + *) LIBS="$LIBSIGSEGV $LIBS" ;; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sigsegv.h> +int +main () +{ +sigsegv_deinstall_handler(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_libsigsegv=yes +else + ac_cv_libsigsegv='no, consider installing GNU libsigsegv' +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_libsigsegv" >&5 +$as_echo "$ac_cv_libsigsegv" >&6; } + if test "$ac_cv_libsigsegv" = yes; then + HAVE_LIBSIGSEGV=yes + +$as_echo "#define HAVE_LIBSIGSEGV 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libsigsegv" >&5 +$as_echo_n "checking how to link with libsigsegv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBSIGSEGV" >&5 +$as_echo "$LIBSIGSEGV" >&6; } + else + HAVE_LIBSIGSEGV=no + CPPFLAGS="$ac_save_CPPFLAGS" + LIBSIGSEGV= + LTLIBSIGSEGV= + LIBSIGSEGV_PREFIX= + fi + + + + + + + + gl_cv_lib_sigsegv="$ac_cv_libsigsegv" + + # Code from module localcharset: + + + + + : + + + + + + + + + + LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(top_builddir)/$gl_source_base\"" + + # Code from module lstat: + + + + : + + + + + + if test $ac_cv_func_lstat = yes; then + + if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then + REPLACE_LSTAT=1 + fi + # Prerequisites of lib/lstat.c. + + else + HAVE_LSTAT=0 + fi + + + + + GNULIB_LSTAT=1 + + + +$as_echo "#define GNULIB_TEST_LSTAT 1" >>confdefs.h + + + + # Code from module maintainer-makefile: + + # Code from module malloc: + 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" = x""yes; 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 test "${ac_cv_func_malloc_0_nonnull+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +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 () +{ +return ! malloc (0); + ; + 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 : + +$as_echo "#define HAVE_MALLOC 1" >>confdefs.h + +else + $as_echo "#define HAVE_MALLOC 0" >>confdefs.h + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" + + +$as_echo "#define malloc rpl_malloc" >>confdefs.h + +fi + + + +$as_echo "#define GNULIB_MALLOC_GNU 1" >>confdefs.h + + # Code from module malloc-posix: + + + if test $gl_cv_func_malloc_posix = yes; then + HAVE_MALLOC_POSIX=1 + +$as_echo "#define HAVE_MALLOC_POSIX 1" >>confdefs.h + + else + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" + + HAVE_MALLOC_POSIX=0 + fi + + + + + + GNULIB_MALLOC_POSIX=1 + + + +$as_echo "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h + + + + # Code from module malloca: + + + + + # Code from module manywarnings: + # Code from module mbchar: + + + + + # Code from module mbiter: + + + + + : + + # Code from module mbrlen: + + + + + + + : + + + + + + if test $ac_cv_func_mbrlen = no; then + HAVE_MBRLEN=0 + 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 + + + + # Code from module mbrtowc: + + + + + + + + + + : + + + + + + + : + + + + + + 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 test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + 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> +#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 1; + } + 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 test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; 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> +#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 1; + } + 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 $REPLACE_MBSTATE_T = 1; then + + : + + fi + + + + : + + + + + + if test $ac_cv_func_mbrtowc = no; then + HAVE_MBRTOWC=0 + 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 string argument" >&5 +$as_echo_n "checking whether mbrtowc handles a NULL string argument... " >&6; } +if test "${gl_cv_func_mbrtowc_null_arg+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on OSF/1. + osf*) gl_cv_func_mbrtowc_null_arg="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg="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> +#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 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_null_arg=yes +else + gl_cv_func_mbrtowc_null_arg=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_arg" >&5 +$as_echo "$gl_cv_func_mbrtowc_null_arg" >&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 test "${gl_cv_func_mbrtowc_retval+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on HP-UX and Solaris. + hpux* | solaris*) 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; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + /* 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) + return 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) + return 1; + } + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_retval=yes +else + gl_cv_func_mbrtowc_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_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 test "${gl_cv_func_mbrtowc_nul_retval+set}" = set; 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> +#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 1; + } + 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; } + + case "$gl_cv_func_mbrtowc_null_arg" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NULL_ARG_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 + 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 + + + + # Code from module mbscasecmp: + + + + GNULIB_MBSCASECMP=1 + + + +$as_echo "#define GNULIB_TEST_MBSCASECMP 1" >>confdefs.h + + + + # Code from module mbsinit: + + + + + + + + + + : + + + + + + + : + + + + + + 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 test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + 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> +#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 1; + } + 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 test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; 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> +#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 1; + } + 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 $REPLACE_MBSTATE_T = 1; then + + : + + fi + + + + : + + + + + + if test $ac_cv_func_mbsinit = no; then + HAVE_MBSINIT=0 + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBSINIT=1 + 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 + + + + # Code from module mbslen: + + + + : + + + + + + if test $ac_cv_func_mbslen = yes; then + HAVE_MBSLEN=1 + else + HAVE_MBSLEN=0 + fi + + + + + GNULIB_MBSLEN=1 + + + +$as_echo "#define GNULIB_TEST_MBSLEN 1" >>confdefs.h + + + + # Code from module mbsrtowcs: + + + + + + + + + + : + + + + + + + : + + + + + + 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 test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + 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> +#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 1; + } + 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 test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; 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> +#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 1; + } + 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 $REPLACE_MBSTATE_T = 1; then + + : + + fi + + + + : + + + + + + if test $ac_cv_func_mbsrtowcs = no; then + HAVE_MBSRTOWCS=0 + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBSRTOWCS=1 + else + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbsrtowcs works" >&5 +$as_echo_n "checking whether mbsrtowcs works... " >&6; } +if test "${gl_cv_func_mbsrtowcs_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on HP-UX and Solaris. + hpux* | solaris*) gl_cv_func_mbsrtowcs_works="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbsrtowcs_works="guessing yes" ;; + esac + if 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> +#include <wchar.h> +int main () +{ + /* Test whether the function works when started with a conversion state + in non-initial state. This fails on HP-UX 11.11 and Solaris 10. */ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + const char input[] = "B\303\274\303\237er"; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2)) + if (!mbsinit (&state)) + { + const char *src = input + 2; + if (mbsrtowcs (NULL, &src, 10, &state) != 4) + return 1; + } + } + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "<\306\374\313\334\270\354>"; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (NULL, input + 3, 1, &state) == (size_t)(-2)) + if (!mbsinit (&state)) + { + const char *src = input + 4; + if (mbsrtowcs (NULL, &src, 10, &state) != 3) + return 1; + } + } + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + const char input[] = "B\250\271\201\060\211\070er"; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2)) + if (!mbsinit (&state)) + { + const char *src = input + 2; + if (mbsrtowcs (NULL, &src, 10, &state) != 4) + return 1; + } + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbsrtowcs_works=yes +else + gl_cv_func_mbsrtowcs_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_mbsrtowcs_works" >&5 +$as_echo "$gl_cv_func_mbsrtowcs_works" >&6; } + + case "$gl_cv_func_mbsrtowcs_works" in + *yes) ;; + *) REPLACE_MBSRTOWCS=1 ;; + esac + fi + fi + if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then + + : + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs-state.$ac_objext" + + + : + + fi + + + + + GNULIB_MBSRTOWCS=1 + + + +$as_echo "#define GNULIB_TEST_MBSRTOWCS 1" >>confdefs.h + + + + # Code from module mbsstr: + + + + GNULIB_MBSSTR=1 + + + +$as_echo "#define GNULIB_TEST_MBSSTR 1" >>confdefs.h + + + + # Code from module mbuiter: + + + + + : + + # Code from module memchr: + + + + + GNULIB_MEMCHR=1 + + + +$as_echo "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h + + + + # Code from module mkstemp: + + + + + + : + + + + + + 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 test "${gl_cv_func_working_mkstemp+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + mkdir conftest.mkstemp + if test "$cross_compiling" = yes; then : + gl_cv_func_working_mkstemp=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +int i; + off_t large = (off_t) 4294967295u; + if (large < 0) + large = 2147483647; + for (i = 0; i < 70; i++) + { + char templ[] = "conftest.mkstemp/coXXXXXX"; + int (*mkstemp_function) (char *) = mkstemp; + int fd = mkstemp_function (templ); + if (fd < 0 || lseek (fd, large, SEEK_SET) != large) + return 1; + close (fd); + } + return 0; + ; + 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; } + if test $gl_cv_func_working_mkstemp != yes; then + REPLACE_MKSTEMP=1 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mkstemp.$ac_objext" + + + + fi + else + HAVE_MKSTEMP=0 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mkstemp.$ac_objext" + + + + fi + + + + + GNULIB_MKSTEMP=1 + + + +$as_echo "#define GNULIB_TEST_MKSTEMP 1" >>confdefs.h + + + + # Code from module mktime: + + + + : + + + + + + + : + + + + + + +if test $APPLE_UNIVERSAL_BUILD = 1; then + # A universal build on Apple MacOS 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. + ac_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 test "${ac_cv_func_working_mktime+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_working_mktime=no +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 + +#ifndef HAVE_ALARM +# define alarm(X) /* empty */ +#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 () +{ + time_t t, delta; + int i, j; + + /* This test makes some buggy mktime implementations loop. + Give up after 60 seconds; a mktime slower than that + isn't worth using anyway. */ + alarm (60); + + for (;;) + { + t = (time_t_max << 1) + 1; + if (t <= time_t_max) + break; + time_t_max = t; + } + time_t_min = - ((time_t) ~ (time_t) 0 == (time_t) -1) - 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; t += delta) + if (! mktime_test (t)) + return 1; + if (! (mktime_test ((time_t) 1) + && mktime_test ((time_t) (60 * 60)) + && mktime_test ((time_t) (60 * 60 * 24)))) + return 1; + + for (j = 1; ; j <<= 1) + if (! bigtime_test (j)) + return 1; + else if (INT_MAX / 2 < j) + break; + if (! bigtime_test (INT_MAX)) + return 1; + } + return ! (irix_6_4_bug () && spring_forward_gap () && year_2050_test ()); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_working_mktime=yes +else + ac_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: $ac_cv_func_working_mktime" >&5 +$as_echo "$ac_cv_func_working_mktime" >&6; } +if test $ac_cv_func_working_mktime = no; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mktime.$ac_objext" + +fi + + if test $ac_cv_func_working_mktime = no; then + REPLACE_MKTIME=1 + + + + else + REPLACE_MKTIME=0 + fi + + + + + GNULIB_MKTIME=1 + + + +$as_echo "#define GNULIB_TEST_MKTIME 1" >>confdefs.h + + + + # Code from module multiarch: + + # Code from module nl_langinfo: + + + + + : + + + + + + if test $ac_cv_func_nl_langinfo = yes; then + if test $HAVE_LANGINFO_CODESET = 1 && test $HAVE_LANGINFO_ERA = 1; then + : + else + REPLACE_NL_LANGINFO=1 + +$as_echo "#define REPLACE_NL_LANGINFO 1" >>confdefs.h + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS nl_langinfo.$ac_objext" + + fi + else + HAVE_NL_LANGINFO=0 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS nl_langinfo.$ac_objext" + + fi + + + + + GNULIB_NL_LANGINFO=1 + + + +$as_echo "#define GNULIB_TEST_NL_LANGINFO 1" >>confdefs.h + + + + # Code from module open: + + + case "$host_os" in + mingw* | pw*) + + + REPLACE_OPEN=1 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS open.$ac_objext" + + + + + : + + + ;; + *) + + : + + + + + + { $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 test "${gl_cv_func_open_slash+set}" = set; 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*) gl_cv_func_open_slash="guessing no" ;; + solaris2.[0-9]*) gl_cv_func_open_slash="guessing no" ;; + hpux*) 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 () +{ +#if HAVE_LSTAT + if (open ("conftest.lnk/", O_RDONLY) != -1) return 2; +#endif + return open ("conftest.sl/", O_CREAT, 0600) >= 0; +} +_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 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS open.$ac_objext" + + + + + : + + + ;; + esac + ;; + esac + + + + + GNULIB_OPEN=1 + + + +$as_echo "#define GNULIB_TEST_OPEN 1" >>confdefs.h + + + + # Code from module progname: + 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" = x""yes; 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" = x""yes; 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 + + # Code from module propername: + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --keyword='proper_name:1,\"This is a proper name. See the gettext manual, section Names.\"'" + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --keyword='proper_name_utf8:1,\"This is a proper name. See the gettext manual, section Names.\"'" + + # Code from module quote: + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS quote.$ac_objext" + + + + # Code from module quotearg: + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS quotearg.$ac_objext" + + + # Code from module regex: + + + : + + + + + + + +# 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 test "${gl_cv_func_re_compile_pattern_working+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_func_re_compile_pattern_working=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + #if HAVE_LOCALE_H + #include <locale.h> + #endif + #include <limits.h> + #include <regex.h> + +int +main () +{ +static struct re_pattern_buffer regex; + unsigned char folded_chars[UCHAR_MAX + 1]; + int i; + const char *s; + struct re_registers regs; + + #if HAVE_LOCALE_H + /* http://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. */ + if (setlocale (LC_ALL, "en_US.UTF-8")) + { + 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) + return 1; + if (re_search (®ex, data, sizeof data - 1, + 0, sizeof data - 1, ®s) + != -1) + return 1; + if (! setlocale (LC_ALL, "C")) + return 1; + } + #endif + + /* 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) + return 1; + + /* This should fail, but succeeds for glibc-2.5. */ + if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) + return 1; + + /* 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) + return 1; + + /* 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) + return 1; + + /* 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) + return 1; + + /* 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) + return 1; + + /* This should match, but does not for glibc-2.2.1. */ + if (re_match (®ex, "an", 2, 0, ®s) != 2) + return 1; + + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("x", 1, ®ex); + if (s) + return 1; + + /* glibc-2.2.93 does not work with a negative RANGE argument. */ + if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) + return 1; + + /* 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) + return 1; + + if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) + return 1; + + /* Catch a bug reported by Vin Shelton in + http://lists.gnu.org/archive/html/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) + return 1; + + /* REG_STARTEND was added to glibc on 2004-01-15. + Reject older versions. */ + if (! REG_STARTEND) + return 1; + + /* Reject hosts whose regoff_t values are too narrow. + These include glibc 2.3.5 on hosts with 64-bit ptrdiff_t + and 32-bit int. */ + if (sizeof (regoff_t) < sizeof (ptrdiff_t) + || sizeof (regoff_t) < sizeof (ssize_t)) + return 1; + + return 0; + ; + 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_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 + + + + + + + + + + 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" = x""yes; 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" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ISBLANK $ac_have_decl +_ACEOF + + + fi + + # Code from module sh-quote: + # Code from module sigaction: + + + + : + + + + + + 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" = x""yes; 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 + + + + + + + + + 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" = x""yes; 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 + + + + # Code from module signal: + + + + + + + : + + + + + + + + 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 test "${gl_cv_next_signal_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_signal_h = yes; then + 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 + gl_cv_next_signal_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/signal.h#{ + s#.*"\(.*/signal.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_signal_h='<'signal.h'>' + fi + +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" = x""yes; then : + +else + HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0 +fi + + + + + for gl_func in sigaction sigaddset sigdelset sigemptyset sigfillset sigismember sigpending sigprocmask; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <signal.h> + +int +main () +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval as_val=\$$as_gl_Symbol + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + # Code from module sigprocmask: + + + signals_not_posix= + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <signal.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sigset_t" >/dev/null 2>&1; then : + +else + signals_not_posix=1 +fi +rm -f conftest* + + if test -z "$signals_not_posix"; then + ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" +if test "x$ac_cv_func_sigprocmask" = x""yes; then : + gl_cv_func_sigprocmask=1 +fi + + fi + if test -z "$gl_cv_func_sigprocmask"; then + HAVE_POSIX_SIGNALBLOCKING=0 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS sigprocmask.$ac_objext" + + + + 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" = x""yes; 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 + + + fi + + + + + GNULIB_SIGPROCMASK=1 + + + +$as_echo "#define GNULIB_TEST_SIGPROCMASK 1" >>confdefs.h + + + + # Code from module ssize_t: + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 +$as_echo_n "checking for ssize_t... " >&6; } +if test "${gt_cv_ssize_t+set}" = set; 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 + + # Code from module stat: + + + + + : + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat handles trailing slashes on directories" >&5 +$as_echo_n "checking whether stat handles trailing slashes on directories... " >&6; } +if test "${gl_cv_func_stat_dir_slash+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case $host_os in + mingw*) gl_cv_func_stat_dir_slash="guessing no";; + *) gl_cv_func_stat_dir_slash="guessing yes";; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/stat.h> + +int +main () +{ +struct stat st; return stat (".", &st) != stat ("./", &st); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_stat_dir_slash=yes +else + gl_cv_func_stat_dir_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 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_stat_dir_slash" >&5 +$as_echo "$gl_cv_func_stat_dir_slash" >&6; } + { $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 test "${gl_cv_func_stat_file_slash+set}" = set; 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 : + gl_cv_func_stat_file_slash="guessing no" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/stat.h> + +int +main () +{ +struct stat st; + if (!stat ("conftest.tmp/", &st)) return 1; +#if HAVE_LSTAT + if (!stat ("conftest.lnk/", &st)) return 2; +#endif + + ; + 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_dir_slash in + *no) REPLACE_STAT=1 + +$as_echo "#define REPLACE_FUNC_STAT_DIR 1" >>confdefs.h +;; + esac + case $gl_cv_func_stat_file_slash in + *no) REPLACE_STAT=1 + +$as_echo "#define REPLACE_FUNC_STAT_FILE 1" >>confdefs.h +;; + esac + if test $REPLACE_STAT = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS stat.$ac_objext" + + + fi + + + + + GNULIB_STAT=1 + + + +$as_echo "#define GNULIB_TEST_STAT 1" >>confdefs.h + + + + # Code from module stat-macros: + # Code from module stat-time: + + + + + : + + + + + + + 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" = x""yes; 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 test "${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+set}" = set; 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" = x""yes; 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" = x""yes; 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" = x""yes; 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" = x""yes; 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" = x""yes; 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" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC 1 +_ACEOF + + +fi + +fi + +fi + + + # Code from module stdarg: + + 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 test "${gl_cv_func_va_copy+set}" = set; 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 test "${gl_cv_next_stdarg_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_stdarg_h = yes; then + 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 + gl_cv_next_stdarg_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/stdarg.h#{ + s#.*"\(.*/stdarg.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_stdarg_h='<'stdarg.h'>' + fi + +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 test "${gl_cv_func___va_copy+set}" = set; 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 + + # Code from module 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 + + + if test "$ac_cv_type__Bool" = yes; then + HAVE__BOOL=1 + else + HAVE__BOOL=0 + fi + + + # Code from module stddef: + + + + 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 test "${gl_cv_decl_null_works+set}" = set; 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 + + + + + : + + + + + + + + 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 test "${gl_cv_next_stddef_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_stddef_h = yes; then + 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 + gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/stddef.h#{ + s#.*"\(.*/stddef.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_stddef_h='<'stddef.h'>' + fi + +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 + + # Code from module stdint: + + + + 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_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 test "${gl_cv_next_stdint_h+set}" = set; 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 + gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/stdint.h#{ + s#.*"\(.*/stdint.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + 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 test "${gl_cv_header_working_stdint_h+set}" = set; 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 __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#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; + +#include <limits.h> /* for CHAR_BIT */ +#define TYPE_MINIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +#define TYPE_MAXIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 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 : + gl_cv_header_working_stdint_h=yes + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#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 + + +#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 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 + if test "$gl_cv_header_working_stdint_h" = yes; then + STDINT_H= + else + 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" +eval as_val=\$$as_ac_Header + if test "x$as_val" = 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 + else + HAVE_SYS_INTTYPES_H=0 + fi + + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + else + HAVE_SYS_BITYPES_H=0 + 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 { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; 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 { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; 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 { as_var=gl_cv_type_${gltype}_signed; eval "test \"\${$as_var+set}\" = set"; }; 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 { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; 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 { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; 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 + + + + STDINT_H=stdint.h + fi + + + # Code from module stdio: + + + + + + + + : + + + + + + + + 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 test "${gl_cv_next_stdio_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_stdio_h = yes; then + 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 + gl_cv_next_stdio_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/stdio.h#{ + s#.*"\(.*/stdio.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_stdio_h='<'stdio.h'>' + fi + +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 + + + + 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 + + + + for gl_func in dprintf fpurge fseeko ftello getdelim getline popen renameat snprintf tmpfile vdprintf vsnprintf; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> + +int +main () +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval as_val=\$$as_gl_Symbol + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + # Code from module stdlib: + + + + + + + : + + + + + + + + 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 test "${gl_cv_next_stdlib_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_stdlib_h = yes; then + 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 + gl_cv_next_stdlib_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/stdlib.h#{ + s#.*"\(.*/stdlib.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_stdlib_h='<'stdlib.h'>' + fi + +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_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" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RANDOM_H 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_random_h = yes; then + HAVE_RANDOM_H=1 + else + 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" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_RANDOM_DATA 1 +_ACEOF + + +else + HAVE_STRUCT_RANDOM_DATA=0 +fi + + + + for gl_func in atoll canonicalize_file_name getloadavg getsubopt grantpt mkdtemp mkostemp mkostemps mkstemp mkstemps ptsname random_r initstat_r srandom_r setstate_r realpath rpmatch setenv strtod strtoll strtoull unlockpt unsetenv; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#if HAVE_SYS_LOADAVG_H +# include <sys/loadavg.h> +#endif +#if HAVE_RANDOM_H +# include <random.h> +#endif + +int +main () +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval as_val=\$$as_gl_Symbol + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + # Code from module strcase: + + + + + + + + + + + + for ac_func in strcasecmp +do : + ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" +if test "x$ac_cv_func_strcasecmp" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRCASECMP 1 +_ACEOF + +else + + gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext" + +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" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRNCASECMP 1 +_ACEOF + +else + + gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + if test $ac_cv_func_strncasecmp = no; then + + : + + fi + ac_fn_c_check_decl "$LINENO" "strncasecmp" "ac_cv_have_decl_strncasecmp" "$ac_includes_default" +if test "x$ac_cv_have_decl_strncasecmp" = x""yes; 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 + + + # Code from module streq: + # Code from module strerror: + + + if test $REPLACE_STRERROR = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strerror.$ac_objext" + + +cat >>confdefs.h <<_ACEOF +#define REPLACE_STRERROR $REPLACE_STRERROR +_ACEOF + + fi + + + + + GNULIB_STRERROR=1 + + + +$as_echo "#define GNULIB_TEST_STRERROR 1" >>confdefs.h + + + + # Code from module strftime: + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strftime.$ac_objext" + + + # This defines (or not) HAVE_TZNAME and HAVE_TM_ZONE. + + + + + + + : + + + + + + + : + + + + + + + +$as_echo "#define my_strftime nstrftime" >>confdefs.h + + + + # Code from module striconv: + if test $gl_cond_libtool = false; then + gl_ltlibdeps="$gl_ltlibdeps $LTLIBICONV" + gl_libdeps="$gl_libdeps $LIBICONV" + fi + # Code from module string: + + + + # Code from module strings: + + + + # Code from module strndup: + + + + + + : + + + + + + + : + + + + + + if test $ac_cv_have_decl_strndup = no; then + HAVE_DECL_STRNDUP=0 + fi + + if test $ac_cv_func_strndup = yes; then + # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strndup" >&5 +$as_echo_n "checking for working strndup... " >&6; } +if test "${gl_cv_func_strndup_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case $host_os in + aix*) gl_cv_func_strndup_works="guessing no";; + *) gl_cv_func_strndup_works="guessing yes";; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <string.h> + #include <stdlib.h> +int +main () +{ + +#ifndef HAVE_DECL_STRNDUP + extern char *strndup (const char *, size_t); +#endif + char *s; + s = strndup ("some longer string", 15); + free (s); + s = strndup ("shorter string", 13); + return s[13] != '\0'; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strndup_works=yes +else + gl_cv_func_strndup_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_strndup_works" >&5 +$as_echo "$gl_cv_func_strndup_works" >&6; } + case $gl_cv_func_strndup_works in + *no) + REPLACE_STRNDUP=1 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strndup.$ac_objext" + + ;; + esac + else + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strndup.$ac_objext" + + fi + + + + + GNULIB_STRNDUP=1 + + + +$as_echo "#define GNULIB_TEST_STRNDUP 1" >>confdefs.h + + + + # Code from module strnlen: + + + + + + + : + + + + + + if test $ac_cv_have_decl_strnlen = no; then + HAVE_DECL_STRNLEN=0 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strnlen" >&5 +$as_echo_n "checking for working strnlen... " >&6; } +if test "${ac_cv_func_strnlen_working+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_strnlen_working=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + +#define S "foobar" +#define S_LEN (sizeof S - 1) + + /* At least one implementation is buggy: that of AIX 4.3 would + give strnlen (S, 1) == 3. */ + + int i; + for (i = 0; i < S_LEN + 1; ++i) + { + int expected = i <= S_LEN ? i : S_LEN; + if (strnlen (S, i) != expected) + return 1; + } + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_strnlen_working=yes +else + ac_cv_func_strnlen_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: $ac_cv_func_strnlen_working" >&5 +$as_echo "$ac_cv_func_strnlen_working" >&6; } +test $ac_cv_func_strnlen_working = no && + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strnlen.$ac_objext" + + + if test $ac_cv_func_strnlen_working = no; then + REPLACE_STRNLEN=1 + fi + fi + if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strnlen.$ac_objext" + + : + fi + + + + + GNULIB_STRNLEN=1 + + + +$as_echo "#define GNULIB_TEST_STRNLEN 1" >>confdefs.h + + + + # Code from module strnlen1: + # Code from module strptime: + + + + + : + + + + + + if test $ac_cv_func_strptime != yes; then + HAVE_STRPTIME=0 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strptime.$ac_objext" + + + + : + + fi + + + + + GNULIB_STRPTIME=1 + + + +$as_echo "#define GNULIB_TEST_STRPTIME 1" >>confdefs.h + + + + # Code from module strtoimax: + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <inttypes.h> defines strtoimax as a macro" >&5 +$as_echo_n "checking whether <inttypes.h> defines strtoimax as a macro... " >&6; } +if test "${gl_cv_func_strtoimax_macro+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <inttypes.h> +#ifdef strtoimax + inttypes_h_defines_strtoimax +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "inttypes_h_defines_strtoimax" >/dev/null 2>&1; then : + gl_cv_func_strtoimax_macro=yes +else + gl_cv_func_strtoimax_macro=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strtoimax_macro" >&5 +$as_echo "$gl_cv_func_strtoimax_macro" >&6; } + + if test "$gl_cv_func_strtoimax_macro" != yes; then + + + + + + + + + for ac_func in strtoimax +do : + ac_fn_c_check_func "$LINENO" "strtoimax" "ac_cv_func_strtoimax" +if test "x$ac_cv_func_strtoimax" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRTOIMAX 1 +_ACEOF + +else + + gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + if test $ac_cv_func_strtoimax = no; then + + ac_fn_c_check_decl "$LINENO" "strtoll" "ac_cv_have_decl_strtoll" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoll" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOLL $ac_have_decl +_ACEOF + + + + fi + fi + + + + + GNULIB_STRTOIMAX=1 + + + # Code from module strtol: + + + + + + + + + + for ac_func in strtol +do : + ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" +if test "x$ac_cv_func_strtol" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRTOL 1 +_ACEOF + +else + + gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + + # Code from module strtoll: + + + + if test "$ac_cv_type_long_long_int" = yes; then + + + + + + + + + for ac_func in strtoll +do : + ac_fn_c_check_func "$LINENO" "strtoll" "ac_cv_func_strtoll" +if test "x$ac_cv_func_strtoll" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRTOLL 1 +_ACEOF + +else + + gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + if test $ac_cv_func_strtoll = no; then + HAVE_STRTOLL=0 + + : + + fi + fi + + + + + GNULIB_STRTOLL=1 + + + +$as_echo "#define GNULIB_TEST_STRTOLL 1" >>confdefs.h + + + + # Code from module strtoul: + + + + + + + + + + for ac_func in strtoul +do : + ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul" +if test "x$ac_cv_func_strtoul" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRTOUL 1 +_ACEOF + +else + + gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + + # Code from module strtoull: + + + + if test "$ac_cv_type_unsigned_long_long_int" = yes; then + + + + + + + + + for ac_func in strtoull +do : + ac_fn_c_check_func "$LINENO" "strtoull" "ac_cv_func_strtoull" +if test "x$ac_cv_func_strtoull" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRTOULL 1 +_ACEOF + +else + + gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + if test $ac_cv_func_strtoull = no; then + HAVE_STRTOULL=0 + + : + + fi + fi + + + + + GNULIB_STRTOULL=1 + + + +$as_echo "#define GNULIB_TEST_STRTOULL 1" >>confdefs.h + + + + # Code from module strtoumax: + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <inttypes.h> defines strtoumax as a macro" >&5 +$as_echo_n "checking whether <inttypes.h> defines strtoumax as a macro... " >&6; } +if test "${gl_cv_func_strtoumax_macro+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <inttypes.h> +#ifdef strtoumax + inttypes_h_defines_strtoumax +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "inttypes_h_defines_strtoumax" >/dev/null 2>&1; then : + gl_cv_func_strtoumax_macro=yes +else + gl_cv_func_strtoumax_macro=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strtoumax_macro" >&5 +$as_echo "$gl_cv_func_strtoumax_macro" >&6; } + + if test "$gl_cv_func_strtoumax_macro" != yes; then + + + + + + + + + for ac_func in strtoumax +do : + ac_fn_c_check_func "$LINENO" "strtoumax" "ac_cv_func_strtoumax" +if test "x$ac_cv_func_strtoumax" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRTOUMAX 1 +_ACEOF + +else + + gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + if test $ac_cv_func_strtoumax = no; then + + ac_fn_c_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoull" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOULL $ac_have_decl +_ACEOF + + + + fi + fi + + + + + GNULIB_STRTOUMAX=1 + + + # Code from module sys_stat: + + + + + + + + + + + + : + + + + + + + + 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 test "${gl_cv_next_sys_stat_h+set}" = set; 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 + gl_cv_next_sys_stat_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/sys/stat.h#{ + s#.*"\(.*/sys/stat.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + 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 + + + + + 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" = x""yes; then : + +else + +$as_echo "#define nlink_t int" >>confdefs.h + +fi + + + + for gl_func in fchmodat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat mknod mknodat stat utimensat; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/stat.h> + +int +main () +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval as_val=\$$as_gl_Symbol + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + + # Code from module sys_time: + + + + + # Code from module sys_wait: + + + + + + + + : + + + + + + + + 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 test "${gl_cv_next_sys_wait_h+set}" = set; 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 + gl_cv_next_sys_wait_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/sys/wait.h#{ + s#.*"\(.*/sys/wait.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + 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 + + + + + + # Code from module tempname: + + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS tempname.$ac_objext" + + + : + + + # Code from module time: + + + + # Code from module time_r: + + + + + + + + : + + + + + + if test $ac_cv_func_localtime_r = yes; then + { $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 test "${gl_cv_time_r_posix+set}" = set; 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 + + + + # Code from module timegm: + + + + REPLACE_TIMEGM=0 + + : + + + + + + if test $ac_cv_func_timegm = yes; then + if test $ac_cv_func_working_mktime = no; 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" + + + + + if test $ac_cv_func_working_mktime = yes; then + ac_fn_c_check_func "$LINENO" "__mktime_internal" "ac_cv_func___mktime_internal" +if test "x$ac_cv_func___mktime_internal" = x""yes; then : + +else + # mktime works but it doesn't export __mktime_internal, + # so we need to substitute our own mktime implementation. + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mktime.$ac_objext" + + +$as_echo "#define mktime rpl_mktime" >>confdefs.h + + + + +fi + + fi + + fi + + + + + GNULIB_TIMEGM=1 + + + +$as_echo "#define GNULIB_TEST_TIMEGM 1" >>confdefs.h + + + + # Code from module timespec: + + + + # Code from module trim: + # Code from module unistd: + + + + + + + + + : + + + + + + + + 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 test "${gl_cv_next_unistd_h+set}" = set; 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 + gl_cv_next_unistd_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/unistd.h#{ + s#.*"\(.*/unistd.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + 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 + + + + for gl_func in chown dup2 dup3 environ euidaccess faccessat fchdir fchownat fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getusershell setusershell endusershell lchown link linkat lseek pipe2 pread readlink readlinkat rmdir sleep symlink symlinkat ttyname_r unlink unlinkat usleep; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> +/* Some systems declare various items in the wrong headers. */ +#ifndef __GLIBC__ +# include <fcntl.h> +# include <stdio.h> +# include <stdlib.h> +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# include <io.h> +# endif +#endif + +int +main () +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval as_val=\$$as_gl_Symbol + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + # Code from module unitypes: + # Code from module uniwidth/base: + # Code from module uniwidth/width: + # Code from module unlocked-io: + + +$as_echo "#define USE_UNLOCKED_IO 1" >>confdefs.h + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + : + + + + + + + # Code from module update-copyright: + # Code from module useless-if-before-free: + # Code from module vc-list-files: + # Code from module verify: + # Code from module version-etc: + +# 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 + + # Code from module version-etc-fsf: + # Code from module warn-on-use: + # Code from module warnings: + + # Code from module wchar: + + + + + : + + + + + + + + + + : + + + + + + + + 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 test "${gl_cv_next_wchar_h+set}" = set; 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 + gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/wchar.h#{ + s#.*"\(.*/wchar.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + 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 + + + + for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb wcsrtombs wcsnrtombs wcwidth; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Some systems require additional headers. */ +#ifndef __GLIBC__ +# include <stddef.h> +# include <stdio.h> +# include <time.h> +#endif +#include <wchar.h> + +int +main () +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval as_val=\$$as_gl_Symbol + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + # Code from module wcrtomb: + + + + + + + + + + : + + + + + + + : + + + + + + 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 test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + 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> +#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 1; + } + 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 test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; 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> +#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 1; + } + 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 $REPLACE_MBSTATE_T = 1; then + + : + + fi + + + + : + + + + + + if test $ac_cv_func_wcrtomb = no; then + HAVE_WCRTOMB=0 + 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 test "${gl_cv_func_wcrtomb_retval+set}" = set; 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 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 <stdio.h> +#include <string.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + return 0; +} +_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 + + + + # Code from module wctype: + + + + + : + + + + + + if test $ac_cv_func_iswcntrl = yes; then + HAVE_ISWCNTRL=1 + else + HAVE_ISWCNTRL=0 + fi + + + : + + + + + + if test $ac_cv_func_iswblank = yes; then + HAVE_ISWBLANK=1 + else + HAVE_ISWBLANK=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_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 test "${gl_cv_func_iswcntrl_works+set}" = set; 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=yes +else + gl_cv_func_iswcntrl_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.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 + + + + + : + + + + + + + + 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 test "${gl_cv_next_wctype_h+set}" = set; 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 + gl_cv_next_wctype_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/wctype.h#{ + s#.*"\(.*/wctype.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + 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 + + + + HAVE_WCTYPE_H=1 + else + HAVE_WCTYPE_H=0 + fi + + + if test "$gl_cv_func_iswcntrl_works" = no; then + REPLACE_ISWCNTRL=1 + else + REPLACE_ISWCNTRL=0 + fi + + + # Code from module wcwidth: + + + + + + + + + + : + + + + + + + : + + + + + + + ac_fn_c_check_decl "$LINENO" "wcwidth" "ac_cv_have_decl_wcwidth" " +/* AIX 3.2.5 declares wcwidth in <string.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> + +" +if test "x$ac_cv_have_decl_wcwidth" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_WCWIDTH $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_wcwidth != yes; then + HAVE_DECL_WCWIDTH=0 + fi + + if test $ac_cv_func_wcwidth = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcwidth works reasonably in UTF-8 locales" >&5 +$as_echo_n "checking whether wcwidth works reasonably in UTF-8 locales... " >&6; } +if test "${gl_cv_func_wcwidth_works+set}" = set; 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_wcwidth_works="guessing yes";; + *) gl_cv_func_wcwidth_works="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +/* AIX 3.2.5 declares wcwidth in <string.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> +#if !HAVE_DECL_WCWIDTH +extern +# ifdef __cplusplus +"C" +# endif +int wcwidth (int); +#endif +int main () +{ + if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL) + if (wcwidth (0x0301) > 0 || wcwidth (0x200B) > 0) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_wcwidth_works=yes +else + gl_cv_func_wcwidth_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_wcwidth_works" >&5 +$as_echo "$gl_cv_func_wcwidth_works" >&6; } + case "$gl_cv_func_wcwidth_works" in + *yes) ;; + *no) REPLACE_WCWIDTH=1 ;; + esac + fi + if test $ac_cv_func_wcwidth != yes || test $REPLACE_WCWIDTH = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS wcwidth.$ac_objext" + + fi + if test $ac_cv_func_wcwidth != yes || test $REPLACE_WCWIDTH = 1 \ + || test $HAVE_DECL_WCWIDTH = 0; then + + : + + fi + + + + + GNULIB_WCWIDTH=1 + + + +$as_echo "#define GNULIB_TEST_WCWIDTH 1" >>confdefs.h + + + + # Code from module xalloc: + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS xmalloc.$ac_objext" + + + + + : + + + : + + + # Code from module xalloc-die: + # Code from module xfreopen: + # Code from module xstriconv: + # Code from module xstrndup: + + + : + + + # Code from module xstrtol: + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS xstrtol.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS xstrtoul.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS xstrtol-error.$ac_objext" + + + # Code from module xstrtoumax: + # End of code from modules + + + + + + + + + + gltests_libdeps= + gltests_ltlibdeps= + + + + + + + + + + gl_source_base='gnulib-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 + + + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS argmatch.$ac_objext" + + + + + + { $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 test "${gt_cv_locale_fr+set}" = set; 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 () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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; + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + { $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 test "${gt_cv_locale_fr_utf8+set}" = set; 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 (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + + { $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 test "${gt_cv_locale_fr+set}" = set; 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 () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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; + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a turkish Unicode locale" >&5 +$as_echo_n "checking for a turkish Unicode locale... " >&6; } +if test "${gt_cv_locale_tr_utf8+set}" = set; 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, 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. But BeOS does not + implement the Turkish upper-/lowercase mappings. Therefore, let this + program return 1 on BeOS. */ + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the tr_TR 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 eighth month, the second + character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f) + return 1; + /* Check whether the upper-/lowercase mappings are as expected for + Turkish. */ + if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i' + || towupper(0x0131) != 'I' || towlower ('I') != 0x0131) + return 1; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr_TR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr_TR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr.UTF-8 + else + # None found. + gt_cv_locale_tr_utf8=none + fi + fi + fi + else + gt_cv_locale_tr_utf8=none + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_tr_utf8" >&5 +$as_echo "$gt_cv_locale_tr_utf8" >&6; } + LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8 + + + + + + + GNULIB_ENVIRON=$gl_module_indicator_condition + + + +$as_echo "#define GNULIB_TEST_ENVIRON 1" >>confdefs.h + + + + + + + { $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 test "${gt_cv_locale_fr+set}" = set; 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 () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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; + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + { $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 test "${gt_cv_locale_fr_utf8+set}" = set; 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 (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + + { $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 test "${gt_cv_locale_ja+set}" = set; 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 () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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. */ + 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; +} + +_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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 test "${gt_cv_locale_zh_CN+set}" = set; 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 () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 a month name, no byte in the range 0x80..0x9F occurs. + 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) < 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; +} + +_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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 turkish Unicode locale" >&5 +$as_echo_n "checking for a turkish Unicode locale... " >&6; } +if test "${gt_cv_locale_tr_utf8+set}" = set; 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, 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. But BeOS does not + implement the Turkish upper-/lowercase mappings. Therefore, let this + program return 1 on BeOS. */ + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the tr_TR 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 eighth month, the second + character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f) + return 1; + /* Check whether the upper-/lowercase mappings are as expected for + Turkish. */ + if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i' + || towupper(0x0131) != 'I' || towlower ('I') != 0x0131) + return 1; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr_TR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr_TR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr.UTF-8 + else + # None found. + gt_cv_locale_tr_utf8=none + fi + fi + fi + else + gt_cv_locale_tr_utf8=none + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_tr_utf8" >&5 +$as_echo "$gt_cv_locale_tr_utf8" >&6; } + LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8 + + + + + { $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 test "${gt_cv_locale_fr_utf8+set}" = set; 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 (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + + { $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 test "${gt_cv_locale_fr+set}" = set; 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 () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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; + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + { $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 test "${gt_cv_locale_fr_utf8+set}" = set; 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 (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + + { $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 test "${gt_cv_locale_ja+set}" = set; 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 () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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. */ + 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; +} + +_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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 test "${gt_cv_locale_zh_CN+set}" = set; 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 () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 a month name, no byte in the range 0x80..0x9F occurs. + 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) < 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; +} + +_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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 test "${gt_cv_locale_fr_utf8+set}" = set; 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 (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + + { $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 test "${gt_cv_locale_zh_CN+set}" = set; 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 () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 a month name, no byte in the range 0x80..0x9F occurs. + 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) < 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; +} + +_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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; 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 () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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; + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + { $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 test "${gt_cv_locale_fr_utf8+set}" = set; 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 (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + : + + + + + + + : + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for putenv compatible with GNU and SVID" >&5 +$as_echo_n "checking for putenv compatible with GNU and SVID... " >&6; } +if test "${gl_cv_func_svid_putenv+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_func_svid_putenv=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Put it in env. */ + if (putenv ("CONFTEST_putenv=val")) + return 1; + + /* Try to remove it. */ + if (putenv ("CONFTEST_putenv")) + return 1; + + /* Make sure it was deleted. */ + if (getenv ("CONFTEST_putenv") != 0) + return 1; + + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_svid_putenv=yes +else + gl_cv_func_svid_putenv=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_svid_putenv" >&5 +$as_echo "$gl_cv_func_svid_putenv" >&6; } + if test $gl_cv_func_svid_putenv = no; then + REPLACE_PUTENV=1 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS putenv.$ac_objext" + + fi + + + + + GNULIB_PUTENV=$gl_module_indicator_condition + + + +$as_echo "#define GNULIB_TEST_PUTENV 1" >>confdefs.h + + + + + + + { $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 test "${gt_cv_locale_fr+set}" = set; 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 () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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; + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + { $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 test "${gt_cv_locale_fr_utf8+set}" = set; 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 (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 $HAVE_SETENV$REPLACE_SETENV != 10; then + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS setenv.$ac_objext" + + fi + + + + + GNULIB_SETENV=$gl_module_indicator_condition + + + +$as_echo "#define GNULIB_TEST_SETENV 1" >>confdefs.h + + + + + + ac_fn_c_check_decl "$LINENO" "sleep" "ac_cv_have_decl_sleep" "#include <unistd.h> +" +if test "x$ac_cv_have_decl_sleep" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SLEEP $ac_have_decl +_ACEOF + + + : + + + + + + if test $ac_cv_have_decl_sleep != yes; then + HAVE_SLEEP=0 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS sleep.$ac_objext" + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working sleep" >&5 +$as_echo_n "checking for working sleep... " >&6; } +if test "${gl_cv_func_sleep_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_func_sleep_works="guessing no" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#include <unistd.h> +#include <signal.h> +static void +handle_alarm (int sig) +{ + if (sig != SIGALRM) + _exit (2); +} + +int +main () +{ + + /* Failure to compile this test due to missing alarm is okay, + since all such platforms (mingw) also lack sleep. */ + unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ + unsigned int remaining; + signal (SIGALRM, handle_alarm); + alarm (1); + remaining = sleep (pentecost); + return !(pentecost - 10 < remaining && remaining <= pentecost); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_sleep_works=yes +else + gl_cv_func_sleep_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_sleep_works" >&5 +$as_echo "$gl_cv_func_sleep_works" >&6; } + if test "$gl_cv_func_sleep_works" != yes; then + REPLACE_SLEEP=1 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS sleep.$ac_objext" + + fi + fi + + + + + GNULIB_SLEEP=$gl_module_indicator_condition + + + +$as_echo "#define GNULIB_TEST_SLEEP 1" >>confdefs.h + + + + + : + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 +$as_echo_n "checking for wchar_t... " >&6; } +if test "${gt_cv_c_wchar_t+set}" = set; 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 test "${gt_cv_c_wint_t+set}" = set; 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 + + fi + + + + + : + + + + + + if test $ac_cv_func_symlink = no; then + HAVE_SYMLINK=0 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS symlink.$ac_objext" + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether symlink handles trailing slash correctly" >&5 +$as_echo_n "checking whether symlink handles trailing slash correctly... " >&6; } +if test "${gl_cv_func_symlink_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_func_symlink_works="guessing no" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> + +int +main () +{ +if (!symlink ("a", "conftest.link/")) return 1; + if (symlink ("conftest.f", "conftest.lnk2")) return 2; + if (!symlink ("a", "conftest.lnk2/")) return 3; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_symlink_works=yes +else + gl_cv_func_symlink_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.f conftest.link conftest.lnk2 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_symlink_works" >&5 +$as_echo "$gl_cv_func_symlink_works" >&6; } + if test "$gl_cv_func_symlink_works" != yes; then + REPLACE_SYMLINK=1 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS symlink.$ac_objext" + + fi + fi + + + + + GNULIB_SYMLINK=$gl_module_indicator_condition + + + +$as_echo "#define GNULIB_TEST_SYMLINK 1" >>confdefs.h + + + + + + for ac_func in unsetenv +do : + ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" +if test "x$ac_cv_func_unsetenv" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_UNSETENV 1 +_ACEOF + +fi +done + + if test $ac_cv_func_unsetenv = no; then + HAVE_UNSETENV=0 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS unsetenv.$ac_objext" + + + + + : + + + + + + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsetenv() return type" >&5 +$as_echo_n "checking for unsetenv() return type... " >&6; } +if test "${gt_cv_func_unsetenv_ret+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +int unsetenv (const char *name); +#else +int unsetenv(); +#endif + +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 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS unsetenv.$ac_objext" + + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether unsetenv works on duplicates" >&5 +$as_echo_n "checking whether unsetenv works on duplicates... " >&6; } +if test "${gl_cv_func_unsetenv_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_func_unsetenv_works="guessing no" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <stdlib.h> + +int +main () +{ + + char entry[] = "b=2"; + if (putenv ((char *) "a=1")) return 1; + if (putenv (entry)) return 2; + entry[0] = 'a'; + unsetenv ("a"); + if (getenv ("a")) return 3; + + ; + 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; } + if test "$gl_cv_func_unsetenv_works" != yes; then + REPLACE_UNSETENV=1 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS unsetenv.$ac_objext" + + fi + fi + + + + + GNULIB_UNSETENV=$gl_module_indicator_condition + + + +$as_echo "#define GNULIB_TEST_UNSETENV 1" >>confdefs.h + + + + abs_aux_dir=`cd "$ac_aux_dir"; pwd` + + + + + + : + + + + + + ac_fn_c_check_type "$LINENO" "useconds_t" "ac_cv_type_useconds_t" "$ac_includes_default" +if test "x$ac_cv_type_useconds_t" = x""yes; then : + +else + +$as_echo "#define useconds_t unsigned int" >>confdefs.h + +fi + + if test $ac_cv_func_usleep = no; then + HAVE_USLEEP=0 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS usleep.$ac_objext" + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep allows large arguments" >&5 +$as_echo_n "checking whether usleep allows large arguments... " >&6; } +if test "${gl_cv_func_usleep_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_func_usleep_works="guessing no" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <unistd.h> + +int +main () +{ +return !!usleep (1000000); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_usleep_works=yes +else + gl_cv_func_usleep_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_usleep_works" >&5 +$as_echo "$gl_cv_func_usleep_works" >&6; } + if test "$gl_cv_func_usleep_works" != yes; then + REPLACE_USLEEP=1 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS usleep.$ac_objext" + + fi + fi + + + + + GNULIB_USLEEP=$gl_module_indicator_condition + + + +$as_echo "#define GNULIB_TEST_USLEEP 1" >>confdefs.h + + + + abs_aux_dir=`cd "$ac_aux_dir"; pwd` + + + + + { $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 test "${gt_cv_locale_fr+set}" = set; 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 () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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; + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + { $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 test "${gt_cv_locale_fr_utf8+set}" = set; 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 (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 + /* 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; + 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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + + { $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 test "${gt_cv_locale_ja+set}" = set; 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 () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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. */ + 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; +} + +_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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 test "${gt_cv_locale_zh_CN+set}" = set; 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 () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 a month name, no byte in the range 0x80..0x9F occurs. + 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) < 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; +} + +_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 + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 + + + + + + + : + + + + + + if test $ac_cv_func_wctob = no; then + HAVE_DECL_WCTOB=0 + + : + + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS wctob.$ac_objext" + + + : + + else + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wctob works" >&5 +$as_echo_n "checking whether wctob works... " >&6; } +if test "${gl_cv_func_wctob_works+set}" = set; 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 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> +#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> +#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 = 1; then + + : + + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS wctob.$ac_objext" + + + : + + else + + 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" = x""yes; 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 + + + + + GNULIB_WCTOB=$gl_module_indicator_condition + + + +$as_echo "#define GNULIB_TEST_WCTOB 1" >>confdefs.h + + + + + + + + + + + + + + LIBDIFFUTILS_LIBDEPS="$gl_libdeps" + + LIBDIFFUTILS_LTLIBDEPS="$gl_ltlibdeps" + + LIBTESTS_LIBDEPS="$gltests_libdeps" + + + +# Check whether --enable-gcc-warnings was given. +if test "${enable_gcc_warnings+set}" = set; then : + enableval=$enable_gcc_warnings; case $enableval in + yes|no) ;; + *) as_fn_error $? "bad value $enableval for gcc-warnings option" "$LINENO" 5 ;; + esac + gl_gcc_warnings=$enableval +else + gl_gcc_warnings=no + +fi + + +if test "$gl_gcc_warnings" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Werror" >&5 +$as_echo_n "checking whether compiler handles -Werror... " >&6; } +if test "${gl_cv_warn__Werror+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="${CPPFLAGS} -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + gl_cv_warn__Werror=yes +else + gl_cv_warn__Werror=no +fi +rm -f conftest.err conftest.$ac_ext + CPPFLAGS="$save_CPPFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Werror" >&5 +$as_echo "$gl_cv_warn__Werror" >&6; } +if test "x$gl_cv_warn__Werror" = x""yes; then : + as_fn_append WERROR_CFLAGS " -Werror" +fi + + + + nw= + # This, $nw, is the list of warnings we disable. + nw="$nw -Wdeclaration-after-statement" # too useful to forbid + nw="$nw -Waggregate-return" # anachronistic + nw="$nw -Wlong-long" # C90 is anachronistic (lib/gethrxtime.h) + nw="$nw -Wc++-compat" # We don't care about C++ compilers + nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib + nw="$nw -Wtraditional" # Warns on #elif which we use often + nw="$nw -Wcast-qual" # Too many warnings for now + nw="$nw -Wconversion" # Too many warnings for now + nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings + nw="$nw -Wsign-conversion" # Too many warnings for now + nw="$nw -Wtraditional-conversion" # Too many warnings for now + nw="$nw -Wunreachable-code" # Too many warnings for now + nw="$nw -Wpadded" # Our structs are not padded + nw="$nw -Wredundant-decls" # openat.h declares e.g., mkdirat + nw="$nw -Wlogical-op" # any use of fwrite provokes this + nw="$nw -Wformat-nonliteral" # who.c and pinky.c strftime uses + nw="$nw -Wvla" # warnings in gettext.h + nw="$nw -Wnested-externs" # use of XARGMATCH/verify_function__ + nw="$nw -Wswitch-enum" # Too many warnings for now + nw="$nw -Wswitch-default" # Too many warnings for now + nw="$nw -Wstack-protector" # not worth working around + # things I might fix soon: + nw="$nw -Wfloat-equal" # sort.c, seq.c + nw="$nw -Wmissing-format-attribute" # copy.c + nw="$nw -Wunsafe-loop-optimizations" # a few src/*.c + nw="$nw -Winline" # system.h's readdir_ignoring_dot_and_dotdot + nw="$nw -Wstrict-overflow" # expr.c, pr.c, tr.c, factor.c + nw="$nw -Wformat-extra-args" # sdiff.c + # ?? -Wstrict-overflow + + + gl_manywarn_set= + for gl_manywarn_item in \ + -Wall \ + -W \ + -Wformat-y2k \ + -Wformat-nonliteral \ + -Wformat-security \ + -Winit-self \ + -Wmissing-include-dirs \ + -Wswitch-default \ + -Wswitch-enum \ + -Wunused \ + -Wunknown-pragmas \ + -Wstrict-aliasing \ + -Wstrict-overflow \ + -Wsystem-headers \ + -Wfloat-equal \ + -Wtraditional \ + -Wtraditional-conversion \ + -Wdeclaration-after-statement \ + -Wundef \ + -Wshadow \ + -Wunsafe-loop-optimizations \ + -Wpointer-arith \ + -Wbad-function-cast \ + -Wc++-compat \ + -Wcast-qual \ + -Wcast-align \ + -Wwrite-strings \ + -Wconversion \ + -Wsign-conversion \ + -Wlogical-op \ + -Waggregate-return \ + -Wstrict-prototypes \ + -Wold-style-definition \ + -Wmissing-prototypes \ + -Wmissing-declarations \ + -Wmissing-noreturn \ + -Wmissing-format-attribute \ + -Wpacked \ + -Wpadded \ + -Wredundant-decls \ + -Wnested-externs \ + -Wunreachable-code \ + -Winline \ + -Winvalid-pch \ + -Wlong-long \ + -Wvla \ + -Wvolatile-register-var \ + -Wdisabled-optimization \ + -Wstack-protector \ + -Woverlength-strings \ + -Wbuiltin-macro-redefined \ + -Wmudflap \ + -Wpacked-bitfield-compat \ + -Wsync-nand \ + ; do + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" + done + # The following are not documented in the manual but are included in + # output from gcc --help=warnings. + for gl_manywarn_item in \ + -Wattributes \ + -Wcoverage-mismatch \ + -Wmultichar \ + -Wunused-macros \ + ; do + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" + done + ws=$gl_manywarn_set + + + gl_warn_set= + set x $ws; shift + for gl_warn_item + do + case " $nw " in + *" $gl_warn_item "*) + ;; + *) + gl_warn_set="$gl_warn_set $gl_warn_item" + ;; + esac + done + ws=$gl_warn_set + + for w in $ws; do + as_gl_Warn=`$as_echo "gl_cv_warn_$w" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles $w" >&5 +$as_echo_n "checking whether compiler handles $w... " >&6; } +if { as_var=$as_gl_Warn; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="${CPPFLAGS} $w" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + eval "$as_gl_Warn=yes" +else + eval "$as_gl_Warn=no" +fi +rm -f conftest.err conftest.$ac_ext + CPPFLAGS="$save_CPPFLAGS" + +fi +eval ac_res=\$$as_gl_Warn + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +eval as_val=\$$as_gl_Warn + if test "x$as_val" = x""yes; then : + as_fn_append WARN_CFLAGS " $w" +fi + + done + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Wno-missing-field-initializers" >&5 +$as_echo_n "checking whether compiler handles -Wno-missing-field-initializers... " >&6; } +if test "${gl_cv_warn__Wno_missing_field_initializers+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="${CPPFLAGS} -Wno-missing-field-initializers" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + gl_cv_warn__Wno_missing_field_initializers=yes +else + gl_cv_warn__Wno_missing_field_initializers=no +fi +rm -f conftest.err conftest.$ac_ext + CPPFLAGS="$save_CPPFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Wno_missing_field_initializers" >&5 +$as_echo "$gl_cv_warn__Wno_missing_field_initializers" >&6; } +if test "x$gl_cv_warn__Wno_missing_field_initializers" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-missing-field-initializers" +fi + # We need this one + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Wno-sign-compare" >&5 +$as_echo_n "checking whether compiler handles -Wno-sign-compare... " >&6; } +if test "${gl_cv_warn__Wno_sign_compare+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="${CPPFLAGS} -Wno-sign-compare" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + gl_cv_warn__Wno_sign_compare=yes +else + gl_cv_warn__Wno_sign_compare=no +fi +rm -f conftest.err conftest.$ac_ext + CPPFLAGS="$save_CPPFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Wno_sign_compare" >&5 +$as_echo "$gl_cv_warn__Wno_sign_compare" >&6; } +if test "x$gl_cv_warn__Wno_sign_compare" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-sign-compare" +fi + # Too many warnings for now + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Wno-pointer-sign" >&5 +$as_echo_n "checking whether compiler handles -Wno-pointer-sign... " >&6; } +if test "${gl_cv_warn__Wno_pointer_sign+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="${CPPFLAGS} -Wno-pointer-sign" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + gl_cv_warn__Wno_pointer_sign=yes +else + gl_cv_warn__Wno_pointer_sign=no +fi +rm -f conftest.err conftest.$ac_ext + CPPFLAGS="$save_CPPFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Wno_pointer_sign" >&5 +$as_echo "$gl_cv_warn__Wno_pointer_sign" >&6; } +if test "x$gl_cv_warn__Wno_pointer_sign" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-pointer-sign" +fi + # Too many warnings for now + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Wno-unused-parameter" >&5 +$as_echo_n "checking whether compiler handles -Wno-unused-parameter... " >&6; } +if test "${gl_cv_warn__Wno_unused_parameter+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="${CPPFLAGS} -Wno-unused-parameter" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + gl_cv_warn__Wno_unused_parameter=yes +else + gl_cv_warn__Wno_unused_parameter=no +fi +rm -f conftest.err conftest.$ac_ext + CPPFLAGS="$save_CPPFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Wno_unused_parameter" >&5 +$as_echo "$gl_cv_warn__Wno_unused_parameter" >&6; } +if test "x$gl_cv_warn__Wno_unused_parameter" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-unused-parameter" +fi + # Too many warnings for now + + # In spite of excluding -Wlogical-op above, it is enabled, as of + # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Wno-logical-op" >&5 +$as_echo_n "checking whether compiler handles -Wno-logical-op... " >&6; } +if test "${gl_cv_warn__Wno_logical_op+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="${CPPFLAGS} -Wno-logical-op" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + gl_cv_warn__Wno_logical_op=yes +else + gl_cv_warn__Wno_logical_op=no +fi +rm -f conftest.err conftest.$ac_ext + CPPFLAGS="$save_CPPFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Wno_logical_op" >&5 +$as_echo "$gl_cv_warn__Wno_logical_op" >&6; } +if test "x$gl_cv_warn__Wno_logical_op" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-logical-op" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -fdiagnostics-show-option" >&5 +$as_echo_n "checking whether compiler handles -fdiagnostics-show-option... " >&6; } +if test "${gl_cv_warn__fdiagnostics_show_option+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="${CPPFLAGS} -fdiagnostics-show-option" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + gl_cv_warn__fdiagnostics_show_option=yes +else + gl_cv_warn__fdiagnostics_show_option=no +fi +rm -f conftest.err conftest.$ac_ext + CPPFLAGS="$save_CPPFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__fdiagnostics_show_option" >&5 +$as_echo "$gl_cv_warn__fdiagnostics_show_option" >&6; } +if test "x$gl_cv_warn__fdiagnostics_show_option" = x""yes; then : + as_fn_append WARN_CFLAGS " -fdiagnostics-show-option" +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -funit-at-a-time" >&5 +$as_echo_n "checking whether compiler handles -funit-at-a-time... " >&6; } +if test "${gl_cv_warn__funit_at_a_time+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="${CPPFLAGS} -funit-at-a-time" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + gl_cv_warn__funit_at_a_time=yes +else + gl_cv_warn__funit_at_a_time=no +fi +rm -f conftest.err conftest.$ac_ext + CPPFLAGS="$save_CPPFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__funit_at_a_time" >&5 +$as_echo "$gl_cv_warn__funit_at_a_time" >&6; } +if test "x$gl_cv_warn__funit_at_a_time" = x""yes; then : + as_fn_append WARN_CFLAGS " -funit-at-a-time" +fi + + + + + +$as_echo "#define lint 1" >>confdefs.h + + +$as_echo "#define _FORTIFY_SOURCE 2" >>confdefs.h + + +$as_echo "#define GNULIB_PORTCHECK 1" >>confdefs.h + + + # We use a slightly smaller set of warning options for lib/. + # Remove the following and save the result in GNULIB_WARN_CFLAGS. + nw= + nw="$nw -Wunused-macros" + nw="$nw -Wmissing-prototypes" + nw="$nw -Wold-style-definition" + + gl_warn_set= + set x $WARN_CFLAGS; shift + for gl_warn_item + do + case " $nw " in + *" $gl_warn_item "*) + ;; + *) + gl_warn_set="$gl_warn_set $gl_warn_item" + ;; + esac + done + GNULIB_WARN_CFLAGS=$gl_warn_set + + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if test "${ac_cv_c_inline+set}" = set; 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 + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for variable-length arrays" >&5 +$as_echo_n "checking for variable-length arrays... " >&6; } +if test "${ac_cv_c_vararrays+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +static int x; char a[++x]; a[sizeof a - 1] = 0; return a[0]; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_vararrays=yes +else + ac_cv_c_vararrays=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_vararrays" >&5 +$as_echo "$ac_cv_c_vararrays" >&6; } + if test $ac_cv_c_vararrays = yes; then + +$as_echo "#define HAVE_C_VARARRAYS 1" >>confdefs.h + + fi + + + +$as_echo "#define DEFAULT_EDITOR_PROGRAM \"ed\"" >>confdefs.h + + +# Extract the first word of "pr", so it can be a program name with args. +set dummy pr; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PR_PROGRAM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PR_PROGRAM in + [\\/]* | ?:[\\/]*) + ac_cv_path_PR_PROGRAM="$PR_PROGRAM" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PR_PROGRAM="$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_PR_PROGRAM" && ac_cv_path_PR_PROGRAM="""" + ;; +esac +fi +PR_PROGRAM=$ac_cv_path_PR_PROGRAM +if test -n "$PR_PROGRAM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PR_PROGRAM" >&5 +$as_echo "$PR_PROGRAM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +cat >>confdefs.h <<_ACEOF +#define PR_PROGRAM "$PR_PROGRAM" +_ACEOF + + +ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_blksize" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 +_ACEOF + + +fi + +ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_rdev" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_RDEV 1 +_ACEOF + + +fi + +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <$ac_hdr> + +int +main () +{ +if ((DIR *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_ac_Header=yes" +else + eval "$as_ac_Header=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +_ACEOF + +ac_header_dirent=$ac_hdr; break +fi + +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if test "${ac_cv_search_opendir+set}" = set; 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 opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dir; 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_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then : + break +fi +done +if test "${ac_cv_search_opendir+set}" = set; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if test "${ac_cv_search_opendir+set}" = set; 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 opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' x; 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_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then : + break +fi +done +if test "${ac_cv_search_opendir+set}" = set; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if test "${ac_cv_header_sys_wait_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <sys/wait.h> +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_sys_wait_h=yes +else + ac_cv_header_sys_wait_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_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } +if test $ac_cv_header_sys_wait_h = yes; then + +$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h + +fi + +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = x""yes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF + +fi + + + + + + + + + + + + + + + + + + + : + + + + + + + + + + + + + + +if test $ac_cv_func_sigprocmask = no; then + for ac_func in sigblock +do : + ac_fn_c_check_func "$LINENO" "sigblock" "ac_cv_func_sigblock" +if test "x$ac_cv_func_sigblock" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SIGBLOCK 1 +_ACEOF + +fi +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether closedir returns void" >&5 +$as_echo_n "checking whether closedir returns void... " >&6; } +if test "${ac_cv_func_closedir_void+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_closedir_void=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header_dirent> +#ifndef __cplusplus +int closedir (); +#endif + +int +main () +{ +return closedir (opendir (".")) != 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_closedir_void=no +else + ac_cv_func_closedir_void=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: $ac_cv_func_closedir_void" >&5 +$as_echo "$ac_cv_func_closedir_void" >&6; } +if test $ac_cv_func_closedir_void = yes; then + +$as_echo "#define CLOSEDIR_VOID 1" >>confdefs.h + +fi + +for ac_header in vfork.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" +if test "x$ac_cv_header_vfork_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VFORK_H 1 +_ACEOF + +fi + +done + +for ac_func in fork 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" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test "x$ac_cv_func_fork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 +$as_echo_n "checking for working fork... " >&6; } +if test "${ac_cv_func_fork_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_fork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* By Ruediger Kuhlmann. */ + return fork () < 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_fork_works=yes +else + ac_cv_func_fork_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_fork_works" >&5 +$as_echo "$ac_cv_func_fork_works" >&6; } + +else + ac_cv_func_fork_works=$ac_cv_func_fork +fi +if test "x$ac_cv_func_fork_works" = xcross; then + case $host in + *-*-amigaos* | *-*-msdosdjgpp*) + # Override, as these systems have only a dummy fork() stub + ac_cv_func_fork_works=no + ;; + *) + ac_cv_func_fork_works=yes + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} +fi +ac_cv_func_vfork_works=$ac_cv_func_vfork +if test "x$ac_cv_func_vfork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 +$as_echo_n "checking for working vfork... " >&6; } +if test "${ac_cv_func_vfork_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_vfork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Thanks to Paul Eggert for this test. */ +$ac_includes_default +#include <sys/wait.h> +#ifdef HAVE_VFORK_H +# include <vfork.h> +#endif +/* On some sparc systems, changes by the child to local and incoming + argument registers are propagated back to the parent. The compiler + is told about this with #include <vfork.h>, but some compilers + (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a + static variable whose address is put into a register that is + clobbered by the vfork. */ +static void +#ifdef __cplusplus +sparc_address_test (int arg) +# else +sparc_address_test (arg) int arg; +#endif +{ + static pid_t child; + if (!child) { + child = vfork (); + if (child < 0) { + perror ("vfork"); + _exit(2); + } + if (!child) { + arg = getpid(); + write(-1, "", 0); + _exit (arg); + } + } +} + +int +main () +{ + pid_t parent = getpid (); + pid_t child; + + sparc_address_test (0); + + child = vfork (); + + if (child == 0) { + /* Here is another test for sparc vfork register problems. This + test uses lots of local variables, at least as many local + variables as main has allocated so far including compiler + temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris + 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should + reuse the register of parent for one of the local variables, + since it will think that parent can't possibly be used any more + in this routine. Assigning to the local variable will thus + munge parent in the parent process. */ + pid_t + p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), + p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); + /* Convince the compiler that p..p7 are live; otherwise, it might + use the same hardware register for all 8 local variables. */ + if (p != p1 || p != p2 || p != p3 || p != p4 + || p != p5 || p != p6 || p != p7) + _exit(1); + + /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent + from child file descriptors. If the child closes a descriptor + before it execs or exits, this munges the parent's descriptor + as well. Test for this by closing stdout in the child. */ + _exit(close(fileno(stdout)) != 0); + } else { + int status; + struct stat st; + + while (wait(&status) != child) + ; + return ( + /* Was there some problem with vforking? */ + child < 0 + + /* Did the child fail? (This shouldn't happen.) */ + || status + + /* Did the vfork/compiler bug occur? */ + || parent != getpid() + + /* Did the file descriptor bug occur? */ + || fstat(fileno(stdout), &st) != 0 + ); + } +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_vfork_works=yes +else + ac_cv_func_vfork_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_vfork_works" >&5 +$as_echo "$ac_cv_func_vfork_works" >&6; } + +fi; +if test "x$ac_cv_func_fork_works" = xcross; then + ac_cv_func_vfork_works=$ac_cv_func_vfork + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} +fi + +if test "x$ac_cv_func_vfork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h + +else + +$as_echo "#define vfork fork" >>confdefs.h + +fi +if test "x$ac_cv_func_fork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h + +fi + + + + { $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.17 + + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +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 test "${ac_cv_path_MSGFMT+set}" = set; 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 test "${ac_cv_path_GMSGFMT+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +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 test "${ac_cv_path_XGETTEXT+set}" = set; 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 + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +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 test "${ac_cv_path_MSGMERGE+set}" = set; 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" + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; 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 test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; 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 { as_var=$gt_func_gnugettext_libc; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <libintl.h> +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings + ; + 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 test "${am_cv_func_iconv+set}" = set; 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 test "${am_cv_func_iconv_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + 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> +int main () +{ + /* 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 const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + 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, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + return 1; + } + } + /* 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 const char input[] = "\263"; + char buf[10]; + 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, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + return 1; + } + } +#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 const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + 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, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + return 1; + } + } +#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)) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + am_cv_func_iconv_works=yes +else + am_cv_func_iconv_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 + + 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 { as_var=$gt_func_gnugettext_libintl; eval "test \"\${$as_var+set}\" = set"; }; 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> +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ; + 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> +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ; + 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" + + + + + + + +XGETTEXT="AWK='$AWK' \$(SHELL) \$(top_srcdir)/exgettext $XGETTEXT" + +ac_config_files="$ac_config_files Makefile doc/Makefile lib/Makefile src/Makefile tests/Makefile gnulib-tests/Makefile man/Makefile po/Makefile.in ms/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 + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + 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 + + + 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 "${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 +test "X$DEFS" = X-DHAVE_CONFIG_H && DEFS= +if test -z "${GNU_MAKE_TRUE}" && test -z "${GNU_MAKE_FALSE}"; then + as_fn_error $? "conditional \"GNU_MAKE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +CONFIG_INCLUDE=lib/config.h + + + 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 + + + +: ${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. +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 -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +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 + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# 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 diffutils $as_me 3.0, which was +generated by GNU Autoconf 2.65.57-45695. 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-diffutils@gnu.org>. +GNU diffutils home page: <http://www.gnu.org/software/diffutils/>. +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 diffutils config.status 3.0 +configured by $0, generated by GNU Autoconf 2.65.57-45695, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 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=$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"` ;; + 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" +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 + "lib/config.h") CONFIG_HEADERS="$CONFIG_HEADERS lib/config.h:lib/config.hin" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "$GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS $GNUmakefile:$GNUmakefile" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "gnulib-tests/Makefile") CONFIG_FILES="$CONFIG_FILES gnulib-tests/Makefile" ;; + "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "ms/Makefile") CONFIG_FILES="$CONFIG_FILES ms/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= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$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 -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 + +# 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 {' >"$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 >>"\$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 >>"\$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 < "$tmp/subs1.awk" > "$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 $(srcdir), +# ${srcdir} and @srcdir@ 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[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +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 >"$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_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; 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="$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 >"$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 "$tmp/subs.awk" >$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' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$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 "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$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 "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$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 "$tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$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"" || { + # Autoconf 2.62 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"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/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 +} + ;; + "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" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/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 assigment 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 assigment 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 + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..ab6af5c --- /dev/null +++ b/configure.ac @@ -0,0 +1,161 @@ +# Configure template for GNU Diffutils. + +# Copyright (C) 1994-1995, 1998, 2001-2002, 2004, 2006, 2009-2010 Free Software +# Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +AC_PREREQ(2.61) + +AC_INIT([GNU diffutils], + m4_esyscmd([build-aux/git-version-gen .tarball-version]), + [bug-diffutils@gnu.org]) + +AC_CONFIG_SRCDIR([src/diff.c]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_MACRO_DIR([m4]) + +AM_INIT_AUTOMAKE([1.11 dist-xz color-tests parallel-tests]) +AM_SILENT_RULES([yes]) # make --enable-silent-rules the default. + +AC_CONFIG_HEADER([lib/config.h:lib/config.hin]) + +AC_PROG_AWK +AC_PROG_CC +AM_PROG_CC_STDC +AM_MISSING_PROG([HELP2MAN], [help2man]) +AC_PROG_RANLIB +gl_EARLY +gl_USE_SYSTEM_EXTENSIONS +AC_SYS_LARGEFILE +gl_INIT + +AC_ARG_ENABLE([gcc-warnings], + [AS_HELP_STRING([--enable-gcc-warnings], + [turn on lots of GCC warnings (for developers)])], + [case $enableval in + yes|no) ;; + *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;; + esac + gl_gcc_warnings=$enableval], + [gl_gcc_warnings=no] +) + +if test "$gl_gcc_warnings" = yes; then + gl_WARN_ADD([-Werror], [WERROR_CFLAGS]) + AC_SUBST([WERROR_CFLAGS]) + + nw= + # This, $nw, is the list of warnings we disable. + nw="$nw -Wdeclaration-after-statement" # too useful to forbid + nw="$nw -Waggregate-return" # anachronistic + nw="$nw -Wlong-long" # C90 is anachronistic (lib/gethrxtime.h) + nw="$nw -Wc++-compat" # We don't care about C++ compilers + nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib + nw="$nw -Wtraditional" # Warns on #elif which we use often + nw="$nw -Wcast-qual" # Too many warnings for now + nw="$nw -Wconversion" # Too many warnings for now + nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings + nw="$nw -Wsign-conversion" # Too many warnings for now + nw="$nw -Wtraditional-conversion" # Too many warnings for now + nw="$nw -Wunreachable-code" # Too many warnings for now + nw="$nw -Wpadded" # Our structs are not padded + nw="$nw -Wredundant-decls" # openat.h declares e.g., mkdirat + nw="$nw -Wlogical-op" # any use of fwrite provokes this + nw="$nw -Wformat-nonliteral" # who.c and pinky.c strftime uses + nw="$nw -Wvla" # warnings in gettext.h + nw="$nw -Wnested-externs" # use of XARGMATCH/verify_function__ + nw="$nw -Wswitch-enum" # Too many warnings for now + nw="$nw -Wswitch-default" # Too many warnings for now + nw="$nw -Wstack-protector" # not worth working around + # things I might fix soon: + nw="$nw -Wfloat-equal" # sort.c, seq.c + nw="$nw -Wmissing-format-attribute" # copy.c + nw="$nw -Wunsafe-loop-optimizations" # a few src/*.c + nw="$nw -Winline" # system.h's readdir_ignoring_dot_and_dotdot + nw="$nw -Wstrict-overflow" # expr.c, pr.c, tr.c, factor.c + nw="$nw -Wformat-extra-args" # sdiff.c + # ?? -Wstrict-overflow + + gl_MANYWARN_ALL_GCC([ws]) + gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw]) + for w in $ws; do + gl_WARN_ADD([$w]) + done + gl_WARN_ADD([-Wno-missing-field-initializers]) # We need this one + gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now + gl_WARN_ADD([-Wno-pointer-sign]) # Too many warnings for now + gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now + + # In spite of excluding -Wlogical-op above, it is enabled, as of + # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c + gl_WARN_ADD([-Wno-logical-op]) + + gl_WARN_ADD([-fdiagnostics-show-option]) + gl_WARN_ADD([-funit-at-a-time]) + + AC_SUBST([WARN_CFLAGS]) + + AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.]) + AC_DEFINE([_FORTIFY_SOURCE], [2], + [enable compile-time and run-time bounds-checking, and some warnings]) + AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks]) + + # We use a slightly smaller set of warning options for lib/. + # Remove the following and save the result in GNULIB_WARN_CFLAGS. + nw= + nw="$nw -Wunused-macros" + nw="$nw -Wmissing-prototypes" + nw="$nw -Wold-style-definition" + gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) + AC_SUBST([GNULIB_WARN_CFLAGS]) +fi + +AC_C_INLINE +AC_C_VARARRAYS + +AC_DEFINE([DEFAULT_EDITOR_PROGRAM], ["ed"], + [Name of editor program, unless overridden.]) + +AC_PATH_PROG([PR_PROGRAM], [pr], [""]) +AC_DEFINE_UNQUOTED([PR_PROGRAM], ["$PR_PROGRAM"], [Name of "pr" program.]) + +AC_CHECK_MEMBERS([struct stat.st_blksize]) +AC_CHECK_MEMBERS([struct stat.st_rdev]) +AC_HEADER_DIRENT +AC_HEADER_SYS_WAIT +AC_TYPE_PID_T + +AC_CHECK_FUNCS_ONCE([sigaction sigprocmask strcasecoll stricoll]) +if test $ac_cv_func_sigprocmask = no; then + AC_CHECK_FUNCS([sigblock]) +fi +AC_FUNC_CLOSEDIR_VOID +AC_FUNC_FORK + +AM_GNU_GETTEXT([external], [need-ngettext]) +AM_GNU_GETTEXT_VERSION([0.17]) +XGETTEXT="AWK='$AWK' \$(SHELL) \$(top_srcdir)/exgettext $XGETTEXT" + +AC_CONFIG_FILES([ + Makefile doc/Makefile + lib/Makefile + src/Makefile + tests/Makefile + gnulib-tests/Makefile + man/Makefile + po/Makefile.in + ms/Makefile +]) +AC_OUTPUT diff --git a/dist-check.mk b/dist-check.mk new file mode 100644 index 0000000..dd30db2 --- /dev/null +++ b/dist-check.mk @@ -0,0 +1,170 @@ +# Most of this is probably too coreutils-centric to be useful to other packages. + +bin=bin-$$$$ + +write_loser = printf '\#!%s\necho $$0: bad path 1>&2; exit 1\n' '$(SHELL)' + +tmpdir = $(abs_top_builddir)/tests/torture + +t=$(tmpdir)/$(PACKAGE)/test +pfx=$(t)/i + +built_programs = \ + $$(echo 'spy:;@echo $$(bin_PROGRAMS)' \ + | MAKEFLAGS= $(MAKE) -s -C src -f Makefile -f - spy \ + | fmt -1 | sed 's,$(EXEEXT)$$,,' | sort -u) + +# More than once, tainted build and source directory names would +# have caused at least one "make check" test to apply "chmod 700" +# to all directories under $HOME. Make sure it doesn't happen again. +tp = $(tmpdir)/taint +t_prefix = $(tp)/a +t_taint = '$(t_prefix) b' +fake_home = $(tp)/home + +# When extracting from a distribution tarball, extract using the fastest +# method possible. With dist-xz, that means using the *.xz file. +ifneq ('', $(filter *.xz, $(DIST_ARCHIVES))) + tar_decompress_opt_ = J + suffix_ = xz +else + ifneq ('', $(filter *.gz, $(DIST_ARCHIVES))) + tar_decompress_opt_ = z + suffix_ = gz + else + tar_decompress_opt_ = j + suffix_ = bz2 + endif +endif +amtar_extract_ = $(AMTAR) -$(tar_decompress_opt_)xf +preferred_tarball_ = $(distdir).tar.$(suffix_) + +# Ensure that tests run from tainted build and src dir names work, +# and don't affect anything in $HOME. Create witness files in $HOME, +# record their attributes, and build/test. Then ensure that the +# witnesses were not affected. +# Skip this test when using libtool, since libtool-generated scripts +# cannot deal with a space-tainted srcdir. +ALL_RECURSIVE_TARGETS += taint-distcheck +taint-distcheck: $(DIST_ARCHIVES) + grep '^[ ]*LT_INIT' configure.ac >/dev/null && exit 0 || : + test -d $(t_taint) && chmod -R 700 $(t_taint) || : + -rm -rf $(t_taint) $(fake_home) + mkdir -p $(t_prefix) $(t_taint) $(fake_home) + $(amtar_extract_) $(preferred_tarball_) -C $(t_taint) + mkfifo $(fake_home)/fifo + touch $(fake_home)/f + mkdir -p $(fake_home)/d/e + ls -lR $(fake_home) $(t_prefix) > $(tp)/.ls-before + HOME=$(fake_home); export HOME; \ + cd $(t_taint)/$(distdir) \ + && ./configure \ + && $(MAKE) \ + && $(MAKE) check \ + && ls -lR $(fake_home) $(t_prefix) > $(tp)/.ls-after \ + && diff $(tp)/.ls-before $(tp)/.ls-after \ + && test -d $(t_prefix) + rm -rf $(tp) + +# Verify that a twisted use of --program-transform-name=PROGRAM works. +define install-transform-check + echo running install-transform-check \ + && rm -rf $(pfx) \ + && $(MAKE) program_transform_name='s/.*/zyx/' \ + prefix=$(pfx) install \ + && test "$$(echo $(pfx)/bin/*)" = "$(pfx)/bin/zyx" \ + && test "$$(find $(pfx)/share/man -type f|sed 's,.*/,,;s,\..*,,')" = "zyx" +endef + +# Install, then verify that all binaries and man pages are in place. +# Note that neither the binary, ginstall, nor the [.1 man page is installed. +define my-instcheck + echo running my-instcheck; \ + $(MAKE) prefix=$(pfx) install \ + && test ! -f $(pfx)/bin/ginstall \ + && { fail=0; \ + for i in $(built_programs); do \ + test "$$i" = ginstall && i=install; \ + for j in "$(pfx)/bin/$$i" \ + "$(pfx)/share/man/man1/$$i.1"; do \ + case $$j in *'[.1') continue;; esac; \ + test -f "$$j" && : \ + || { echo "$$j not installed"; fail=1; }; \ + done; \ + done; \ + test $$fail = 1 && exit 1 || :; \ + } +endef + +# The hard-linking for-loop below ensures that there is a bin/ directory +# full of all of the programs under test (except the ones that are required +# for basic Makefile rules), all symlinked to the just-built "false" program. +# This is to ensure that if ever a test neglects to make PATH include +# the build srcdir, these always-failing programs will run. +# Otherwise, it is too easy to test the wrong programs. +# Note that "false" itself is a symlink to true, so it too will malfunction. +define coreutils-path-check + { \ + echo running coreutils-path-check; \ + if test -f $(srcdir)/src/true.c; then \ + fail=1; \ + mkdir $(bin) \ + && ($(write_loser)) > $(bin)/loser \ + && chmod a+x $(bin)/loser \ + && for i in $(built_programs); do \ + case $$i in \ + rm|expr|basename|echo|sort|ls|tr);; \ + cat|dirname|mv|wc);; \ + *) ln $(bin)/loser $(bin)/$$i;; \ + esac; \ + done \ + && ln -sf ../src/true $(bin)/false \ + && PATH=`pwd`/$(bin)$(PATH_SEPARATOR)$$PATH \ + $(MAKE) -C tests check \ + && { test -d gnulib-tests \ + && $(MAKE) -C gnulib-tests check \ + || :; } \ + && rm -rf $(bin) \ + && fail=0; \ + else \ + fail=0; \ + fi; \ + test $$fail = 1 && exit 1 || :; \ + } +endef + +# Use this to make sure we don't run these programs when building +# from a virgin compressed tarball file, below. +null_AM_MAKEFLAGS ?= \ + ACLOCAL=false \ + AUTOCONF=false \ + AUTOMAKE=false \ + AUTOHEADER=false \ + GPERF=false \ + MAKEINFO=false + +ALL_RECURSIVE_TARGETS += my-distcheck +my-distcheck: $(DIST_ARCHIVES) $(local-check) + $(MAKE) syntax-check + $(MAKE) check + -rm -rf $(t) + mkdir -p $(t) + $(amtar_extract_) $(preferred_tarball_) -C $(t) + (set -e; cd $(t)/$(distdir); \ + ./configure --quiet --enable-gcc-warnings --disable-nls; \ + $(MAKE) AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)'; \ + $(MAKE) dvi; \ + $(install-transform-check); \ + $(my-instcheck); \ + $(coreutils-path-check); \ + $(MAKE) distclean \ + ) + (cd $(t) && mv $(distdir) $(distdir).old \ + && $(amtar_extract_) - ) < $(preferred_tarball_) + diff -ur $(t)/$(distdir).old $(t)/$(distdir) + -rm -rf $(t) + rmdir $(tmpdir)/$(PACKAGE) $(tmpdir) + @echo "========================"; \ + echo "ready for distribution:"; \ + for i in $(DIST_ARCHIVES); do echo " $$i"; done; \ + echo "========================" diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..d864f09 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,23 @@ +# Makefile for GNU diffutils documentation. + +# Copyright (C) 2001-2002, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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_MAKEINFOFLAGS = --no-split + +info_TEXINFOS = diff.texi +diff_TEXINFOS = fdl.texi + +EXTRA_DIST = diagmeet.note diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 0000000..ff88294 --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,1309 @@ +# Makefile.in generated by automake 1.11a from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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 GNU diffutils documentation. + +# Copyright (C) 2001-2002, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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@ +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 +DIST_COMMON = $(diff_TEXINFOS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/stamp-vti \ + $(srcdir)/version.texi +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/c-stack.m4 \ + $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.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/exclude.m4 \ + $(top_srcdir)/m4/extensions.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/file-type.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/freopen.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21_gl.m4 $(top_srcdir)/m4/gnu-make.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \ + $(top_srcdir)/m4/iconv_open.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lib-ld_gl.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix_gl.m4 \ + $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-tr.m4 \ + $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/longlong_gl.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/manywarnings.m4 \ + $(top_srcdir)/m4/mbchar.m4 $(top_srcdir)/m4/mbiter.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbslen.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/memchr.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/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/onceonly.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po_gl.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/putenv.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.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/stdio-safer.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/strftime.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strptime.m4 \ + $(top_srcdir)/m4/strtoimax.m4 $(top_srcdir)/m4/strtol.m4 \ + $(top_srcdir)/m4/strtoll.m4 $(top_srcdir)/m4/strtoul.m4 \ + $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/strtoumax.m4 \ + $(top_srcdir)/m4/symlink.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/time_h.m4 \ + $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/vararrays.m4 \ + $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.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/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \ + $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xstrtol.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +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_MAKEINFO = $(am__v_MAKEINFO_$(V)) +am__v_MAKEINFO_ = $(am__v_MAKEINFO_$(AM_DEFAULT_VERBOSITY)) +am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; +AM_V_INFOHTML = $(am__v_INFOHTML_$(V)) +am__v_INFOHTML_ = $(am__v_INFOHTML_$(AM_DEFAULT_VERBOSITY)) +am__v_INFOHTML_0 = @echo " INFOHTML" $@; +AM_V_TEXI2DVI = $(am__v_TEXI2DVI_$(V)) +am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_$(AM_DEFAULT_VERBOSITY)) +am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; +AM_V_TEXI2PDF = $(am__v_TEXI2PDF_$(V)) +am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_$(AM_DEFAULT_VERBOSITY)) +am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; +AM_V_texinfo = $(am__v_texinfo_$(V)) +am__v_texinfo_ = $(am__v_texinfo_$(AM_DEFAULT_VERBOSITY)) +am__v_texinfo_0 = -q +AM_V_texidevnull = $(am__v_texidevnull_$(V)) +am__v_texidevnull_ = $(am__v_texidevnull_$(AM_DEFAULT_VERBOSITY)) +am__v_texidevnull_0 = > /dev/null +INFO_DEPS = $(srcdir)/diff.info +TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex +am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux +DVIS = diff.dvi +PDFS = diff.pdf +PSS = diff.ps +HTMLS = diff.html +TEXINFOS = diff.texi +TEXI2DVI = texi2dvi +TEXI2PDF = $(TEXI2DVI) --pdf --batch +MAKEINFOHTML = $(MAKEINFO) --html +AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) +DVIPS = dvips +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' +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@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +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@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +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@ +FNMATCH_H = @FNMATCH_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +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_FFLUSH = @GNULIB_FFLUSH@ +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_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +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_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_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +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_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_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STAT = @GNULIB_STAT@ +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_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_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ +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_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WARN_CFLAGS = @GNULIB_WARN_CFLAGS@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +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_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +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_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_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +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_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +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_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LIBSIGSEGV = @HAVE_LIBSIGSEGV@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOCALTIME_R = @HAVE_LOCALTIME_R@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +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_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +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_SLEEP = @HAVE_SLEEP@ +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_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_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_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_TIMEGM = @HAVE_TIMEGM@ +HAVE_TTYNAME_R = @HAVE_TTYNAME_R@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +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_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HELP2MAN = @HELP2MAN@ +ICONV_H = @ICONV_H@ +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@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBDIFFUTILS_LIBDEPS = @LIBDIFFUTILS_LIBDEPS@ +LIBDIFFUTILS_LTLIBDEPS = @LIBDIFFUTILS_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSIGSEGV = @LIBSIGSEGV@ +LIBSIGSEGV_PREFIX = @LIBSIGSEGV_PREFIX@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +MAKEINFO = @MAKEINFO@ +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_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_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_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_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_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_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_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_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_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_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@ +OBJEXT = @OBJEXT@ +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@ +POSUB = @POSUB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PR_PROGRAM = @PR_PROGRAM@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +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_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +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_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_NANOSLEEP = @REPLACE_NANOSLEEP@ +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_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +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_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +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_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +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_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_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_aux_dir = @abs_aux_dir@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +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@ +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@ +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@ +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@ +AM_MAKEINFOFLAGS = --no-split +info_TEXINFOS = diff.texi +diff_TEXINFOS = fdl.texi +EXTRA_DIST = diagmeet.note +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 +.PRECIOUS: 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): + +.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) $< $(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) $< $(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 $@; \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ + else \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ + exit 1; \ + fi +$(srcdir)/diff.info: diff.texi $(srcdir)/version.texi $(diff_TEXINFOS) +diff.dvi: diff.texi $(srcdir)/version.texi $(diff_TEXINFOS) +diff.pdf: diff.texi $(srcdir)/version.texi $(diff_TEXINFOS) +diff.html: diff.texi $(srcdir)/version.texi $(diff_TEXINFOS) +$(srcdir)/version.texi: $(srcdir)/stamp-vti +$(srcdir)/stamp-vti: diff.texi $(top_srcdir)/configure + @(dir=.; test -f ./diff.texi || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/diff.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) + -@rm -f vti.tmp + @cp $(srcdir)/version.texi $@ + +mostlyclean-vti: + -rm -f vti.tmp + +maintainer-clean-vti: + -rm -f $(srcdir)/stamp-vti $(srcdir)/version.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)' && \ + (install-info --version && \ + install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; 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 diff.aux diff.cp diff.cps diff.fn diff.fns diff.ky diff.kys \ + diff.log diff.pg diff.pgs diff.tmp diff.toc diff.tp diff.tps \ + diff.vr + +clean-aminfo: + -test -z "diff.dvi diff.pdf diff.ps diff.html" \ + || rm -rf diff.dvi diff.pdf diff.ps diff.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 +TAGS: + +ctags: 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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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 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) + test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + 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) + test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + if test -d "$$d$$p"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ + else \ + list2="$$list2 $$d$$p"; \ + 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) + test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + 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 (install-info --version && \ + install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; 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) + test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + 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) + test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + 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-aminfo \ + maintainer-clean-generic maintainer-clean-vti + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-aminfo mostlyclean-generic 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 \ + dist-info distclean distclean-generic 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-aminfo maintainer-clean-generic \ + maintainer-clean-vti mostlyclean mostlyclean-aminfo \ + mostlyclean-generic mostlyclean-vti pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-dvi-am uninstall-html-am \ + uninstall-info-am uninstall-pdf-am uninstall-ps-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/doc/diagmeet.note b/doc/diagmeet.note new file mode 100644 index 0000000..9ffd175 --- /dev/null +++ b/doc/diagmeet.note @@ -0,0 +1,62 @@ +Here is a comparison matrix which shows a case in which +it is possible for the forward and backward scan in `diag' +to meet along a nonzero length of diagonal simultaneous +(so that bdiag[d] and fdiag[d] are not equal) +even though there is no snake on that diagonal at the meeting point. + + + 85 1 1 1 159 1 1 17 + 1 2 3 4 +60 + 1 2 +1 + 2 2 3 4 +71 + 3 3 4 5 +85 + 4 3 4 5 +17 + 5 4 5 +1 + 6 4 5 6 +183 + 7 5 6 7 +10 + 8 6 7 +1 + 9 6 7 8 +12 + 7 8 9 10 +13 + 10 8 9 10 +14 + 10 9 10 +17 + 10 10 +1 + 10 9 10 +1 + 8 10 10 10 +183 + 8 7 9 9 9 +10 + 7 6 8 9 8 8 +1 + 6 5 7 7 +1 + 5 6 6 +1 + 5 5 5 +50 + 5 4 4 4 +1 + 4 3 3 +85 + 5 4 3 2 2 +1 + 2 1 +17 + 5 4 3 2 1 1 +1 + 1 0 + 85 1 1 1 159 1 1 17 diff --git a/doc/diff.info b/doc/diff.info new file mode 100644 index 0000000..540d4a1 --- /dev/null +++ b/doc/diff.info @@ -0,0 +1,5305 @@ +This is diff.info, produced by makeinfo version 4.13 from diff.texi. + +This manual is for GNU Diffutils (version 3.0, 15 April 2010), and +documents the GNU `diff', `diff3', `sdiff', and `cmp' commands for +showing the differences between files and the GNU `patch' command for +using their output to update files. + + Copyright (C) 1992-1994, 1998, 2001-2002, 2004, 2006, 2009-2010 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, 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." + +INFO-DIR-SECTION Individual utilities +START-INFO-DIR-ENTRY +* cmp: (diff)Invoking cmp. Compare 2 files byte by byte. +* diff: (diff)Invoking diff. Compare 2 files line by line. +* diff3: (diff)Invoking diff3. Compare 3 files line by line. +* patch: (diff)Invoking patch. Apply a patch to a file. +* sdiff: (diff)Invoking sdiff. Merge 2 files side-by-side. +END-INFO-DIR-ENTRY + +INFO-DIR-SECTION Text creation and manipulation +START-INFO-DIR-ENTRY +* Diff: (diff). Comparing and merging files. +END-INFO-DIR-ENTRY + + +File: diff.info, Node: Top, Next: Overview, Up: (dir) + +Comparing and Merging Files +*************************** + +This manual is for GNU Diffutils (version 3.0, 15 April 2010), and +documents the GNU `diff', `diff3', `sdiff', and `cmp' commands for +showing the differences between files and the GNU `patch' command for +using their output to update files. + + Copyright (C) 1992-1994, 1998, 2001-2002, 2004, 2006, 2009-2010 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, 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." + +* Menu: + +* Overview:: Preliminary information. +* Comparison:: What file comparison means. + +* Output Formats:: Formats for two-way difference reports. +* Incomplete Lines:: Lines that lack trailing newlines. +* Comparing Directories:: Comparing files and directories. +* Adjusting Output:: Making `diff' output prettier. +* diff Performance:: Making `diff' smarter or faster. + +* Comparing Three Files:: Formats for three-way difference reports. +* diff3 Merging:: Merging from a common ancestor. + +* Interactive Merging:: Interactive merging with `sdiff'. + +* Merging with patch:: Using `patch' to change old files into new ones. +* Making Patches:: Tips for making and using patch distributions. + +* Invoking cmp:: Compare two files byte by byte. +* Invoking diff:: Compare two files line by line. +* Invoking diff3:: Compare three files line by line. +* Invoking patch:: Apply a diff file to an original. +* Invoking sdiff:: Side-by-side merge of file differences. + +* Standards conformance:: Conformance to the POSIX standard. +* Projects:: If you've found a bug or other shortcoming. + +* Copying This Manual:: How to make copies of this manual. +* Translations:: Available translations of this manual. +* Index:: Index. + + +File: diff.info, Node: Overview, Next: Comparison, Prev: Top, Up: Top + +Overview +******** + +Computer users often find occasion to ask how two files differ. Perhaps +one file is a newer version of the other file. Or maybe the two files +started out as identical copies but were changed by different people. + + You can use the `diff' command to show differences between two +files, or each corresponding file in two directories. `diff' outputs +differences between files line by line in any of several formats, +selectable by command line options. This set of differences is often +called a "diff" or "patch". For files that are identical, `diff' +normally produces no output; for binary (non-text) files, `diff' +normally reports only that they are different. + + You can use the `cmp' command to show the byte and line numbers +where two files differ. `cmp' can also show all the bytes that differ +between the two files, side by side. A way to compare two files +character by character is the Emacs command `M-x compare-windows'. +*Note Other Window: (emacs)Other Window, for more information on that +command. + + You can use the `diff3' command to show differences among three +files. When two people have made independent changes to a common +original, `diff3' can report the differences between the original and +the two changed versions, and can produce a merged file that contains +both persons' changes together with warnings about conflicts. + + You can use the `sdiff' command to merge two files interactively. + + You can use the set of differences produced by `diff' to distribute +updates to text files (such as program source code) to other people. +This method is especially useful when the differences are small compared +to the complete files. Given `diff' output, you can use the `patch' +program to update, or "patch", a copy of the file. If you think of +`diff' as subtracting one file from another to produce their +difference, you can think of `patch' as adding the difference to one +file to reproduce the other. + + This manual first concentrates on making diffs, and later shows how +to use diffs to update files. + + GNU `diff' was written by Paul Eggert, Mike Haertel, David Hayes, +Richard Stallman, and Len Tower. Wayne Davison designed and +implemented the unified output format. The basic algorithm is described +by Eugene W. Myers in "An O(ND) Difference Algorithm and its +Variations", `Algorithmica' Vol. 1 No. 2, 1986, pp. 251-266; and in "A +File Comparison Program", Webb Miller and Eugene W. Myers, +`Software--Practice and Experience' Vol. 15 No. 11, 1985, pp. 1025-1040. +The algorithm was independently discovered as described by E. Ukkonen in +"Algorithms for Approximate String Matching", `Information and Control' +Vol. 64, 1985, pp. 100-118. Unless the `--minimal' option is used, +`diff' uses a heuristic by Paul Eggert that limits the cost to O(N^1.5 +log N) at the price of producing suboptimal output for large inputs +with many differences. Related algorithms are surveyed by Alfred V. +Aho in section 6.3 of "Algorithms for Finding Patterns in Strings", +`Handbook of Theoretical Computer Science' (Jan Van Leeuwen, ed.), Vol. +A, `Algorithms and Complexity', Elsevier/MIT Press, 1990, pp. 255-300. + + GNU `diff3' was written by Randy Smith. GNU `sdiff' was written by +Thomas Lord. GNU `cmp' was written by Torbjo"rn Granlund and David +MacKenzie. + + GNU `patch' was written mainly by Larry Wall and Paul Eggert; +several GNU enhancements were contributed by Wayne Davison and David +MacKenzie. Parts of this manual are adapted from a manual page written +by Larry Wall, with his permission. + + +File: diff.info, Node: Comparison, Next: Output Formats, Prev: Overview, Up: Top + +1 What Comparison Means +*********************** + +There are several ways to think about the differences between two files. +One way to think of the differences is as a series of lines that were +deleted from, inserted in, or changed in one file to produce the other +file. `diff' compares two files line by line, finds groups of lines +that differ, and reports each group of differing lines. It can report +the differing lines in several formats, which have different purposes. + + GNU `diff' can show whether files are different without detailing +the differences. It also provides ways to suppress certain kinds of +differences that are not important to you. Most commonly, such +differences are changes in the amount of white space between words or +lines. `diff' also provides ways to suppress differences in alphabetic +case or in lines that match a regular expression that you provide. +These options can accumulate; for example, you can ignore changes in +both white space and alphabetic case. + + Another way to think of the differences between two files is as a +sequence of pairs of bytes that can be either identical or different. +`cmp' reports the differences between two files byte by byte, instead +of line by line. As a result, it is often more useful than `diff' for +comparing binary files. For text files, `cmp' is useful mainly when +you want to know only whether two files are identical, or whether one +file is a prefix of the other. + + To illustrate the effect that considering changes byte by byte can +have compared with considering them line by line, think of what happens +if a single newline character is added to the beginning of a file. If +that file is then compared with an otherwise identical file that lacks +the newline at the beginning, `diff' will report that a blank line has +been added to the file, while `cmp' will report that almost every byte +of the two files differs. + + `diff3' normally compares three input files line by line, finds +groups of lines that differ, and reports each group of differing lines. +Its output is designed to make it easy to inspect two different sets of +changes to the same file. + +* Menu: + +* Hunks:: Groups of differing lines. +* White Space:: Suppressing differences in white space. +* Blank Lines:: Suppressing differences whose lines are all blank. +* Specified Lines:: Suppressing differences whose lines all match a pattern. +* Case Folding:: Suppressing differences in alphabetic case. +* Brief:: Summarizing which files are different. +* Binary:: Comparing binary files or forcing text comparisons. + + +File: diff.info, Node: Hunks, Next: White Space, Up: Comparison + +1.1 Hunks +========= + +When comparing two files, `diff' finds sequences of lines common to +both files, interspersed with groups of differing lines called "hunks". +Comparing two identical files yields one sequence of common lines and +no hunks, because no lines differ. Comparing two entirely different +files yields no common lines and one large hunk that contains all lines +of both files. In general, there are many ways to match up lines +between two given files. `diff' tries to minimize the total hunk size +by finding large sequences of common lines interspersed with small +hunks of differing lines. + + For example, suppose the file `F' contains the three lines `a', `b', +`c', and the file `G' contains the same three lines in reverse order +`c', `b', `a'. If `diff' finds the line `c' as common, then the command +`diff F G' produces this output: + + 1,2d0 + < a + < b + 3a2,3 + > b + > a + +But if `diff' notices the common line `b' instead, it produces this +output: + + 1c1 + < a + --- + > c + 3c3 + < c + --- + > a + +It is also possible to find `a' as the common line. `diff' does not +always find an optimal matching between the files; it takes shortcuts +to run faster. But its output is usually close to the shortest +possible. You can adjust this tradeoff with the `-d' or `--minimal' +option (*note diff Performance::). + + +File: diff.info, Node: White Space, Next: Blank Lines, Prev: Hunks, Up: Comparison + +1.2 Suppressing Differences in Blank and Tab Spacing +==================================================== + +The `-E' or `--ignore-tab-expansion' option ignores the distinction +between tabs and spaces on input. A tab is considered to be equivalent +to the number of spaces to the next tab stop (*note Tabs::). + + The `-b' or `--ignore-space-change' option is stronger. It ignores +white space at line end, and considers all other sequences of one or +more white space characters within a line to be equivalent. With this +option, `diff' considers the following two lines to be equivalent, +where `$' denotes the line end: + + Here lyeth muche rychnesse in lytell space. -- John Heywood$ + Here lyeth muche rychnesse in lytell space. -- John Heywood $ + + The `-w' or `--ignore-all-space' option is stronger still. It +ignores differences even if one line has white space where the other +line has none. "White space" characters include tab, vertical tab, +form feed, carriage return, and space; some locales may define +additional characters to be white space. With this option, `diff' +considers the following two lines to be equivalent, where `$' denotes +the line end and `^M' denotes a carriage return: + + Here lyeth muche rychnesse in lytell space.-- John Heywood$ + He relyeth much erychnes seinly tells pace. --John Heywood ^M$ + + For many other programs newline is also a white space character, but +`diff' is a line-oriented program and a newline character always ends a +line. Hence the `-w' or `--ignore-all-space' option does not ignore +newline-related changes; it ignores only other white space changes. + + +File: diff.info, Node: Blank Lines, Next: Specified Lines, Prev: White Space, Up: Comparison + +1.3 Suppressing Differences Whose Lines Are All Blank +===================================================== + +The `-B' or `--ignore-blank-lines' option ignores changes that consist +entirely of blank lines. With this option, for example, a file +containing + 1. A point is that which has no part. + + 2. A line is breadthless length. + -- Euclid, The Elements, I + is considered identical to a file containing + 1. A point is that which has no part. + 2. A line is breadthless length. + + + -- Euclid, The Elements, I + + Normally this option affects only lines that are completely empty, +but if you also specify the `-b' or `--ignore-space-change' option, or +the `-w' or `--ignore-all-space' option, lines are also affected if +they look empty but contain white space. In other words, `-B' is +equivalent to `-I '^$'' by default, but it is equivalent to `-I +'^[[:space:]]*$'' if `-b' or `-w' is also specified. + + +File: diff.info, Node: Specified Lines, Next: Case Folding, Prev: Blank Lines, Up: Comparison + +1.4 Suppressing Differences Whose Lines All Match a Regular Expression +====================================================================== + +To ignore insertions and deletions of lines that match a `grep'-style +regular expression, use the `-I REGEXP' or +`--ignore-matching-lines=REGEXP' option. You should escape regular +expressions that contain shell metacharacters to prevent the shell from +expanding them. For example, `diff -I '^[[:digit:]]'' ignores all +changes to lines beginning with a digit. + + However, `-I' only ignores the insertion or deletion of lines that +contain the regular expression if every changed line in the hunk--every +insertion and every deletion--matches the regular expression. In other +words, for each nonignorable change, `diff' prints the complete set of +changes in its vicinity, including the ignorable ones. + + You can specify more than one regular expression for lines to ignore +by using more than one `-I' option. `diff' tries to match each line +against each regular expression. + + +File: diff.info, Node: Case Folding, Next: Brief, Prev: Specified Lines, Up: Comparison + +1.5 Suppressing Case Differences +================================ + +GNU `diff' can treat lower case letters as equivalent to their upper +case counterparts, so that, for example, it considers `Funky Stuff', +`funky STUFF', and `fUNKy stuFf' to all be the same. To request this, +use the `-i' or `--ignore-case' option. + + +File: diff.info, Node: Brief, Next: Binary, Prev: Case Folding, Up: Comparison + +1.6 Summarizing Which Files Differ +================================== + +When you only want to find out whether files are different, and you +don't care what the differences are, you can use the summary output +format. In this format, instead of showing the differences between the +files, `diff' simply reports whether files differ. The `-q' or +`--brief' option selects this output format. + + This format is especially useful when comparing the contents of two +directories. It is also much faster than doing the normal line by line +comparisons, because `diff' can stop analyzing the files as soon as it +knows that there are any differences. + + You can also get a brief indication of whether two files differ by +using `cmp'. For files that are identical, `cmp' produces no output. +When the files differ, by default, `cmp' outputs the byte and line +number where the first difference occurs, or reports that one file is a +prefix of the other. You can use the `-s', `--quiet', or `--silent' +option to suppress that information, so that `cmp' produces no output +and reports whether the files differ using only its exit status (*note +Invoking cmp::). + + Unlike `diff', `cmp' cannot compare directories; it can only compare +two files. + + +File: diff.info, Node: Binary, Prev: Brief, Up: Comparison + +1.7 Binary Files and Forcing Text Comparisons +============================================= + +If `diff' thinks that either of the two files it is comparing is binary +(a non-text file), it normally treats that pair of files much as if the +summary output format had been selected (*note Brief::), and reports +only that the binary files are different. This is because line by line +comparisons are usually not meaningful for binary files. + + `diff' determines whether a file is text or binary by checking the +first few bytes in the file; the exact number of bytes is system +dependent, but it is typically several thousand. If every byte in that +part of the file is non-null, `diff' considers the file to be text; +otherwise it considers the file to be binary. + + Sometimes you might want to force `diff' to consider files to be +text. For example, you might be comparing text files that contain null +characters; `diff' would erroneously decide that those are non-text +files. Or you might be comparing documents that are in a format used +by a word processing system that uses null characters to indicate +special formatting. You can force `diff' to consider all files to be +text files, and compare them line by line, by using the `-a' or +`--text' option. If the files you compare using this option do not in +fact contain text, they will probably contain few newline characters, +and the `diff' output will consist of hunks showing differences between +long lines of whatever characters the files contain. + + You can also force `diff' to report only whether files differ (but +not how). Use the `-q' or `--brief' option for this. + + Normally, differing binary files count as trouble because the +resulting `diff' output does not capture all the differences. This +trouble causes `diff' to exit with status 2. However, this trouble +cannot occur with the `-a' or `--text' option, or with the `-q' or +`--brief' option, as these options both cause `diff' to generate a form +of output that represents differences as requested. + + In operating systems that distinguish between text and binary files, +`diff' normally reads and writes all data as text. Use the `--binary' +option to force `diff' to read and write binary data instead. This +option has no effect on a POSIX-compliant system like GNU or +traditional Unix. However, many personal computer operating systems +represent the end of a line with a carriage return followed by a +newline. On such systems, `diff' normally ignores these carriage +returns on input and generates them at the end of each output line, but +with the `--binary' option `diff' treats each carriage return as just +another input character, and does not generate a carriage return at the +end of each output line. This can be useful when dealing with non-text +files that are meant to be interchanged with POSIX-compliant systems. + + The `--strip-trailing-cr' causes `diff' to treat input lines that +end in carriage return followed by newline as if they end in plain +newline. This can be useful when comparing text that is imperfectly +imported from many personal computer operating systems. This option +affects how lines are read, which in turn affects how they are compared +and output. + + If you want to compare two files byte by byte, you can use the `cmp' +program with the `-l' or `--verbose' option to show the values of each +differing byte in the two files. With GNU `cmp', you can also use the +`-b' or `--print-bytes' option to show the ASCII representation of +those bytes. *Note Invoking cmp::, for more information. + + If `diff3' thinks that any of the files it is comparing is binary (a +non-text file), it normally reports an error, because such comparisons +are usually not useful. `diff3' uses the same test as `diff' to decide +whether a file is binary. As with `diff', if the input files contain a +few non-text bytes but otherwise are like text files, you can force +`diff3' to consider all files to be text files and compare them line by +line by using the `-a' or `--text' option. + + +File: diff.info, Node: Output Formats, Next: Incomplete Lines, Prev: Comparison, Up: Top + +2 `diff' Output Formats +*********************** + +`diff' has several mutually exclusive options for output format. The +following sections describe each format, illustrating how `diff' +reports the differences between two sample input files. + +* Menu: + +* Sample diff Input:: Sample `diff' input files for examples. +* Context:: Showing differences with the surrounding text. +* Side by Side:: Showing differences in two columns. +* Normal:: Showing differences without surrounding text. +* Scripts:: Generating scripts for other programs. +* If-then-else:: Merging files with if-then-else. + + +File: diff.info, Node: Sample diff Input, Next: Context, Up: Output Formats + +2.1 Two Sample Input Files +========================== + +Here are two sample files that we will use in numerous examples to +illustrate the output of `diff' and how various options can change it. + + This is the file `lao': + + The Way that can be told of is not the eternal Way; + The name that can be named is not the eternal name. + The Nameless is the origin of Heaven and Earth; + The Named is the mother of all things. + Therefore let there always be non-being, + so we may see their subtlety, + And let there always be being, + so we may see their outcome. + The two are the same, + But after they are produced, + they have different names. + + This is the file `tzu': + + The Nameless is the origin of Heaven and Earth; + The named is the mother of all things. + + Therefore let there always be non-being, + so we may see their subtlety, + And let there always be being, + so we may see their outcome. + The two are the same, + But after they are produced, + they have different names. + They both may be called deep and profound. + Deeper and more profound, + The door of all subtleties! + + In this example, the first hunk contains just the first two lines of +`lao', the second hunk contains the fourth line of `lao' opposing the +second and third lines of `tzu', and the last hunk contains just the +last three lines of `tzu'. + + +File: diff.info, Node: Context, Next: Side by Side, Prev: Sample diff Input, Up: Output Formats + +2.2 Showing Differences in Their Context +======================================== + +Usually, when you are looking at the differences between files, you will +also want to see the parts of the files near the lines that differ, to +help you understand exactly what has changed. These nearby parts of the +files are called the "context". + + GNU `diff' provides two output formats that show context around the +differing lines: "context format" and "unified format". It can +optionally show in which function or section of the file the differing +lines are found. + + If you are distributing new versions of files to other people in the +form of `diff' output, you should use one of the output formats that +show context so that they can apply the diffs even if they have made +small changes of their own to the files. `patch' can apply the diffs +in this case by searching in the files for the lines of context around +the differing lines; if those lines are actually a few lines away from +where the diff says they are, `patch' can adjust the line numbers +accordingly and still apply the diff correctly. *Note Imperfect::, for +more information on using `patch' to apply imperfect diffs. + +* Menu: + +* Context Format:: An output format that shows surrounding lines. +* Unified Format:: A more compact output format that shows context. +* Sections:: Showing which sections of the files differences are in. +* Alternate Names:: Showing alternate file names in context headers. + + +File: diff.info, Node: Context Format, Next: Unified Format, Up: Context + +2.2.1 Context Format +-------------------- + +The context output format shows several lines of context around the +lines that differ. It is the standard format for distributing updates +to source code. + + To select this output format, use the `-C LINES', +`--context[=LINES]', or `-c' option. The argument LINES that some of +these options take is the number of lines of context to show. If you +do not specify LINES, it defaults to three. For proper operation, +`patch' typically needs at least two lines of context. + +* Menu: + +* Example Context:: Sample output in context format. +* Less Context:: Another sample with less context. +* Detailed Context:: A detailed description of the context output format. + + +File: diff.info, Node: Example Context, Next: Less Context, Up: Context Format + +2.2.1.1 An Example of Context Format +.................................... + +Here is the output of `diff -c lao tzu' (*note Sample diff Input::, for +the complete contents of the two files). Notice that up to three lines +that are not different are shown around each line that is different; +they are the context lines. Also notice that the first two hunks have +run together, because their contents overlap. + + *** lao 2002-02-21 23:30:39.942229878 -0800 + --- tzu 2002-02-21 23:30:50.442260588 -0800 + *************** + *** 1,7 **** + - The Way that can be told of is not the eternal Way; + - The name that can be named is not the eternal name. + The Nameless is the origin of Heaven and Earth; + ! The Named is the mother of all things. + Therefore let there always be non-being, + so we may see their subtlety, + And let there always be being, + --- 1,6 ---- + The Nameless is the origin of Heaven and Earth; + ! The named is the mother of all things. + ! + Therefore let there always be non-being, + so we may see their subtlety, + And let there always be being, + *************** + *** 9,11 **** + --- 8,13 ---- + The two are the same, + But after they are produced, + they have different names. + + They both may be called deep and profound. + + Deeper and more profound, + + The door of all subtleties! + + +File: diff.info, Node: Less Context, Next: Detailed Context, Prev: Example Context, Up: Context Format + +2.2.1.2 An Example of Context Format with Less Context +...................................................... + +Here is the output of `diff -C 1 lao tzu' (*note Sample diff Input::, +for the complete contents of the two files). Notice that at most one +context line is reported here. + + *** lao 2002-02-21 23:30:39.942229878 -0800 + --- tzu 2002-02-21 23:30:50.442260588 -0800 + *************** + *** 1,5 **** + - The Way that can be told of is not the eternal Way; + - The name that can be named is not the eternal name. + The Nameless is the origin of Heaven and Earth; + ! The Named is the mother of all things. + Therefore let there always be non-being, + --- 1,4 ---- + The Nameless is the origin of Heaven and Earth; + ! The named is the mother of all things. + ! + Therefore let there always be non-being, + *************** + *** 11 **** + --- 10,13 ---- + they have different names. + + They both may be called deep and profound. + + Deeper and more profound, + + The door of all subtleties! + + +File: diff.info, Node: Detailed Context, Prev: Less Context, Up: Context Format + +2.2.1.3 Detailed Description of Context Format +.............................................. + +The context output format starts with a two-line header, which looks +like this: + + *** FROM-FILE FROM-FILE-MODIFICATION-TIME + --- TO-FILE TO-FILE-MODIFICATION TIME + +The time stamp normally looks like `2002-02-21 23:30:39.942229878 +-0800' to indicate the date, time with fractional seconds, and time +zone in Internet RFC 2822 format +(ftp://ftp.isi.edu/in-notes/rfc2822.txt). (The fractional seconds are +omitted on hosts that do not support fractional time stamps.) However, +a traditional time stamp like `Thu Feb 21 23:30:39 2002' is used if the +`LC_TIME' locale category is either `C' or `POSIX'. + + You can change the header's content with the `--label=LABEL' option; +see *note Alternate Names::. + + Next come one or more hunks of differences; each hunk shows one area +where the files differ. Context format hunks look like this: + + *************** + *** FROM-FILE-LINE-NUMBERS **** + FROM-FILE-LINE + FROM-FILE-LINE... + --- TO-FILE-LINE-NUMBERS ---- + TO-FILE-LINE + TO-FILE-LINE... + + If a hunk contains two or more lines, its line numbers look like +`START,END'. Otherwise only its end line number appears. An empty +hunk is considered to end at the line that precedes the hunk. + + The lines of context around the lines that differ start with two +space characters. The lines that differ between the two files start +with one of the following indicator characters, followed by a space +character: + +`!' + A line that is part of a group of one or more lines that changed + between the two files. There is a corresponding group of lines + marked with `!' in the part of this hunk for the other file. + +`+' + An "inserted" line in the second file that corresponds to nothing + in the first file. + +`-' + A "deleted" line in the first file that corresponds to nothing in + the second file. + + If all of the changes in a hunk are insertions, the lines of +FROM-FILE are omitted. If all of the changes are deletions, the lines +of TO-FILE are omitted. + + +File: diff.info, Node: Unified Format, Next: Sections, Prev: Context Format, Up: Context + +2.2.2 Unified Format +-------------------- + +The unified output format is a variation on the context format that is +more compact because it omits redundant context lines. To select this +output format, use the `-U LINES', `--unified[=LINES]', or `-u' option. +The argument LINES is the number of lines of context to show. When it +is not given, it defaults to three. + + At present, only GNU `diff' can produce this format and only GNU +`patch' can automatically apply diffs in this format. For proper +operation, `patch' typically needs at least three lines of context. + +* Menu: + +* Example Unified:: Sample output in unified format. +* Detailed Unified:: A detailed description of unified format. + + +File: diff.info, Node: Example Unified, Next: Detailed Unified, Up: Unified Format + +2.2.2.1 An Example of Unified Format +.................................... + +Here is the output of the command `diff -u lao tzu' (*note Sample diff +Input::, for the complete contents of the two files): + + --- lao 2002-02-21 23:30:39.942229878 -0800 + +++ tzu 2002-02-21 23:30:50.442260588 -0800 + @@ -1,7 +1,6 @@ + -The Way that can be told of is not the eternal Way; + -The name that can be named is not the eternal name. + The Nameless is the origin of Heaven and Earth; + -The Named is the mother of all things. + +The named is the mother of all things. + + + Therefore let there always be non-being, + so we may see their subtlety, + And let there always be being, + @@ -9,3 +8,6 @@ + The two are the same, + But after they are produced, + they have different names. + +They both may be called deep and profound. + +Deeper and more profound, + +The door of all subtleties! + + +File: diff.info, Node: Detailed Unified, Prev: Example Unified, Up: Unified Format + +2.2.2.2 Detailed Description of Unified Format +.............................................. + +The unified output format starts with a two-line header, which looks +like this: + + --- FROM-FILE FROM-FILE-MODIFICATION-TIME + +++ TO-FILE TO-FILE-MODIFICATION-TIME + +The time stamp looks like `2002-02-21 23:30:39.942229878 -0800' to +indicate the date, time with fractional seconds, and time zone. The +fractional seconds are omitted on hosts that do not support fractional +time stamps. + + You can change the header's content with the `--label=LABEL' option; +see *Note Alternate Names::. + + Next come one or more hunks of differences; each hunk shows one area +where the files differ. Unified format hunks look like this: + + @@ FROM-FILE-LINE-NUMBERS TO-FILE-LINE-NUMBERS @@ + LINE-FROM-EITHER-FILE + LINE-FROM-EITHER-FILE... + + If a hunk contains just one line, only its start line number appears. +Otherwise its line numbers look like `START,COUNT'. An empty hunk is +considered to start at the line that follows the hunk. + + If a hunk and its context contain two or more lines, its line +numbers look like `START,COUNT'. Otherwise only its end line number +appears. An empty hunk is considered to end at the line that precedes +the hunk. + + The lines common to both files begin with a space character. The +lines that actually differ between the two files have one of the +following indicator characters in the left print column: + +`+' + A line was added here to the first file. + +`-' + A line was removed here from the first file. + + +File: diff.info, Node: Sections, Next: Alternate Names, Prev: Unified Format, Up: Context + +2.2.3 Showing Which Sections Differences Are in +----------------------------------------------- + +Sometimes you might want to know which part of the files each change +falls in. If the files are source code, this could mean which function +was changed. If the files are documents, it could mean which chapter +or appendix was changed. GNU `diff' can show this by displaying the +nearest section heading line that precedes the differing lines. Which +lines are "section headings" is determined by a regular expression. + +* Menu: + +* Specified Headings:: Showing headings that match regular expressions. +* C Function Headings:: Showing headings of C functions. + + +File: diff.info, Node: Specified Headings, Next: C Function Headings, Up: Sections + +2.2.3.1 Showing Lines That Match Regular Expressions +.................................................... + +To show in which sections differences occur for files that are not +source code for C or similar languages, use the `-F REGEXP' or +`--show-function-line=REGEXP' option. `diff' considers lines that +match the `grep'-style regular expression REGEXP to be the beginning of +a section of the file. Here are suggested regular expressions for some +common languages: + +`^[[:alpha:]$_]' + C, C++, Prolog + +`^(' + Lisp + +`^@node' + Texinfo + + This option does not automatically select an output format; in order +to use it, you must select the context format (*note Context Format::) +or unified format (*note Unified Format::). In other output formats it +has no effect. + + The `-F' or `--show-function-line' option finds the nearest +unchanged line that precedes each hunk of differences and matches the +given regular expression. Then it adds that line to the end of the +line of asterisks in the context format, or to the `@@' line in unified +format. If no matching line exists, this option leaves the output for +that hunk unchanged. If that line is more than 40 characters long, it +outputs only the first 40 characters. You can specify more than one +regular expression for such lines; `diff' tries to match each line +against each regular expression, starting with the last one given. This +means that you can use `-p' and `-F' together, if you wish. + + +File: diff.info, Node: C Function Headings, Prev: Specified Headings, Up: Sections + +2.2.3.2 Showing C Function Headings +................................... + +To show in which functions differences occur for C and similar +languages, you can use the `-p' or `--show-c-function' option. This +option automatically defaults to the context output format (*note +Context Format::), with the default number of lines of context. You +can override that number with `-C LINES' elsewhere in the command line. +You can override both the format and the number with `-U LINES' +elsewhere in the command line. + + The `-p' or `--show-c-function' option is equivalent to `-F +'^[[:alpha:]$_]'' if the unified format is specified, otherwise `-c -F +'^[[:alpha:]$_]'' (*note Specified Headings::). GNU `diff' provides +this option for the sake of convenience. + + +File: diff.info, Node: Alternate Names, Prev: Sections, Up: Context + +2.2.4 Showing Alternate File Names +---------------------------------- + +If you are comparing two files that have meaningless or uninformative +names, you might want `diff' to show alternate names in the header of +the context and unified output formats. To do this, use the +`--label=LABEL' option. The first time you give this option, its +argument replaces the name and date of the first file in the header; +the second time, its argument replaces the name and date of the second +file. If you give this option more than twice, `diff' reports an +error. The `--label' option does not affect the file names in the `pr' +header when the `-l' or `--paginate' option is used (*note +Pagination::). + + Here are the first two lines of the output from `diff -C 2 +--label=original --label=modified lao tzu': + + *** original + --- modified + + +File: diff.info, Node: Side by Side, Next: Normal, Prev: Context, Up: Output Formats + +2.3 Showing Differences Side by Side +==================================== + +`diff' can produce a side by side difference listing of two files. The +files are listed in two columns with a gutter between them. The gutter +contains one of the following markers: + +white space + The corresponding lines are in common. That is, either the lines + are identical, or the difference is ignored because of one of the + `--ignore' options (*note White Space::). + +`|' + The corresponding lines differ, and they are either both complete + or both incomplete. + +`<' + The files differ and only the first file contains the line. + +`>' + The files differ and only the second file contains the line. + +`(' + Only the first file contains the line, but the difference is + ignored. + +`)' + Only the second file contains the line, but the difference is + ignored. + +`\' + The corresponding lines differ, and only the first line is + incomplete. + +`/' + The corresponding lines differ, and only the second line is + incomplete. + + Normally, an output line is incomplete if and only if the lines that +it contains are incomplete; *Note Incomplete Lines::. However, when an +output line represents two differing lines, one might be incomplete +while the other is not. In this case, the output line is complete, but +its the gutter is marked `\' if the first line is incomplete, `/' if +the second line is. + + Side by side format is sometimes easiest to read, but it has +limitations. It generates much wider output than usual, and truncates +lines that are too long to fit. Also, it relies on lining up output +more heavily than usual, so its output looks particularly bad if you +use varying width fonts, nonstandard tab stops, or nonprinting +characters. + + You can use the `sdiff' command to interactively merge side by side +differences. *Note Interactive Merging::, for more information on +merging files. + +* Menu: + +* Side by Side Format:: Controlling side by side output format. +* Example Side by Side:: Sample side by side output. + + +File: diff.info, Node: Side by Side Format, Next: Example Side by Side, Up: Side by Side + +2.3.1 Controlling Side by Side Format +------------------------------------- + +The `-y' or `--side-by-side' option selects side by side format. +Because side by side output lines contain two input lines, the output +is wider than usual: normally 130 print columns, which can fit onto a +traditional printer line. You can set the width of the output with the +`-W COLUMNS' or `--width=COLUMNS' option. The output is split into two +halves of equal width, separated by a small gutter to mark differences; +the right half is aligned to a tab stop so that tabs line up. Input +lines that are too long to fit in half of an output line are truncated +for output. + + The `--left-column' option prints only the left column of two common +lines. The `--suppress-common-lines' option suppresses common lines +entirely. + + +File: diff.info, Node: Example Side by Side, Prev: Side by Side Format, Up: Side by Side + +2.3.2 An Example of Side by Side Format +--------------------------------------- + +Here is the output of the command `diff -y -W 72 lao tzu' (*note Sample +diff Input::, for the complete contents of the two files). + + The Way that can be told of is n < + The name that can be named is no < + The Nameless is the origin of He The Nameless is the origin of He + The Named is the mother of all t | The named is the mother of all t + > + Therefore let there always be no Therefore let there always be no + so we may see their subtlety, so we may see their subtlety, + And let there always be being, And let there always be being, + so we may see their outcome. so we may see their outcome. + The two are the same, The two are the same, + But after they are produced, But after they are produced, + they have different names. they have different names. + > They both may be called deep and + > Deeper and more profound, + > The door of all subtleties! + + +File: diff.info, Node: Normal, Next: Scripts, Prev: Side by Side, Up: Output Formats + +2.4 Showing Differences Without Context +======================================= + +The "normal" `diff' output format shows each hunk of differences +without any surrounding context. Sometimes such output is the clearest +way to see how lines have changed, without the clutter of nearby +unchanged lines (although you can get similar results with the context +or unified formats by using 0 lines of context). However, this format +is no longer widely used for sending out patches; for that purpose, the +context format (*note Context Format::) and the unified format (*note +Unified Format::) are superior. Normal format is the default for +compatibility with older versions of `diff' and the POSIX standard. +Use the `--normal' option to select this output format explicitly. + +* Menu: + +* Example Normal:: Sample output in the normal format. +* Detailed Normal:: A detailed description of normal output format. + + +File: diff.info, Node: Example Normal, Next: Detailed Normal, Up: Normal + +2.4.1 An Example of Normal Format +--------------------------------- + +Here is the output of the command `diff lao tzu' (*note Sample diff +Input::, for the complete contents of the two files). Notice that it +shows only the lines that are different between the two files. + + 1,2d0 + < The Way that can be told of is not the eternal Way; + < The name that can be named is not the eternal name. + 4c2,3 + < The Named is the mother of all things. + --- + > The named is the mother of all things. + > + 11a11,13 + > They both may be called deep and profound. + > Deeper and more profound, + > The door of all subtleties! + + +File: diff.info, Node: Detailed Normal, Prev: Example Normal, Up: Normal + +2.4.2 Detailed Description of Normal Format +------------------------------------------- + +The normal output format consists of one or more hunks of differences; +each hunk shows one area where the files differ. Normal format hunks +look like this: + + CHANGE-COMMAND + < FROM-FILE-LINE + < FROM-FILE-LINE... + --- + > TO-FILE-LINE + > TO-FILE-LINE... + + There are three types of change commands. Each consists of a line +number or comma-separated range of lines in the first file, a single +character indicating the kind of change to make, and a line number or +comma-separated range of lines in the second file. All line numbers are +the original line numbers in each file. The types of change commands +are: + +`LaR' + Add the lines in range R of the second file after line L of the + first file. For example, `8a12,15' means append lines 12-15 of + file 2 after line 8 of file 1; or, if changing file 2 into file 1, + delete lines 12-15 of file 2. + +`FcT' + Replace the lines in range F of the first file with lines in range + T of the second file. This is like a combined add and delete, but + more compact. For example, `5,7c8,10' means change lines 5-7 of + file 1 to read as lines 8-10 of file 2; or, if changing file 2 into + file 1, change lines 8-10 of file 2 to read as lines 5-7 of file 1. + +`RdL' + Delete the lines in range R from the first file; line L is where + they would have appeared in the second file had they not been + deleted. For example, `5,7d3' means delete lines 5-7 of file 1; + or, if changing file 2 into file 1, append lines 5-7 of file 1 + after line 3 of file 2. + + +File: diff.info, Node: Scripts, Next: If-then-else, Prev: Normal, Up: Output Formats + +2.5 Making Edit Scripts +======================= + +Several output modes produce command scripts for editing FROM-FILE to +produce TO-FILE. + +* Menu: + +* ed Scripts:: Using `diff' to produce commands for `ed'. +* Forward ed:: Making forward `ed' scripts. +* RCS:: A special `diff' output format used by RCS. + + +File: diff.info, Node: ed Scripts, Next: Forward ed, Up: Scripts + +2.5.1 `ed' Scripts +------------------ + +`diff' can produce commands that direct the `ed' text editor to change +the first file into the second file. Long ago, this was the only +output mode that was suitable for editing one file into another +automatically; today, with `patch', it is almost obsolete. Use the +`-e' or `--ed' option to select this output format. + + Like the normal format (*note Normal::), this output format does not +show any context; unlike the normal format, it does not include the +information necessary to apply the diff in reverse (to produce the first +file if all you have is the second file and the diff). + + If the file `d' contains the output of `diff -e old new', then the +command `(cat d && echo w) | ed - old' edits `old' to make it a copy of +`new'. More generally, if `d1', `d2', ..., `dN' contain the outputs of +`diff -e old new1', `diff -e new1 new2', ..., `diff -e newN-1 newN', +respectively, then the command `(cat d1 d2 ... dN && echo w) | ed - +old' edits `old' to make it a copy of `newN'. + +* Menu: + +* Example ed:: A sample `ed' script. +* Detailed ed:: A detailed description of `ed' format. + + +File: diff.info, Node: Example ed, Next: Detailed ed, Up: ed Scripts + +2.5.1.1 Example `ed' Script +........................... + +Here is the output of `diff -e lao tzu' (*note Sample diff Input::, for +the complete contents of the two files): + + 11a + They both may be called deep and profound. + Deeper and more profound, + The door of all subtleties! + . + 4c + The named is the mother of all things. + + . + 1,2d + + +File: diff.info, Node: Detailed ed, Prev: Example ed, Up: ed Scripts + +2.5.1.2 Detailed Description of `ed' Format +........................................... + +The `ed' output format consists of one or more hunks of differences. +The changes closest to the ends of the files come first so that +commands that change the number of lines do not affect how `ed' +interprets line numbers in succeeding commands. `ed' format hunks look +like this: + + CHANGE-COMMAND + TO-FILE-LINE + TO-FILE-LINE... + . + + Because `ed' uses a single period on a line to indicate the end of +input, GNU `diff' protects lines of changes that contain a single +period on a line by writing two periods instead, then writing a +subsequent `ed' command to change the two periods into one. The `ed' +format cannot represent an incomplete line, so if the second file ends +in a changed incomplete line, `diff' reports an error and then pretends +that a newline was appended. + + There are three types of change commands. Each consists of a line +number or comma-separated range of lines in the first file and a single +character indicating the kind of change to make. All line numbers are +the original line numbers in the file. The types of change commands +are: + +`La' + Add text from the second file after line L in the first file. For + example, `8a' means to add the following lines after line 8 of file + 1. + +`Rc' + Replace the lines in range R in the first file with the following + lines. Like a combined add and delete, but more compact. For + example, `5,7c' means change lines 5-7 of file 1 to read as the + text file 2. + +`Rd' + Delete the lines in range R from the first file. For example, + `5,7d' means delete lines 5-7 of file 1. + + +File: diff.info, Node: Forward ed, Next: RCS, Prev: ed Scripts, Up: Scripts + +2.5.2 Forward `ed' Scripts +-------------------------- + +`diff' can produce output that is like an `ed' script, but with hunks +in forward (front to back) order. The format of the commands is also +changed slightly: command characters precede the lines they modify, +spaces separate line numbers in ranges, and no attempt is made to +disambiguate hunk lines consisting of a single period. Like `ed' +format, forward `ed' format cannot represent incomplete lines. + + Forward `ed' format is not very useful, because neither `ed' nor +`patch' can apply diffs in this format. It exists mainly for +compatibility with older versions of `diff'. Use the `-f' or +`--forward-ed' option to select it. + + +File: diff.info, Node: RCS, Prev: Forward ed, Up: Scripts + +2.5.3 RCS Scripts +----------------- + +The RCS output format is designed specifically for use by the Revision +Control System, which is a set of free programs used for organizing +different versions and systems of files. Use the `-n' or `--rcs' +option to select this output format. It is like the forward `ed' +format (*note Forward ed::), but it can represent arbitrary changes to +the contents of a file because it avoids the forward `ed' format's +problems with lines consisting of a single period and with incomplete +lines. Instead of ending text sections with a line consisting of a +single period, each command specifies the number of lines it affects; a +combination of the `a' and `d' commands are used instead of `c'. Also, +if the second file ends in a changed incomplete line, then the output +also ends in an incomplete line. + + Here is the output of `diff -n lao tzu' (*note Sample diff Input::, +for the complete contents of the two files): + + d1 2 + d4 1 + a4 2 + The named is the mother of all things. + + a11 3 + They both may be called deep and profound. + Deeper and more profound, + The door of all subtleties! + + +File: diff.info, Node: If-then-else, Prev: Scripts, Up: Output Formats + +2.6 Merging Files with If-then-else +=================================== + +You can use `diff' to merge two files of C source code. The output of +`diff' in this format contains all the lines of both files. Lines +common to both files are output just once; the differing parts are +separated by the C preprocessor directives `#ifdef NAME' or `#ifndef +NAME', `#else', and `#endif'. When compiling the output, you select +which version to use by either defining or leaving undefined the macro +NAME. + + To merge two files, use `diff' with the `-D NAME' or `--ifdef=NAME' +option. The argument NAME is the C preprocessor identifier to use in +the `#ifdef' and `#ifndef' directives. + + For example, if you change an instance of `wait (&s)' to `waitpid +(-1, &s, 0)' and then merge the old and new files with the +`--ifdef=HAVE_WAITPID' option, then the affected part of your code +might look like this: + + do { + #ifndef HAVE_WAITPID + if ((w = wait (&s)) < 0 && errno != EINTR) + #else /* HAVE_WAITPID */ + if ((w = waitpid (-1, &s, 0)) < 0 && errno != EINTR) + #endif /* HAVE_WAITPID */ + return w; + } while (w != child); + + You can specify formats for languages other than C by using line +group formats and line formats, as described in the next sections. + +* Menu: + +* Line Group Formats:: Formats for general if-then-else line groups. +* Line Formats:: Formats for each line in a line group. +* Example If-then-else:: Sample if-then-else format output. +* Detailed If-then-else:: A detailed description of if-then-else format. + + +File: diff.info, Node: Line Group Formats, Next: Line Formats, Up: If-then-else + +2.6.1 Line Group Formats +------------------------ + +Line group formats let you specify formats suitable for many +applications that allow if-then-else input, including programming +languages and text formatting languages. A line group format specifies +the output format for a contiguous group of similar lines. + + For example, the following command compares the TeX files `old' and +`new', and outputs a merged file in which old regions are surrounded by +`\begin{em}'-`\end{em}' lines, and new regions are surrounded by +`\begin{bf}'-`\end{bf}' lines. + + diff \ + --old-group-format='\begin{em} + %<\end{em} + ' \ + --new-group-format='\begin{bf} + %>\end{bf} + ' \ + old new + + The following command is equivalent to the above example, but it is a +little more verbose, because it spells out the default line group +formats. + + diff \ + --old-group-format='\begin{em} + %<\end{em} + ' \ + --new-group-format='\begin{bf} + %>\end{bf} + ' \ + --unchanged-group-format='%=' \ + --changed-group-format='\begin{em} + %<\end{em} + \begin{bf} + %>\end{bf} + ' \ + old new + + Here is a more advanced example, which outputs a diff listing with +headers containing line numbers in a "plain English" style. + + diff \ + --unchanged-group-format='' \ + --old-group-format='-------- %dn line%(n=1?:s) deleted at %df: + %<' \ + --new-group-format='-------- %dN line%(N=1?:s) added after %de: + %>' \ + --changed-group-format='-------- %dn line%(n=1?:s) changed at %df: + %<-------- to: + %>' \ + old new + + To specify a line group format, use `diff' with one of the options +listed below. You can specify up to four line group formats, one for +each kind of line group. You should quote FORMAT, because it typically +contains shell metacharacters. + +`--old-group-format=FORMAT' + These line groups are hunks containing only lines from the first + file. The default old group format is the same as the changed + group format if it is specified; otherwise it is a format that + outputs the line group as-is. + +`--new-group-format=FORMAT' + These line groups are hunks containing only lines from the second + file. The default new group format is same as the changed group + format if it is specified; otherwise it is a format that outputs + the line group as-is. + +`--changed-group-format=FORMAT' + These line groups are hunks containing lines from both files. The + default changed group format is the concatenation of the old and + new group formats. + +`--unchanged-group-format=FORMAT' + These line groups contain lines common to both files. The default + unchanged group format is a format that outputs the line group + as-is. + + In a line group format, ordinary characters represent themselves; +conversion specifications start with `%' and have one of the following +forms. + +`%<' + stands for the lines from the first file, including the trailing + newline. Each line is formatted according to the old line format + (*note Line Formats::). + +`%>' + stands for the lines from the second file, including the trailing + newline. Each line is formatted according to the new line format. + +`%=' + stands for the lines common to both files, including the trailing + newline. Each line is formatted according to the unchanged line + format. + +`%%' + stands for `%'. + +`%c'C'' + where C is a single character, stands for C. C may not be a + backslash or an apostrophe. For example, `%c':'' stands for a + colon, even inside the then-part of an if-then-else format, which + a colon would normally terminate. + +`%c'\O'' + where O is a string of 1, 2, or 3 octal digits, stands for the + character with octal code O. For example, `%c'\0'' stands for a + null character. + +`FN' + where F is a `printf' conversion specification and N is one of the + following letters, stands for N's value formatted with F. + + `e' + The line number of the line just before the group in the old + file. + + `f' + The line number of the first line in the group in the old + file; equals E + 1. + + `l' + The line number of the last line in the group in the old file. + + `m' + The line number of the line just after the group in the old + file; equals L + 1. + + `n' + The number of lines in the group in the old file; equals L - + F + 1. + + `E, F, L, M, N' + Likewise, for lines in the new file. + + + The `printf' conversion specification can be `%d', `%o', `%x', or + `%X', specifying decimal, octal, lower case hexadecimal, or upper + case hexadecimal output respectively. After the `%' the following + options can appear in sequence: a series of zero or more flags; an + integer specifying the minimum field width; and a period followed + by an optional integer specifying the minimum number of digits. + The flags are `-' for left-justification, `'' for separating the + digit into groups as specified by the `LC_NUMERIC' locale category, + and `0' for padding with zeros instead of spaces. For example, + `%5dN' prints the number of new lines in the group in a field of + width 5 characters, using the `printf' format `"%5d"'. + +`(A=B?T:E)' + If A equals B then T else E. A and B are each either a decimal + constant or a single letter interpreted as above. This format + spec is equivalent to T if A's value equals B's; otherwise it is + equivalent to E. + + For example, `%(N=0?no:%dN) line%(N=1?:s)' is equivalent to `no + lines' if N (the number of lines in the group in the new file) is + 0, to `1 line' if N is 1, and to `%dN lines' otherwise. + + +File: diff.info, Node: Line Formats, Next: Example If-then-else, Prev: Line Group Formats, Up: If-then-else + +2.6.2 Line Formats +------------------ + +Line formats control how each line taken from an input file is output +as part of a line group in if-then-else format. + + For example, the following command outputs text with a one-character +change indicator to the left of the text. The first character of output +is `-' for deleted lines, `|' for added lines, and a space for +unchanged lines. The formats contain newline characters where newlines +are desired on output. + + diff \ + --old-line-format='-%l + ' \ + --new-line-format='|%l + ' \ + --unchanged-line-format=' %l + ' \ + old new + + To specify a line format, use one of the following options. You +should quote FORMAT, since it often contains shell metacharacters. + +`--old-line-format=FORMAT' + formats lines just from the first file. + +`--new-line-format=FORMAT' + formats lines just from the second file. + +`--unchanged-line-format=FORMAT' + formats lines common to both files. + +`--line-format=FORMAT' + formats all lines; in effect, it sets all three above options + simultaneously. + + In a line format, ordinary characters represent themselves; +conversion specifications start with `%' and have one of the following +forms. + +`%l' + stands for the contents of the line, not counting its trailing + newline (if any). This format ignores whether the line is + incomplete; *Note Incomplete Lines::. + +`%L' + stands for the contents of the line, including its trailing newline + (if any). If a line is incomplete, this format preserves its + incompleteness. + +`%%' + stands for `%'. + +`%c'C'' + where C is a single character, stands for C. C may not be a + backslash or an apostrophe. For example, `%c':'' stands for a + colon. + +`%c'\O'' + where O is a string of 1, 2, or 3 octal digits, stands for the + character with octal code O. For example, `%c'\0'' stands for a + null character. + +`Fn' + where F is a `printf' conversion specification, stands for the + line number formatted with F. For example, `%.5dn' prints the + line number using the `printf' format `"%.5d"'. *Note Line Group + Formats::, for more about printf conversion specifications. + + + The default line format is `%l' followed by a newline character. + + If the input contains tab characters and it is important that they +line up on output, you should ensure that `%l' or `%L' in a line format +is just after a tab stop (e.g. by preceding `%l' or `%L' with a tab +character), or you should use the `-t' or `--expand-tabs' option. + + Taken together, the line and line group formats let you specify many +different formats. For example, the following command uses a format +similar to normal `diff' format. You can tailor this command to get +fine control over `diff' output. + + diff \ + --old-line-format='< %l + ' \ + --new-line-format='> %l + ' \ + --old-group-format='%df%(f=l?:,%dl)d%dE + %<' \ + --new-group-format='%dea%dF%(F=L?:,%dL) + %>' \ + --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL) + %<--- + %>' \ + --unchanged-group-format='' \ + old new + + +File: diff.info, Node: Example If-then-else, Next: Detailed If-then-else, Prev: Line Formats, Up: If-then-else + +2.6.3 An Example of If-then-else Format +--------------------------------------- + +Here is the output of `diff -DTWO lao tzu' (*note Sample diff Input::, +for the complete contents of the two files): + + #ifndef TWO + The Way that can be told of is not the eternal Way; + The name that can be named is not the eternal name. + #endif /* ! TWO */ + The Nameless is the origin of Heaven and Earth; + #ifndef TWO + The Named is the mother of all things. + #else /* TWO */ + The named is the mother of all things. + + #endif /* TWO */ + Therefore let there always be non-being, + so we may see their subtlety, + And let there always be being, + so we may see their outcome. + The two are the same, + But after they are produced, + they have different names. + #ifdef TWO + They both may be called deep and profound. + Deeper and more profound, + The door of all subtleties! + #endif /* TWO */ + + +File: diff.info, Node: Detailed If-then-else, Prev: Example If-then-else, Up: If-then-else + +2.6.4 Detailed Description of If-then-else Format +------------------------------------------------- + +For lines common to both files, `diff' uses the unchanged line group +format. For each hunk of differences in the merged output format, if +the hunk contains only lines from the first file, `diff' uses the old +line group format; if the hunk contains only lines from the second +file, `diff' uses the new group format; otherwise, `diff' uses the +changed group format. + + The old, new, and unchanged line formats specify the output format of +lines from the first file, lines from the second file, and lines common +to both files, respectively. + + The option `--ifdef=NAME' is equivalent to the following sequence of +options using shell syntax: + + --old-group-format='#ifndef NAME + %<#endif /* ! NAME */ + ' \ + --new-group-format='#ifdef NAME + %>#endif /* NAME */ + ' \ + --unchanged-group-format='%=' \ + --changed-group-format='#ifndef NAME + %<#else /* NAME */ + %>#endif /* NAME */ + ' + + You should carefully check the `diff' output for proper nesting. +For example, when using the `-D NAME' or `--ifdef=NAME' option, you +should check that if the differing lines contain any of the C +preprocessor directives `#ifdef', `#ifndef', `#else', `#elif', or +`#endif', they are nested properly and match. If they don't, you must +make corrections manually. It is a good idea to carefully check the +resulting code anyway to make sure that it really does what you want it +to; depending on how the input files were produced, the output might +contain duplicate or otherwise incorrect code. + + The `patch' `-D NAME' option behaves like the `diff' `-D NAME' +option, except it operates on a file and a diff to produce a merged +file; *Note patch Options::. + + +File: diff.info, Node: Incomplete Lines, Next: Comparing Directories, Prev: Output Formats, Up: Top + +3 Incomplete Lines +****************** + +When an input file ends in a non-newline character, its last line is +called an "incomplete line" because its last character is not a +newline. All other lines are called "full lines" and end in a newline +character. Incomplete lines do not match full lines unless differences +in white space are ignored (*note White Space::). + + An incomplete line is normally distinguished on output from a full +line by a following line that starts with `\'. However, the RCS format +(*note RCS::) outputs the incomplete line as-is, without any trailing +newline or following line. The side by side format normally represents +incomplete lines as-is, but in some cases uses a `\' or `/' gutter +marker; *Note Side by Side::. The if-then-else line format preserves a +line's incompleteness with `%L', and discards the newline with `%l'; +*Note Line Formats::. Finally, with the `ed' and forward `ed' output +formats (*note Output Formats::) `diff' cannot represent an incomplete +line, so it pretends there was a newline and reports an error. + + For example, suppose `F' and `G' are one-byte files that contain +just `f' and `g', respectively. Then `diff F G' outputs + + 1c1 + < f + \ No newline at end of file + --- + > g + \ No newline at end of file + +(The exact message may differ in non-English locales.) `diff -n F G' +outputs the following without a trailing newline: + + d1 1 + a1 1 + g + +`diff -e F G' reports two errors and outputs the following: + + 1c + g + . + + +File: diff.info, Node: Comparing Directories, Next: Adjusting Output, Prev: Incomplete Lines, Up: Top + +4 Comparing Directories +*********************** + +You can use `diff' to compare some or all of the files in two directory +trees. When both file name arguments to `diff' are directories, it +compares each file that is contained in both directories, examining +file names in alphabetical order as specified by the `LC_COLLATE' +locale category. Normally `diff' is silent about pairs of files that +contain no differences, but if you use the `-s' or +`--report-identical-files' option, it reports pairs of identical files. +Normally `diff' reports subdirectories common to both directories +without comparing subdirectories' files, but if you use the `-r' or +`--recursive' option, it compares every corresponding pair of files in +the directory trees, as many levels deep as they go. + + For file names that are in only one of the directories, `diff' +normally does not show the contents of the file that exists; it reports +only that the file exists in that directory and not in the other. You +can make `diff' act as though the file existed but was empty in the +other directory, so that it outputs the entire contents of the file that +actually exists. (It is output as either an insertion or a deletion, +depending on whether it is in the first or the second directory given.) +To do this, use the `-N' or `--new-file' option. + + If the older directory contains one or more large files that are not +in the newer directory, you can make the patch smaller by using the +`--unidirectional-new-file' option instead of `-N'. This option is +like `-N' except that it only inserts the contents of files that appear +in the second directory but not the first (that is, files that were +added). At the top of the patch, write instructions for the user +applying the patch to remove the files that were deleted before +applying the patch. *Note Making Patches::, for more discussion of +making patches for distribution. + + To ignore some files while comparing directories, use the `-x +PATTERN' or `--exclude=PATTERN' option. This option ignores any files +or subdirectories whose base names match the shell pattern PATTERN. +Unlike in the shell, a period at the start of the base of a file name +matches a wildcard at the start of a pattern. You should enclose +PATTERN in quotes so that the shell does not expand it. For example, +the option `-x '*.[ao]'' ignores any file whose name ends with `.a' or +`.o'. + + This option accumulates if you specify it more than once. For +example, using the options `-x 'RCS' -x '*,v'' ignores any file or +subdirectory whose base name is `RCS' or ends with `,v'. + + If you need to give this option many times, you can instead put the +patterns in a file, one pattern per line, and use the `-X FILE' or +`--exclude-from=FILE' option. Trailing white space and empty lines are +ignored in the pattern file. + + If you have been comparing two directories and stopped partway +through, later you might want to continue where you left off. You can +do this by using the `-S FILE' or `--starting-file=FILE' option. This +compares only the file FILE and all alphabetically later files in the +topmost directory level. + + If two directories differ only in that file names are lower case in +one directory and upper case in the upper, `diff' normally reports many +differences because it compares file names in a case sensitive way. +With the `--ignore-file-name-case' option, `diff' ignores case +differences in file names, so that for example the contents of the file +`Tao' in one directory are compared to the contents of the file `TAO' +in the other. The `--no-ignore-file-name-case' option cancels the +effect of the `--ignore-file-name-case' option, reverting to the default +behavior. + + If an `-x PATTERN' or `--exclude=PATTERN' option, or an `-X FILE' or +`--exclude-from=FILE' option, is specified while the +`--ignore-file-name-case' option is in effect, case is ignored when +excluding file names matching the specified patterns. + + +File: diff.info, Node: Adjusting Output, Next: diff Performance, Prev: Comparing Directories, Up: Top + +5 Making `diff' Output Prettier +******************************* + +`diff' provides several ways to adjust the appearance of its output. +These adjustments can be applied to any output format. + +* Menu: + +* Tabs:: Preserving the alignment of tab stops. +* Trailing Blanks:: Suppressing blanks before empty output lines. +* Pagination:: Page numbering and time-stamping `diff' output. + + +File: diff.info, Node: Tabs, Next: Trailing Blanks, Up: Adjusting Output + +5.1 Preserving Tab Stop Alignment +================================= + +The lines of text in some of the `diff' output formats are preceded by +one or two characters that indicate whether the text is inserted, +deleted, or changed. The addition of those characters can cause tabs +to move to the next tab stop, throwing off the alignment of columns in +the line. GNU `diff' provides two ways to make tab-aligned columns +line up correctly. + + The first way is to have `diff' convert all tabs into the correct +number of spaces before outputting them; select this method with the +`-t' or `--expand-tabs' option. To use this form of output with +`patch', you must give `patch' the `-l' or `--ignore-white-space' +option (*note Changed White Space::, for more information). `diff' +normally assumes that tab stops are set every 8 print columns, but this +can be altered by the `--tabsize=COLUMNS' option. + + The other method for making tabs line up correctly is to add a tab +character instead of a space after the indicator character at the +beginning of the line. This ensures that all following tab characters +are in the same position relative to tab stops that they were in the +original files, so that the output is aligned correctly. Its +disadvantage is that it can make long lines too long to fit on one line +of the screen or the paper. It also does not work with the unified +output format, which does not have a space character after the change +type indicator character. Select this method with the `-T' or +`--initial-tab' option. + + +File: diff.info, Node: Trailing Blanks, Next: Pagination, Prev: Tabs, Up: Adjusting Output + +5.2 Omitting trailing blanks +============================ + +When outputting lines in normal or context format, or outputting an +unchanged line in unified format, `diff' normally outputs a blank just +before each line. If the line is empty, the output of `diff' therefore +contains trailing blanks even though the input does not contain them. +For example, when outputting an unchanged empty line in context format, +`diff' normally outputs a line with two leading spaces. + + Some text editors and email agents routinely delete trailing blanks, +so it can be a problem to deal with diff output files that contain +them. You can avoid this problem with the `--suppress-blank-empty' +option. It causes `diff' to omit trailing blanks at the end of output +lines in normal, context, and unified format, unless the trailing +blanks were already present in the input. This changes the output +format slightly, so that output lines are guaranteed to never end in a +blank unless an input line ends in a blank. This format is less likely +to be munged by text editors or by transmission via email. It is +accepted by GNU `patch' as well. + + +File: diff.info, Node: Pagination, Prev: Trailing Blanks, Up: Adjusting Output + +5.3 Paginating `diff' Output +============================ + +It can be convenient to have long output page-numbered and time-stamped. +The `-l' or `--paginate' option does this by sending the `diff' output +through the `pr' program. Here is what the page header might look like +for `diff -lc lao tzu': + + 2002-02-22 14:20 diff -lc lao tzu Page 1 + + +File: diff.info, Node: diff Performance, Next: Comparing Three Files, Prev: Adjusting Output, Up: Top + +6 `diff' Performance Tradeoffs +****************************** + +GNU `diff' runs quite efficiently; however, in some circumstances you +can cause it to run faster or produce a more compact set of changes. + + One way to improve `diff' performance is to use hard or symbolic +links to files instead of copies. This improves performance because +`diff' normally does not need to read two hard or symbolic links to the +same file, since their contents must be identical. For example, +suppose you copy a large directory hierarchy, make a few changes to the +copy, and then often use `diff -r' to compare the original to the copy. +If the original files are read-only, you can greatly improve +performance by creating the copy using hard or symbolic links (e.g., +with GNU `cp -lR' or `cp -sR'). Before editing a file in the copy for +the first time, you should break the link and replace it with a regular +copy. + + You can also affect the performance of GNU `diff' by giving it +options that change the way it compares files. Performance has more +than one dimension. These options improve one aspect of performance at +the cost of another, or they improve performance in some cases while +hurting it in others. + + The way that GNU `diff' determines which lines have changed always +comes up with a near-minimal set of differences. Usually it is good +enough for practical purposes. If the `diff' output is large, you +might want `diff' to use a modified algorithm that sometimes produces a +smaller set of differences. The `-d' or `--minimal' option does this; +however, it can also cause `diff' to run more slowly than usual, so it +is not the default behavior. + + When the files you are comparing are large and have small groups of +changes scattered throughout them, you can use the +`--speed-large-files' option to make a different modification to the +algorithm that `diff' uses. If the input files have a constant small +density of changes, this option speeds up the comparisons without +changing the output. If not, `diff' might produce a larger set of +differences; however, the output will still be correct. + + Normally `diff' discards the prefix and suffix that is common to +both files before it attempts to find a minimal set of differences. +This makes `diff' run faster, but occasionally it may produce +non-minimal output. The `--horizon-lines=LINES' option prevents `diff' +from discarding the last LINES lines of the prefix and the first LINES +lines of the suffix. This gives `diff' further opportunities to find a +minimal output. + + Suppose a run of changed lines includes a sequence of lines at one +end and there is an identical sequence of lines just outside the other +end. The `diff' command is free to choose which identical sequence is +included in the hunk. In this case, `diff' normally shifts the hunk's +boundaries when this merges adjacent hunks, or shifts a hunk's lines +towards the end of the file. Merging hunks can make the output look +nicer in some cases. + + +File: diff.info, Node: Comparing Three Files, Next: diff3 Merging, Prev: diff Performance, Up: Top + +7 Comparing Three Files +*********************** + +Use the program `diff3' to compare three files and show any differences +among them. (`diff3' can also merge files; see *note diff3 Merging::). + + The "normal" `diff3' output format shows each hunk of differences +without surrounding context. Hunks are labeled depending on whether +they are two-way or three-way, and lines are annotated by their +location in the input files. + + *Note Invoking diff3::, for more information on how to run `diff3'. + +* Menu: + +* Sample diff3 Input:: Sample `diff3' input for examples. +* Example diff3 Normal:: Sample output in the normal format. +* diff3 Hunks:: The format of normal output format. +* Detailed diff3 Normal:: A detailed description of normal output format. + + +File: diff.info, Node: Sample diff3 Input, Next: Example diff3 Normal, Up: Comparing Three Files + +7.1 A Third Sample Input File +============================= + +Here is a third sample file that will be used in examples to illustrate +the output of `diff3' and how various options can change it. The first +two files are the same that we used for `diff' (*note Sample diff +Input::). This is the third sample file, called `tao': + + The Way that can be told of is not the eternal Way; + The name that can be named is not the eternal name. + The Nameless is the origin of Heaven and Earth; + The named is the mother of all things. + + Therefore let there always be non-being, + so we may see their subtlety, + And let there always be being, + so we may see their result. + The two are the same, + But after they are produced, + they have different names. + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan + + +File: diff.info, Node: Example diff3 Normal, Next: diff3 Hunks, Prev: Sample diff3 Input, Up: Comparing Three Files + +7.2 An Example of `diff3' Normal Format +======================================= + +Here is the output of the command `diff3 lao tzu tao' (*note Sample +diff3 Input::, for the complete contents of the files). Notice that it +shows only the lines that are different among the three files. + + ====2 + 1:1,2c + 3:1,2c + The Way that can be told of is not the eternal Way; + The name that can be named is not the eternal name. + 2:0a + ====1 + 1:4c + The Named is the mother of all things. + 2:2,3c + 3:4,5c + The named is the mother of all things. + + ====3 + 1:8c + 2:7c + so we may see their outcome. + 3:9c + so we may see their result. + ==== + 1:11a + 2:11,13c + They both may be called deep and profound. + Deeper and more profound, + The door of all subtleties! + 3:13,14c + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan + + +File: diff.info, Node: Detailed diff3 Normal, Prev: diff3 Hunks, Up: Comparing Three Files + +7.3 Detailed Description of `diff3' Normal Format +================================================= + +Each hunk begins with a line marked `===='. Three-way hunks have plain +`====' lines, and two-way hunks have `1', `2', or `3' appended to +specify which of the three input files differ in that hunk. The hunks +contain copies of two or three sets of input lines each preceded by one +or two commands identifying where the lines came from. + + Normally, two spaces precede each copy of an input line to +distinguish it from the commands. But with the `-T' or `--initial-tab' +option, `diff3' uses a tab instead of two spaces; this lines up tabs +correctly. *Note Tabs::, for more information. + + Commands take the following forms: + +`FILE:La' + This hunk appears after line L of file FILE, and contains no lines + in that file. To edit this file to yield the other files, one + must append hunk lines taken from the other files. For example, + `1:11a' means that the hunk follows line 11 in the first file and + contains no lines from that file. + +`FILE:Rc' + This hunk contains the lines in the range R of file FILE. The + range R is a comma-separated pair of line numbers, or just one + number if there is only one line. To edit this file to yield the + other files, one must change the specified lines to be the lines + taken from the other files. For example, `2:11,13c' means that + the hunk contains lines 11 through 13 from the second file. + + If the last line in a set of input lines is incomplete (*note +Incomplete Lines::), it is distinguished on output from a full line by +a following line that starts with `\'. + + +File: diff.info, Node: diff3 Hunks, Next: Detailed diff3 Normal, Prev: Example diff3 Normal, Up: Comparing Three Files + +7.4 `diff3' Hunks +================= + +Groups of lines that differ in two or three of the input files are +called "diff3 hunks", by analogy with `diff' hunks (*note Hunks::). If +all three input files differ in a `diff3' hunk, the hunk is called a +"three-way hunk"; if just two input files differ, it is a "two-way +hunk". + + As with `diff', several solutions are possible. When comparing the +files `A', `B', and `C', `diff3' normally finds `diff3' hunks by +merging the two-way hunks output by the two commands `diff A B' and +`diff A C'. This does not necessarily minimize the size of the output, +but exceptions should be rare. + + For example, suppose `F' contains the three lines `a', `b', `f', `G' +contains the lines `g', `b', `g', and `H' contains the lines `a', `b', +`h'. `diff3 F G H' might output the following: + + ====2 + 1:1c + 3:1c + a + 2:1c + g + ==== + 1:3c + f + 2:3c + g + 3:3c + h + +because it found a two-way hunk containing `a' in the first and third +files and `g' in the second file, then the single line `b' common to +all three files, then a three-way hunk containing the last line of each +file. + + +File: diff.info, Node: diff3 Merging, Next: Interactive Merging, Prev: Comparing Three Files, Up: Top + +8 Merging From a Common Ancestor +******************************** + +When two people have made changes to copies of the same file, `diff3' +can produce a merged output that contains both sets of changes together +with warnings about conflicts. + + One might imagine programs with names like `diff4' and `diff5' to +compare more than three files simultaneously, but in practice the need +rarely arises. You can use `diff3' to merge three or more sets of +changes to a file by merging two change sets at a time. + + `diff3' can incorporate changes from two modified versions into a +common preceding version. This lets you merge the sets of changes +represented by the two newer files. Specify the common ancestor version +as the second argument and the two newer versions as the first and third +arguments, like this: + + diff3 MINE OLDER YOURS + +You can remember the order of the arguments by noting that they are in +alphabetical order. + + You can think of this as subtracting OLDER from YOURS and adding the +result to MINE, or as merging into MINE the changes that would turn +OLDER into YOURS. This merging is well-defined as long as MINE and +OLDER match in the neighborhood of each such change. This fails to be +true when all three input files differ or when only OLDER differs; we +call this a "conflict". When all three input files differ, we call the +conflict an "overlap". + + `diff3' gives you several ways to handle overlaps and conflicts. +You can omit overlaps or conflicts, or select only overlaps, or mark +conflicts with special `<<<<<<<' and `>>>>>>>' lines. + + `diff3' can output the merge results as an `ed' script that that can +be applied to the first file to yield the merged output. However, it +is usually better to have `diff3' generate the merged output directly; +this bypasses some problems with `ed'. + +* Menu: + +* Which Changes:: Selecting changes to incorporate. +* Marking Conflicts:: Marking conflicts. +* Bypassing ed:: Generating merged output directly. +* Merging Incomplete Lines:: How `diff3' merges incomplete lines. +* Saving the Changed File:: Emulating System V behavior. + + +File: diff.info, Node: Which Changes, Next: Marking Conflicts, Up: diff3 Merging + +8.1 Selecting Which Changes to Incorporate +========================================== + +You can select all unmerged changes from OLDER to YOURS for merging +into MINE with the `-e' or `--ed' option. You can select only the +nonoverlapping unmerged changes with `-3' or `--easy-only', and you can +select only the overlapping changes with `-x' or `--overlap-only'. + + The `-e', `-3' and `-x' options select only "unmerged changes", i.e. +changes where MINE and YOURS differ; they ignore changes from OLDER to +YOURS where MINE and YOURS are identical, because they assume that such +changes have already been merged. If this assumption is not a safe +one, you can use the `-A' or `--show-all' option (*note Marking +Conflicts::). + + Here is the output of the command `diff3' with each of these three +options (*note Sample diff3 Input::, for the complete contents of the +files). Notice that `-e' outputs the union of the disjoint sets of +changes output by `-3' and `-x'. + + Output of `diff3 -e lao tzu tao': + 11a + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan + . + 8c + so we may see their result. + . + + Output of `diff3 -3 lao tzu tao': + 8c + so we may see their result. + . + + Output of `diff3 -x lao tzu tao': + 11a + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan + . + + +File: diff.info, Node: Marking Conflicts, Next: Bypassing ed, Prev: Which Changes, Up: diff3 Merging + +8.2 Marking Conflicts +===================== + +`diff3' can mark conflicts in the merged output by bracketing them with +special marker lines. A conflict that comes from two files A and B is +marked as follows: + + <<<<<<< A + lines from A + ======= + lines from B + >>>>>>> B + + A conflict that comes from three files A, B and C is marked as +follows: + + <<<<<<< A + lines from A + ||||||| B + lines from B + ======= + lines from C + >>>>>>> C + + The `-A' or `--show-all' option acts like the `-e' option, except +that it brackets conflicts, and it outputs all changes from OLDER to +YOURS, not just the unmerged changes. Thus, given the sample input +files (*note Sample diff3 Input::), `diff3 -A lao tzu tao' puts +brackets around the conflict where only `tzu' differs: + + <<<<<<< tzu + ======= + The Way that can be told of is not the eternal Way; + The name that can be named is not the eternal name. + >>>>>>> tao + + And it outputs the three-way conflict as follows: + + <<<<<<< lao + ||||||| tzu + They both may be called deep and profound. + Deeper and more profound, + The door of all subtleties! + ======= + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan + >>>>>>> tao + + The `-E' or `--show-overlap' option outputs less information than +the `-A' or `--show-all' option, because it outputs only unmerged +changes, and it never outputs the contents of the second file. Thus +the `-E' option acts like the `-e' option, except that it brackets the +first and third files from three-way overlapping changes. Similarly, +`-X' acts like `-x', except it brackets all its (necessarily +overlapping) changes. For example, for the three-way overlapping +change above, the `-E' and `-X' options output the following: + + <<<<<<< lao + ======= + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan + >>>>>>> tao + + If you are comparing files that have meaningless or uninformative +names, you can use the `--label=LABEL' option to show alternate names +in the `<<<<<<<', `|||||||' and `>>>>>>>' brackets. This option can be +given up to three times, once for each input file. Thus `diff3 -A +--label X --label Y --label Z A B C' acts like `diff3 -A A B C', except +that the output looks like it came from files named `X', `Y' and `Z' +rather than from files named `A', `B' and `C'. + + +File: diff.info, Node: Bypassing ed, Next: Merging Incomplete Lines, Prev: Marking Conflicts, Up: diff3 Merging + +8.3 Generating the Merged Output Directly +========================================= + +With the `-m' or `--merge' option, `diff3' outputs the merged file +directly. This is more efficient than using `ed' to generate it, and +works even with non-text files that `ed' would reject. If you specify +`-m' without an `ed' script option, `-A' is assumed. + + For example, the command `diff3 -m lao tzu tao' (*note Sample diff3 +Input:: for a copy of the input files) would output the following: + + <<<<<<< tzu + ======= + The Way that can be told of is not the eternal Way; + The name that can be named is not the eternal name. + >>>>>>> tao + The Nameless is the origin of Heaven and Earth; + The Named is the mother of all things. + Therefore let there always be non-being, + so we may see their subtlety, + And let there always be being, + so we may see their result. + The two are the same, + But after they are produced, + they have different names. + <<<<<<< lao + ||||||| tzu + They both may be called deep and profound. + Deeper and more profound, + The door of all subtleties! + ======= + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan + >>>>>>> tao + + +File: diff.info, Node: Merging Incomplete Lines, Next: Saving the Changed File, Prev: Bypassing ed, Up: diff3 Merging + +8.4 How `diff3' Merges Incomplete Lines +======================================= + +With `-m', incomplete lines (*note Incomplete Lines::) are simply +copied to the output as they are found; if the merged output ends in an +conflict and one of the input files ends in an incomplete line, +succeeding `|||||||', `=======' or `>>>>>>>' brackets appear somewhere +other than the start of a line because they are appended to the +incomplete line. + + Without `-m', if an `ed' script option is specified and an +incomplete line is found, `diff3' generates a warning and acts as if a +newline had been present. + + +File: diff.info, Node: Saving the Changed File, Prev: Merging Incomplete Lines, Up: diff3 Merging + +8.5 Saving the Changed File +=========================== + +Traditional Unix `diff3' generates an `ed' script without the trailing +`w' and `q' commands that save the changes. System V `diff3' generates +these extra commands. GNU `diff3' normally behaves like traditional +Unix `diff3', but with the `-i' option it behaves like System V `diff3' +and appends the `w' and `q' commands. + + The `-i' option requires one of the `ed' script options `-AeExX3', +and is incompatible with the merged output option `-m'. + + +File: diff.info, Node: Interactive Merging, Next: Merging with patch, Prev: diff3 Merging, Up: Top + +9 Interactive Merging with `sdiff' +********************************** + +With `sdiff', you can merge two files interactively based on a +side-by-side `-y' format comparison (*note Side by Side::). Use `-o +FILE' or `--output=FILE' to specify where to put the merged text. +*Note Invoking sdiff::, for more details on the options to `sdiff'. + + Another way to merge files interactively is to use the Emacs Lisp +package `emerge'. *Note emerge: (emacs)emerge, for more information. + +* Menu: + +* sdiff Option Summary:: Summary of `sdiff' options. +* Merge Commands:: Merging two files interactively. + + +File: diff.info, Node: sdiff Option Summary, Next: Merge Commands, Up: Interactive Merging + +9.1 Specifying `diff' Options to `sdiff' +======================================== + +The following `sdiff' options have the same meaning as for `diff'. +*Note diff Options::, for the use of these options. + + -a -b -d -i -t -v + -B -E -I REGEXP + + --expand-tabs + --ignore-blank-lines --ignore-case + --ignore-matching-lines=REGEXP --ignore-space-change + --ignore-tab-expansion + --left-column --minimal --speed-large-files + --strip-trailing-cr --suppress-common-lines + --tabsize=COLUMNS --text --version --width=COLUMNS + + For historical reasons, `sdiff' has alternate names for some +options. The `-l' option is equivalent to the `--left-column' option, +and similarly `-s' is equivalent to `--suppress-common-lines'. The +meaning of the `sdiff' `-w' and `-W' options is interchanged from that +of `diff': with `sdiff', `-w COLUMNS' is equivalent to +`--width=COLUMNS', and `-W' is equivalent to `--ignore-all-space'. +`sdiff' without the `-o' option is equivalent to `diff' with the `-y' +or `--side-by-side' option (*note Side by Side::). + + +File: diff.info, Node: Merge Commands, Prev: sdiff Option Summary, Up: Interactive Merging + +9.2 Merge Commands +================== + +Groups of common lines, with a blank gutter, are copied from the first +file to the output. After each group of differing lines, `sdiff' +prompts with `%' and pauses, waiting for one of the following commands. +Follow each command with <RET>. + +`e' + Discard both versions. Invoke a text editor on an empty temporary + file, then copy the resulting file to the output. + +`eb' + Concatenate the two versions, edit the result in a temporary file, + then copy the edited result to the output. + +`ed' + Like `eb', except precede each version with a header that shows + what file and lines the version came from. + +`el' +`e1' + Edit a copy of the left version, then copy the result to the + output. + +`er' +`e2' + Edit a copy of the right version, then copy the result to the + output. + +`l' +`1' + Copy the left version to the output. + +`q' + Quit. + +`r' +`2' + Copy the right version to the output. + +`s' + Silently copy common lines. + +`v' + Verbosely copy common lines. This is the default. + + The text editor invoked is specified by the `EDITOR' environment +variable if it is set. The default is system-dependent. + + +File: diff.info, Node: Merging with patch, Next: Making Patches, Prev: Interactive Merging, Up: Top + +10 Merging with `patch' +*********************** + +`patch' takes comparison output produced by `diff' and applies the +differences to a copy of the original file, producing a patched +version. With `patch', you can distribute just the changes to a set of +files instead of distributing the entire file set; your correspondents +can apply `patch' to update their copy of the files with your changes. +`patch' automatically determines the diff format, skips any leading or +trailing headers, and uses the headers to determine which file to +patch. This lets your correspondents feed a mail message containing a +difference listing directly to `patch'. + + `patch' detects and warns about common problems like forward +patches. It saves any patches that it could not apply. It can also +maintain a `patchlevel.h' file to ensure that your correspondents apply +diffs in the proper order. + + `patch' accepts a series of diffs in its standard input, usually +separated by headers that specify which file to patch. It applies +`diff' hunks (*note Hunks::) one by one. If a hunk does not exactly +match the original file, `patch' uses heuristics to try to patch the +file as well as it can. If no approximate match can be found, `patch' +rejects the hunk and skips to the next hunk. `patch' normally replaces +each file F with its new version, putting reject hunks (if any) into +`F.rej'. + + *Note Invoking patch::, for detailed information on the options to +`patch'. + +* Menu: + +* patch Input:: Selecting the type of `patch' input. +* Revision Control:: Getting files from RCS, SCCS, etc. +* Imperfect:: Dealing with imperfect patches. +* Creating and Removing:: Creating and removing files with a patch. +* Patching Time Stamps:: Updating time stamps on patched files. +* Multiple Patches:: Handling multiple patches in a file. +* patch Directories:: Changing directory and stripping directories. +* Backups:: Whether backup files are made. +* Backup Names:: Backup file names. +* Reject Names:: Reject file names. +* patch Messages:: Messages and questions `patch' can produce. +* patch and POSIX:: Conformance to the POSIX standard. +* patch and Tradition:: GNU versus traditional `patch'. + + +File: diff.info, Node: patch Input, Next: Revision Control, Up: Merging with patch + +10.1 Selecting the `patch' Input Format +======================================= + +`patch' normally determines which `diff' format the patch file uses by +examining its contents. For patch files that contain particularly +confusing leading text, you might need to use one of the following +options to force `patch' to interpret the patch file as a certain +format of diff. The output formats listed here are the only ones that +`patch' can understand. + +`-c' +`--context' + context diff. + +`-e' +`--ed' + `ed' script. + +`-n' +`--normal' + normal diff. + +`-u' +`--unified' + unified diff. + + +File: diff.info, Node: Revision Control, Next: Imperfect, Prev: patch Input, Up: Merging with patch + +10.2 Revision Control +===================== + +If a nonexistent input file is under a revision control system +supported by `patch', `patch' normally asks the user whether to get (or +check out) the file from the revision control system. Patch currently +supports RCS, ClearCase and SCCS. Under RCS and SCCS, `patch' also +asks when the input file is read-only and matches the default version +in the revision control system. + + The `-g NUM' or `--get=NUM' option affects access to files under +supported revision control systems. If NUM is positive, `patch' gets +the file without asking the user; if zero, `patch' neither asks the +user nor gets the file; and if negative, `patch' asks the user before +getting the file. The default value of NUM is given by the value of the +`PATCH_GET' environment variable if it is set; if not, the default +value is zero if `patch' is conforming to POSIX, negative otherwise. +*Note patch and POSIX::. + + The choice of revision control system is unaffected by the +`VERSION_CONTROL' environment variable (*note Backup Names::). + + +File: diff.info, Node: Imperfect, Next: Creating and Removing, Prev: Revision Control, Up: Merging with patch + +10.3 Applying Imperfect Patches +=============================== + +`patch' tries to skip any leading text in the patch file, apply the +diff, and then skip any trailing text. Thus you can feed a mail +message directly to `patch', and it should work. If the entire diff is +indented by a constant amount of white space, `patch' automatically +ignores the indentation. If a context diff contains trailing carriage +return on each line, `patch' automatically ignores the carriage return. +If a context diff has been encapsulated by prepending `- ' to lines +beginning with `-' as per Internet RFC 934 +(ftp://ftp.isi.edu/in-notes/rfc934.txt), `patch' automatically +unencapsulates the input. + + However, certain other types of imperfect input require user +intervention or testing. + +* Menu: + +* Changed White Space:: When tabs and spaces don't match exactly. +* Reversed Patches:: Applying reversed patches correctly. +* Inexact:: Helping `patch' find close matches. +* Dry Runs:: Predicting what `patch' will do. + + +File: diff.info, Node: Changed White Space, Next: Reversed Patches, Up: Imperfect + +10.3.1 Applying Patches with Changed White Space +------------------------------------------------ + +Sometimes mailers, editors, or other programs change spaces into tabs, +or vice versa. If this happens to a patch file or an input file, the +files might look the same, but `patch' will not be able to match them +properly. If this problem occurs, use the `-l' or +`--ignore-white-space' option, which makes `patch' compare blank +characters (i.e. spaces and tabs) loosely so that any nonempty sequence +of blanks in the patch file matches any nonempty sequence of blanks in +the input files. Non-blank characters must still match exactly. Each +line of the context must still match a line in the input file. + + +File: diff.info, Node: Reversed Patches, Next: Inexact, Prev: Changed White Space, Up: Imperfect + +10.3.2 Applying Reversed Patches +-------------------------------- + +Sometimes people run `diff' with the new file first instead of second. +This creates a diff that is "reversed". To apply such patches, give +`patch' the `-R' or `--reverse' option. `patch' then attempts to swap +each hunk around before applying it. Rejects come out in the swapped +format. + + Often `patch' can guess that the patch is reversed. If the first +hunk of a patch fails, `patch' reverses the hunk to see if it can apply +it that way. If it can, `patch' asks you if you want to have the `-R' +option set; if it can't, `patch' continues to apply the patch normally. +This method cannot detect a reversed patch if it is a normal diff and +the first command is an append (which should have been a delete) since +appends always succeed, because a null context matches anywhere. But +most patches add or change lines rather than delete them, so most +reversed normal diffs begin with a delete, which fails, and `patch' +notices. + + If you apply a patch that you have already applied, `patch' thinks +it is a reversed patch and offers to un-apply the patch. This could be +construed as a feature. If you did this inadvertently and you don't +want to un-apply the patch, just answer `n' to this offer and to the +subsequent "apply anyway" question--or type `C-c' to kill the `patch' +process. + + +File: diff.info, Node: Inexact, Next: Dry Runs, Prev: Reversed Patches, Up: Imperfect + +10.3.3 Helping `patch' Find Inexact Matches +------------------------------------------- + +For context diffs, and to a lesser extent normal diffs, `patch' can +detect when the line numbers mentioned in the patch are incorrect, and +it attempts to find the correct place to apply each hunk of the patch. +As a first guess, it takes the line number mentioned in the hunk, plus +or minus any offset used in applying the previous hunk. If that is not +the correct place, `patch' scans both forward and backward for a set of +lines matching the context given in the hunk. + + First `patch' looks for a place where all lines of the context +match. If it cannot find such a place, and it is reading a context or +unified diff, and the maximum fuzz factor is set to 1 or more, then +`patch' makes another scan, ignoring the first and last line of +context. If that fails, and the maximum fuzz factor is set to 2 or +more, it makes another scan, ignoring the first two and last two lines +of context are ignored. It continues similarly if the maximum fuzz +factor is larger. + + The `-F LINES' or `--fuzz=LINES' option sets the maximum fuzz factor +to LINES. This option only applies to context and unified diffs; it +ignores up to LINES lines while looking for the place to install a +hunk. Note that a larger fuzz factor increases the odds of making a +faulty patch. The default fuzz factor is 2; there is no point to +setting it to more than the number of lines of context in the diff, +ordinarily 3. + + If `patch' cannot find a place to install a hunk of the patch, it +writes the hunk out to a reject file (*note Reject Names::, for +information on how reject files are named). It writes out rejected +hunks in context format no matter what form the input patch is in. If +the input is a normal or `ed' diff, many of the contexts are simply +null. The line numbers on the hunks in the reject file may be +different from those in the patch file: they show the approximate +location where `patch' thinks the failed hunks belong in the new file +rather than in the old one. + + If the `--verbose' option is given, then as it completes each hunk +`patch' tells you whether the hunk succeeded or failed, and if it +failed, on which line (in the new file) `patch' thinks the hunk should +go. If this is different from the line number specified in the diff, +it tells you the offset. A single large offset _may_ indicate that +`patch' installed a hunk in the wrong place. `patch' also tells you if +it used a fuzz factor to make the match, in which case you should also +be slightly suspicious. + + `patch' cannot tell if the line numbers are off in an `ed' script, +and can only detect wrong line numbers in a normal diff when it finds a +change or delete command. It may have the same problem with a context +diff using a fuzz factor equal to or greater than the number of lines +of context shown in the diff (typically 3). In these cases, you should +probably look at a context diff between your original and patched input +files to see if the changes make sense. Compiling without errors is a +pretty good indication that the patch worked, but not a guarantee. + + A patch against an empty file applies to a nonexistent file, and vice +versa. *Note Creating and Removing::. + + `patch' usually produces the correct results, even when it must make +many guesses. However, the results are guaranteed only when the patch +is applied to an exact copy of the file that the patch was generated +from. + + +File: diff.info, Node: Dry Runs, Prev: Inexact, Up: Imperfect + +10.3.4 Predicting what `patch' will do +-------------------------------------- + +It may not be obvious in advance what `patch' will do with a +complicated or poorly formatted patch. If you are concerned that the +input might cause `patch' to modify the wrong files, you can use the +`--dry-run' option, which causes `patch' to print the results of +applying patches without actually changing any files. You can then +inspect the diagnostics generated by the dry run to see whether `patch' +will modify the files that you expect. If the patch does not do what +you want, you can modify the patch (or the other options to `patch') +and try another dry run. Once you are satisfied with the proposed +patch you can apply it by invoking `patch' as before, but this time +without the `--dry-run' option. + + +File: diff.info, Node: Creating and Removing, Next: Patching Time Stamps, Prev: Imperfect, Up: Merging with patch + +10.4 Creating and Removing Files +================================ + +Sometimes when comparing two directories, a file may exist in one +directory but not the other. If you give `diff' the `-N' or +`--new-file' option, or if you supply an old or new file that is named +`/dev/null' or is empty and is dated the Epoch (1970-01-01 00:00:00 +UTC), `diff' outputs a patch that adds or deletes the contents of this +file. When given such a patch, `patch' normally creates a new file or +removes the old file. However, when conforming to POSIX (*note patch +and POSIX::), `patch' does not remove the old file, but leaves it empty. +The `-E' or `--remove-empty-files' option causes `patch' to remove +output files that are empty after applying a patch, even if the patch +does not appear to be one that removed the file. + + If the patch appears to create a file that already exists, `patch' +asks for confirmation before applying the patch. + + +File: diff.info, Node: Patching Time Stamps, Next: Multiple Patches, Prev: Creating and Removing, Up: Merging with patch + +10.5 Updating Time Stamps on Patched Files +========================================== + +When `patch' updates a file, it normally sets the file's last-modified +time stamp to the current time of day. If you are using `patch' to +track a software distribution, this can cause `make' to incorrectly +conclude that a patched file is out of date. For example, if +`syntax.c' depends on `syntax.y', and `patch' updates `syntax.c' and +then `syntax.y', then `syntax.c' will normally appear to be out of date +with respect to `syntax.y' even though its contents are actually up to +date. + + The `-Z' or `--set-utc' option causes `patch' to set a patched +file's modification and access times to the time stamps given in +context diff headers. If the context diff headers do not specify a +time zone, they are assumed to use Coordinated Universal Time (UTC, +often known as GMT). + + The `-T' or `--set-time' option acts like `-Z' or `--set-utc', +except that it assumes that the context diff headers' time stamps use +local time instead of UTC. This option is not recommended, because +patches using local time cannot easily be used by people in other time +zones, and because local time stamps are ambiguous when local clocks +move backwards during daylight-saving time adjustments. If the context +diff headers specify a time zone, this option is equivalent to `-Z' or +`--set-utc'. + + `patch' normally refrains from setting a file's time stamps if the +file's original last-modified time stamp does not match the time given +in the diff header, of if the file's contents do not exactly match the +patch. However, if the `-f' or `--force' option is given, the file's +time stamps are set regardless. + + Due to the limitations of the current `diff' format, `patch' cannot +update the times of files whose contents have not changed. Also, if +you set file time stamps to values other than the current time of day, +you should also remove (e.g., with `make clean') all files that depend +on the patched files, so that later invocations of `make' do not get +confused by the patched files' times. + + +File: diff.info, Node: Multiple Patches, Next: patch Directories, Prev: Patching Time Stamps, Up: Merging with patch + +10.6 Multiple Patches in a File +=============================== + +If the patch file contains more than one patch, and if you do not +specify an input file on the command line, `patch' tries to apply each +patch as if they came from separate patch files. This means that it +determines the name of the file to patch for each patch, and that it +examines the leading text before each patch for file names and +prerequisite revision level (*note Making Patches::, for more on that +topic). + + `patch' uses the following rules to intuit a file name from the +leading text before a patch. First, `patch' takes an ordered list of +candidate file names as follows: + + * If the header is that of a context diff, `patch' takes the old and + new file names in the header. A name is ignored if it does not + have enough slashes to satisfy the `-pNUM' or `--strip=NUM' + option. The name `/dev/null' is also ignored. + + * If there is an `Index:' line in the leading garbage and if either + the old and new names are both absent or if `patch' is conforming + to POSIX, `patch' takes the name in the `Index:' line. + + * For the purpose of the following rules, the candidate file names + are considered to be in the order (old, new, index), regardless of + the order that they appear in the header. + +Then `patch' selects a file name from the candidate list as follows: + + * If some of the named files exist, `patch' selects the first name + if conforming to POSIX, and the best name otherwise. + + * If `patch' is not ignoring RCS, ClearCase, and SCCS (*note + Revision Control::), and no named files exist but an RCS, + ClearCase, or SCCS master is found, `patch' selects the first + named file with an RCS, ClearCase, or SCCS master. + + * If no named files exist, no RCS, ClearCase, or SCCS master was + found, some names are given, `patch' is not conforming to POSIX, + and the patch appears to create a file, `patch' selects the best + name requiring the creation of the fewest directories. + + * If no file name results from the above heuristics, you are asked + for the name of the file to patch, and `patch' selects that name. + + To determine the "best" of a nonempty list of file names, `patch' +first takes all the names with the fewest path name components; of +those, it then takes all the names with the shortest basename; of +those, it then takes all the shortest names; finally, it takes the +first remaining name. + + *Note patch and POSIX::, to see whether `patch' is conforming to +POSIX. + + +File: diff.info, Node: patch Directories, Next: Backups, Prev: Multiple Patches, Up: Merging with patch + +10.7 Applying Patches in Other Directories +========================================== + +The `-d DIRECTORY' or `--directory=DIRECTORY' option to `patch' makes +directory DIRECTORY the current directory for interpreting both file +names in the patch file, and file names given as arguments to other +options (such as `-B' and `-o'). For example, while in a mail reading +program, you can patch a file in the `/usr/src/emacs' directory +directly from a message containing the patch like this: + + | patch -d /usr/src/emacs + + Sometimes the file names given in a patch contain leading +directories, but you keep your files in a directory different from the +one given in the patch. In those cases, you can use the `-pNUMBER' or +`--strip=NUMBER' option to set the file name strip count to NUMBER. +The strip count tells `patch' how many slashes, along with the directory +names between them, to strip from the front of file names. A sequence +of one or more adjacent slashes is counted as a single slash. By +default, `patch' strips off all leading directories, leaving just the +base file names. + + For example, suppose the file name in the patch file is +`/gnu/src/emacs/etc/NEWS'. Using `-p0' gives the entire file name +unmodified, `-p1' gives `gnu/src/emacs/etc/NEWS' (no leading slash), +`-p4' gives `etc/NEWS', and not specifying `-p' at all gives `NEWS'. + + `patch' looks for each file (after any slashes have been stripped) +in the current directory, or if you used the `-d DIRECTORY' option, in +that directory. + + +File: diff.info, Node: Backups, Next: Backup Names, Prev: patch Directories, Up: Merging with patch + +10.8 Backup Files +================= + +Normally, `patch' creates a backup file if the patch does not exactly +match the original input file, because in that case the original data +might not be recovered if you undo the patch with `patch -R' (*note +Reversed Patches::). However, when conforming to POSIX, `patch' does +not create backup files by default. *Note patch and POSIX::. + + The `-b' or `--backup' option causes `patch' to make a backup file +regardless of whether the patch matches the original input. The +`--backup-if-mismatch' option causes `patch' to create backup files for +mismatches files; this is the default when not conforming to POSIX. The +`--no-backup-if-mismatch' option causes `patch' to not create backup +files, even for mismatched patches; this is the default when conforming +to POSIX. + + When backing up a file that does not exist, an empty, unreadable +backup file is created as a placeholder to represent the nonexistent +file. + + +File: diff.info, Node: Backup Names, Next: Reject Names, Prev: Backups, Up: Merging with patch + +10.9 Backup File Names +====================== + +Normally, `patch' renames an original input file into a backup file by +appending to its name the extension `.orig', or `~' if using `.orig' +would make the backup file name too long.(1) The `-z BACKUP-SUFFIX' or +`--suffix=BACKUP-SUFFIX' option causes `patch' to use BACKUP-SUFFIX as +the backup extension instead. + + Alternately, you can specify the extension for backup files with the +`SIMPLE_BACKUP_SUFFIX' environment variable, which the options override. + + `patch' can also create numbered backup files the way GNU Emacs +does. With this method, instead of having a single backup of each +file, `patch' makes a new backup file name each time it patches a file. +For example, the backups of a file named `sink' would be called, +successively, `sink.~1~', `sink.~2~', `sink.~3~', etc. + + The `-V BACKUP-STYLE' or `--version-control=BACKUP-STYLE' option +takes as an argument a method for creating backup file names. You can +alternately control the type of backups that `patch' makes with the +`PATCH_VERSION_CONTROL' environment variable, which the `-V' option +overrides. If `PATCH_VERSION_CONTROL' is not set, the +`VERSION_CONTROL' environment variable is used instead. Please note +that these options and variables control backup file names; they do not +affect the choice of revision control system (*note Revision Control::). + + The values of these environment variables and the argument to the +`-V' option are like the GNU Emacs `version-control' variable (*note +Backup Names: (emacs)Backup Names, for more information on backup +versions in Emacs). They also recognize synonyms that are more +descriptive. The valid values are listed below; unique abbreviations +are acceptable. + +`t' +`numbered' + Always make numbered backups. + +`nil' +`existing' + Make numbered backups of files that already have them, simple + backups of the others. This is the default. + +`never' +`simple' + Always make simple backups. + + You can also tell `patch' to prepend a prefix, such as a directory +name, to produce backup file names. The `-B PREFIX' or +`--prefix=PREFIX' option makes backup files by prepending PREFIX to +them. The `-Y PREFIX' or `--basename-prefix=PREFIX' prepends PREFIX to +the last file name component of backup file names instead; for example, +`-Y ~' causes the backup name for `dir/file.c' to be `dir/~file.c'. If +you use either of these prefix options, the suffix-based options are +ignored. + + If you specify the output file with the `-o' option, that file is +the one that is backed up, not the input file. + + Options that affect the names of backup files do not affect whether +backups are made. For example, if you specify the +`--no-backup-if-mismatch' option, none of the options described in this +section have any affect, because no backups are made. + + ---------- Footnotes ---------- + + (1) A coding error in GNU `patch' version 2.5.4 causes it to always +use `~', but this should be fixed in the next release. + + +File: diff.info, Node: Reject Names, Next: patch Messages, Prev: Backup Names, Up: Merging with patch + +10.10 Reject File Names +======================= + +The names for reject files (files containing patches that `patch' could +not find a place to apply) are normally the name of the output file +with `.rej' appended (or `#' if using `.rej' would make the backup file +name too long). + + Alternatively, you can tell `patch' to place all of the rejected +patches in a single file. The `-r REJECT-FILE' or +`--reject-file=REJECT-FILE' option uses REJECT-FILE as the reject file +name. + + +File: diff.info, Node: patch Messages, Next: patch and POSIX, Prev: Reject Names, Up: Merging with patch + +10.11 Messages and Questions from `patch' +========================================= + +`patch' can produce a variety of messages, especially if it has trouble +decoding its input. In a few situations where it's not sure how to +proceed, `patch' normally prompts you for more information from the +keyboard. There are options to produce more or fewer messages, to have +it not ask for keyboard input, and to affect the way that file names +are quoted in messages. + +* Menu: + +* More or Fewer Messages:: Controlling the verbosity of `patch'. +* patch and Keyboard Input:: Inhibiting keyboard input. +* patch Quoting Style:: Quoting file names in diagnostics. + + `patch' exits with status 0 if all hunks are applied successfully, 1 +if some hunks cannot be applied, and 2 if there is more serious trouble. +When applying a set of patches in a loop, you should check the exit +status, so you don't apply a later patch to a partially patched file. + + +File: diff.info, Node: More or Fewer Messages, Next: patch and Keyboard Input, Up: patch Messages + +10.11.1 Controlling the Verbosity of `patch' +-------------------------------------------- + +You can cause `patch' to produce more messages by using the `--verbose' +option. For example, when you give this option, the message `Hmm...' +indicates that `patch' is reading text in the patch file, attempting to +determine whether there is a patch in that text, and if so, what kind +of patch it is. + + You can inhibit all terminal output from `patch', unless an error +occurs, by using the `-s', `--quiet', or `--silent' option. + + +File: diff.info, Node: patch and Keyboard Input, Next: patch Quoting Style, Prev: More or Fewer Messages, Up: patch Messages + +10.11.2 Inhibiting Keyboard Input +--------------------------------- + +There are two ways you can prevent `patch' from asking you any +questions. The `-f' or `--force' option assumes that you know what you +are doing. It causes `patch' to do the following: + + * Skip patches that do not contain file names in their headers. + + * Patch files even though they have the wrong version for the + `Prereq:' line in the patch; + + * Assume that patches are not reversed even if they look like they + are. + +The `-t' or `--batch' option is similar to `-f', in that it suppresses +questions, but it makes somewhat different assumptions: + + * Skip patches that do not contain file names in their headers (the + same as `-f'). + + * Skip patches for which the file has the wrong version for the + `Prereq:' line in the patch; + + * Assume that patches are reversed if they look like they are. + + +File: diff.info, Node: patch Quoting Style, Prev: patch and Keyboard Input, Up: patch Messages + +10.11.3 `patch' Quoting Style +----------------------------- + +When `patch' outputs a file name in a diagnostic message, it can format +the name in any of several ways. This can be useful to output file +names unambiguously, even if they contain punctuation or special +characters like newlines. The `--quoting-style=WORD' option controls +how names are output. The WORD should be one of the following: + +`literal' + Output names as-is. + +`shell' + Quote names for the shell if they contain shell metacharacters or + would cause ambiguous output. + +`shell-always' + Quote names for the shell, even if they would normally not require + quoting. + +`c' + Quote names as for a C language string. + +`escape' + Quote as with `c' except omit the surrounding double-quote + characters. + + You can specify the default value of the `--quoting-style' option +with the environment variable `QUOTING_STYLE'. If that environment +variable is not set, the default value is `shell', but this default may +change in a future version of `patch'. + + +File: diff.info, Node: patch and POSIX, Next: patch and Tradition, Prev: patch Messages, Up: Merging with patch + +10.12 `patch' and the POSIX Standard +==================================== + +If you specify the `--posix' option, or set the `POSIXLY_CORRECT' +environment variable, `patch' conforms more strictly to the POSIX +standard, as follows: + + * Take the first existing file from the list (old, new, index) when + intuiting file names from diff headers. *Note Multiple Patches::. + + * Do not remove files that are removed by a diff. *Note Creating + and Removing::. + + * Do not ask whether to get files from RCS, ClearCase, or SCCS. + *Note Revision Control::. + + * Require that all options precede the files in the command line. + + * Do not backup files, even when there is a mismatch. *Note + Backups::. + + + +File: diff.info, Node: patch and Tradition, Prev: patch and POSIX, Up: Merging with patch + +10.13 GNU `patch' and Traditional `patch' +========================================= + +The current version of GNU `patch' normally follows the POSIX standard. +*Note patch and POSIX::, for the few exceptions to this general rule. + + Unfortunately, POSIX redefined the behavior of `patch' in several +important ways. You should be aware of the following differences if +you must interoperate with traditional `patch', or with GNU `patch' +version 2.1 and earlier. + + * In traditional `patch', the `-p' option's operand was optional, + and a bare `-p' was equivalent to `-p0'. The `-p' option now + requires an operand, and `-p 0' is now equivalent to `-p0'. For + maximum compatibility, use options like `-p0' and `-p1'. + + Also, traditional `patch' simply counted slashes when stripping + path prefixes; `patch' now counts pathname components. That is, a + sequence of one or more adjacent slashes now counts as a single + slash. For maximum portability, avoid sending patches containing + `//' in file names. + + * In traditional `patch', backups were enabled by default. This + behavior is now enabled with the `-b' or `--backup' option. + + Conversely, in POSIX `patch', backups are never made, even when + there is a mismatch. In GNU `patch', this behavior is enabled + with the `--no-backup-if-mismatch' option, or by conforming to + POSIX. + + The `-b SUFFIX' option of traditional `patch' is equivalent to the + `-b -z SUFFIX' options of GNU `patch'. + + * Traditional `patch' used a complicated (and incompletely + documented) method to intuit the name of the file to be patched + from the patch header. This method did not conform to POSIX, and + had a few gotchas. Now `patch' uses a different, equally + complicated (but better documented) method that is optionally + POSIX-conforming; we hope it has fewer gotchas. The two methods + are compatible if the file names in the context diff header and the + `Index:' line are all identical after prefix-stripping. Your + patch is normally compatible if each header's file names all + contain the same number of slashes. + + * When traditional `patch' asked the user a question, it sent the + question to standard error and looked for an answer from the first + file in the following list that was a terminal: standard error, + standard output, `/dev/tty', and standard input. Now `patch' + sends questions to standard output and gets answers from + `/dev/tty'. Defaults for some answers have been changed so that + `patch' never goes into an infinite loop when using default + answers. + + * Traditional `patch' exited with a status value that counted the + number of bad hunks, or with status 1 if there was real trouble. + Now `patch' exits with status 1 if some hunks failed, or with 2 if + there was real trouble. + + * Limit yourself to the following options when sending instructions + meant to be executed by anyone running GNU `patch', traditional + `patch', or a `patch' that conforms to POSIX. Spaces are + significant in the following list, and operands are required. + + `-c' + `-d DIR' + `-D DEFINE' + `-e' + `-l' + `-n' + `-N' + `-o OUTFILE' + `-pNUM' + `-R' + `-r REJECTFILE' + + + +File: diff.info, Node: Making Patches, Next: Invoking cmp, Prev: Merging with patch, Up: Top + +11 Tips for Making and Using Patches +************************************ + +Use some common sense when making and using patches. For example, when +sending bug fixes to a program's maintainer, send several small +patches, one per independent subject, instead of one large, +harder-to-digest patch that covers all the subjects. + + Here are some other things you should keep in mind if you are going +to distribute patches for updating a software package. + +* Menu: + +* Tips for Patch Producers:: Advice for making patches. +* Tips for Patch Consumers:: Advice for using patches. +* Avoiding Common Mistakes:: Avoiding common mistakes when using `patch'. +* Generating Smaller Patches:: How to generate smaller patches. + + +File: diff.info, Node: Tips for Patch Producers, Next: Tips for Patch Consumers, Up: Making Patches + +11.1 Tips for Patch Producers +============================= + +To create a patch that changes an older version of a package into a +newer version, first make a copy of the older and newer versions in +adjacent subdirectories. It is common to do that by unpacking `tar' +archives of the two versions. + + To generate the patch, use the command `diff -Naur OLD NEW' where +OLD and NEW identify the old and new directories. The names OLD and +NEW should not contain any slashes. The `-N' option lets the patch +create and remove files; `-a' lets the patch update non-text files; `-u' +generates useful time stamps and enough context; and `-r' lets the +patch update subdirectories. Here is an example command, using Bourne +shell syntax: + + diff -Naur gcc-3.0.3 gcc-3.0.4 + + Tell your recipients how to apply the patches. This should include +which working directory to use, and which `patch' options to use; the +option `-p1' is recommended. Test your procedure by pretending to be a +recipient and applying your patches to a copy of the original files. + + *Note Avoiding Common Mistakes::, for how to avoid common mistakes +when generating a patch. + + +File: diff.info, Node: Tips for Patch Consumers, Next: Avoiding Common Mistakes, Prev: Tips for Patch Producers, Up: Making Patches + +11.2 Tips for Patch Consumers +============================= + +A patch producer should tell recipients how to apply the patches, so +the first rule of thumb for a patch consumer is to follow the +instructions supplied with the patch. + + GNU `diff' can analyze files with arbitrarily long lines and files +that end in incomplete lines. However, older versions of `patch' +cannot patch such files. If you are having trouble applying such +patches, try upgrading to a recent version of GNU `patch'. + + +File: diff.info, Node: Avoiding Common Mistakes, Next: Generating Smaller Patches, Prev: Tips for Patch Consumers, Up: Making Patches + +11.3 Avoiding Common Mistakes +============================= + +When producing a patch for multiple files, apply `diff' to directories +whose names do not have slashes. This reduces confusion when the patch +consumer specifies the `-pNUMBER' option, since this option can have +surprising results when the old and new file names have different +numbers of slashes. For example, do not send a patch with a header +that looks like this: + + diff -Naur v2.0.29/prog/README prog/README + --- v2.0.29/prog/README 2002-03-10 23:30:39.942229878 -0800 + +++ prog/README 2002-03-17 20:49:32.442260588 -0800 + +because the two file names have different numbers of slashes, and +different versions of `patch' interpret the file names differently. To +avoid confusion, send output that looks like this instead: + + diff -Naur v2.0.29/prog/README v2.0.30/prog/README + --- v2.0.29/prog/README 2002-03-10 23:30:39.942229878 -0800 + +++ v2.0.30/prog/README 2002-03-17 20:49:32.442260588 -0800 + + Make sure you have specified the file names correctly, either in a +context diff header or with an `Index:' line. Take care to not send out +reversed patches, since these make people wonder whether they have +already applied the patch. + + Avoid sending patches that compare backup file names like +`README.orig' or `README~', since this might confuse `patch' into +patching a backup file instead of the real file. Instead, send patches +that compare the same base file names in different directories, e.g. +`old/README' and `new/README'. + + To save people from partially applying a patch before other patches +that should have gone before it, you can make the first patch in the +patch file update a file with a name like `patchlevel.h' or +`version.c', which contains a patch level or version number. If the +input file contains the wrong version number, `patch' will complain +immediately. + + An even clearer way to prevent this problem is to put a `Prereq:' +line before the patch. If the leading text in the patch file contains a +line that starts with `Prereq:', `patch' takes the next word from that +line (normally a version number) and checks whether the next input file +contains that word, preceded and followed by either white space or a +newline. If not, `patch' prompts you for confirmation before +proceeding. This makes it difficult to accidentally apply patches in +the wrong order. + + +File: diff.info, Node: Generating Smaller Patches, Prev: Avoiding Common Mistakes, Up: Making Patches + +11.4 Generating Smaller Patches +=============================== + +The simplest way to generate a patch is to use `diff -Naur' (*note Tips +for Patch Producers::), but you might be able to reduce the size of the +patch by renaming or removing some files before making the patch. If +the older version of the package contains any files that the newer +version does not, or if any files have been renamed between the two +versions, make a list of `rm' and `mv' commands for the user to execute +in the old version directory before applying the patch. Then run those +commands yourself in the scratch directory. + + If there are any files that you don't need to include in the patch +because they can easily be rebuilt from other files (for example, +`TAGS' and output from `yacc' and `makeinfo'), exclude them from the +patch by giving `diff' the `-x PATTERN' option (*note Comparing +Directories::). If you want your patch to modify a derived file +because your recipients lack tools to build it, make sure that the +patch for the derived file follows any patches for files that it +depends on, so that the recipients' time stamps will not confuse `make'. + + Now you can create the patch using `diff -Naur'. Make sure to +specify the scratch directory first and the newer directory second. + + Add to the top of the patch a note telling the user any `rm' and +`mv' commands to run before applying the patch. Then you can remove +the scratch directory. + + You can also shrink the patch size by using fewer lines of context, +but bear in mind that `patch' typically needs at least two lines for +proper operation when patches do not exactly match the input files. + + +File: diff.info, Node: Invoking cmp, Next: Invoking diff, Prev: Making Patches, Up: Top + +12 Invoking `cmp' +***************** + +The `cmp' command compares two files, and if they differ, tells the +first byte and line number where they differ or reports that one file +is a prefix of the other. Bytes and lines are numbered starting with +1. The arguments of `cmp' are as follows: + + cmp OPTIONS... FROM-FILE [TO-FILE [FROM-SKIP [TO-SKIP]]] + + The file name `-' is always the standard input. `cmp' also uses the +standard input if one file name is omitted. The FROM-SKIP and TO-SKIP +operands specify how many bytes to ignore at the start of each file; +they are equivalent to the `--ignore-initial=FROM-SKIP:TO-SKIP' option. + + By default, `cmp' outputs nothing if the two files have the same +contents. If one file is a prefix of the other, `cmp' prints to +standard error a message of the following form: + + cmp: EOF on SHORTER-FILE + + Otherwise, `cmp' prints to standard output a message of the +following form: + + FROM-FILE TO-FILE differ: char BYTE-NUMBER, line LINE-NUMBER + + The message formats can differ outside the POSIX locale. Also, +POSIX allows the EOF message to be followed by a blank and some +additional information. + + An exit status of 0 means no differences were found, 1 means some +differences were found, and 2 means trouble. + +* Menu: + +* cmp Options:: Summary of options to `cmp'. + + +File: diff.info, Node: cmp Options, Up: Invoking cmp + +12.1 Options to `cmp' +===================== + +Below is a summary of all of the options that GNU `cmp' accepts. Most +options have two equivalent names, one of which is a single letter +preceded by `-', and the other of which is a long name preceded by +`--'. Multiple single letter options (unless they take an argument) +can be combined into a single command line word: `-bl' is equivalent to +`-b -l'. + +`-b' +`--print-bytes' + Print the differing bytes. Display control bytes as a `^' + followed by a letter of the alphabet and precede bytes that have + the high bit set with `M-' (which stands for "meta"). + +`--help' + Output a summary of usage and then exit. + +`-i SKIP' +`--ignore-initial=SKIP' + Ignore any differences in the first SKIP bytes of the input files. + Treat files with fewer than SKIP bytes as if they are empty. If + SKIP is of the form `FROM-SKIP:TO-SKIP', skip the first FROM-SKIP + bytes of the first input file and the first TO-SKIP bytes of the + second. + +`-l' +`--verbose' + Output the (decimal) byte numbers and (octal) values of all + differing bytes, instead of the default standard output. Also, + output the EOF message if one file is shorter than the other. + +`-n COUNT' +`--bytes=COUNT' + Compare at most COUNT input bytes. + +`-s' +`--quiet' +`--silent' + Do not print anything; only return an exit status indicating + whether the files differ. + +`-v' +`--version' + Output version information and then exit. + + In the above table, operands that are byte counts are normally +decimal, but may be preceded by `0' for octal and `0x' for hexadecimal. + + A byte count can be followed by a suffix to specify a multiple of +that count; in this case an omitted integer is understood to be 1. A +bare size letter, or one followed by `iB', specifies a multiple using +powers of 1024. A size letter followed by `B' specifies powers of 1000 +instead. For example, `-n 4M' and `-n 4MiB' are equivalent to `-n +4194304', whereas `-n 4MB' is equivalent to `-n 4000000'. This +notation is upward compatible with the SI prefixes +(http://www.bipm.fr/enus/3_SI/si-prefixes.html) for decimal multiples +and with the IEC 60027-2 prefixes for binary multiples +(http://physics.nist.gov/cuu/Units/binary.html). + + The following suffixes are defined. Large sizes like `1Y' may be +rejected by your computer due to limitations of its arithmetic. + +`kB' + kilobyte: 10^3 = 1000. + +`k' +`K' +`KiB' + kibibyte: 2^10 = 1024. `K' is special: the SI prefix is `k' and + the IEC 60027-2 prefix is `Ki', but tradition and POSIX use `k' to + mean `KiB'. + +`MB' + megabyte: 10^6 = 1,000,000. + +`M' +`MiB' + mebibyte: 2^20 = 1,048,576. + +`GB' + gigabyte: 10^9 = 1,000,000,000. + +`G' +`GiB' + gibibyte: 2^30 = 1,073,741,824. + +`TB' + terabyte: 10^12 = 1,000,000,000,000. + +`T' +`TiB' + tebibyte: 2^40 = 1,099,511,627,776. + +`PB' + petabyte: 10^15 = 1,000,000,000,000,000. + +`P' +`PiB' + pebibyte: 2^50 = 1,125,899,906,842,624. + +`EB' + exabyte: 10^18 = 1,000,000,000,000,000,000. + +`E' +`EiB' + exbibyte: 2^60 = 1,152,921,504,606,846,976. + +`ZB' + zettabyte: 10^21 = 1,000,000,000,000,000,000,000 + +`Z' +`ZiB' + 2^70 = 1,180,591,620,717,411,303,424. (`Zi' is a GNU extension to + IEC 60027-2.) + +`YB' + yottabyte: 10^24 = 1,000,000,000,000,000,000,000,000. + +`Y' +`YiB' + 2^80 = 1,208,925,819,614,629,174,706,176. (`Yi' is a GNU + extension to IEC 60027-2.) + + +File: diff.info, Node: Invoking diff, Next: Invoking diff3, Prev: Invoking cmp, Up: Top + +13 Invoking `diff' +****************** + +The format for running the `diff' command is: + + diff OPTIONS... FILES... + + In the simplest case, two file names FROM-FILE and TO-FILE are +given, and `diff' compares the contents of FROM-FILE and TO-FILE. A +file name of `-' stands for text read from the standard input. As a +special case, `diff - -' compares a copy of standard input to itself. + + If one file is a directory and the other is not, `diff' compares the +file in the directory whose name is that of the non-directory. The +non-directory file must not be `-'. + + If two file names are given and both are directories, `diff' +compares corresponding files in both directories, in alphabetical +order; this comparison is not recursive unless the `-r' or +`--recursive' option is given. `diff' never compares the actual +contents of a directory as if it were a file. The file that is fully +specified may not be standard input, because standard input is nameless +and the notion of "file with the same name" does not apply. + + If the `--from-file=FILE' option is given, the number of file names +is arbitrary, and FILE is compared to each named file. Similarly, if +the `--to-file=FILE' option is given, each named file is compared to +FILE. + + `diff' options begin with `-', so normally file names may not begin +with `-'. However, `--' as an argument by itself treats the remaining +arguments as file names even if they begin with `-'. + + An exit status of 0 means no differences were found, 1 means some +differences were found, and 2 means trouble. Normally, differing +binary files count as trouble, but this can be altered by using the +`-a' or `--text' option, or the `-q' or `--brief' option. + +* Menu: + +* diff Options:: Summary of options to `diff'. + + +File: diff.info, Node: diff Options, Up: Invoking diff + +13.1 Options to `diff' +====================== + +Below is a summary of all of the options that GNU `diff' accepts. Most +options have two equivalent names, one of which is a single letter +preceded by `-', and the other of which is a long name preceded by +`--'. Multiple single letter options (unless they take an argument) +can be combined into a single command line word: `-ac' is equivalent to +`-a -c'. Long named options can be abbreviated to any unique prefix of +their name. Brackets ([ and ]) indicate that an option takes an +optional argument. + +`-a' +`--text' + Treat all files as text and compare them line-by-line, even if they + do not seem to be text. *Note Binary::. + +`-b' +`--ignore-space-change' + Ignore changes in amount of white space. *Note White Space::. + +`-B' +`--ignore-blank-lines' + Ignore changes that just insert or delete blank lines. *Note + Blank Lines::. + +`--binary' + Read and write data in binary mode. *Note Binary::. + +`-c' + Use the context output format, showing three lines of context. + *Note Context Format::. + +`-C LINES' +`--context[=LINES]' + Use the context output format, showing LINES (an integer) lines of + context, or three if LINES is not given. *Note Context Format::. + For proper operation, `patch' typically needs at least two lines of + context. + + For compatibility `diff' also supports an obsolete option syntax + `-LINES' that has effect when combined with `-c', `-p', or `-u'. + New scripts should use `-C LINES' or `-U LINES' instead. + +`--changed-group-format=FORMAT' + Use FORMAT to output a line group containing differing lines from + both files in if-then-else format. *Note Line Group Formats::. + +`-d' +`--minimal' + Change the algorithm perhaps find a smaller set of changes. This + makes `diff' slower (sometimes much slower). *Note diff + Performance::. + +`-D NAME' +`--ifdef=NAME' + Make merged `#ifdef' format output, conditional on the preprocessor + macro NAME. *Note If-then-else::. + +`-e' +`--ed' + Make output that is a valid `ed' script. *Note ed Scripts::. + +`-E' +`--ignore-tab-expansion' + Ignore changes due to tab expansion. *Note White Space::. + +`-f' +`--forward-ed' + Make output that looks vaguely like an `ed' script but has changes + in the order they appear in the file. *Note Forward ed::. + +`-F REGEXP' +`--show-function-line=REGEXP' + In context and unified format, for each hunk of differences, show + some of the last preceding line that matches REGEXP. *Note + Specified Headings::. + +`--from-file=FILE' + Compare FILE to each operand; FILE may be a directory. + +`--help' + Output a summary of usage and then exit. + +`--horizon-lines=LINES' + Do not discard the last LINES lines of the common prefix and the + first LINES lines of the common suffix. *Note diff Performance::. + +`-i' +`--ignore-case' + Ignore changes in case; consider upper- and lower-case letters + equivalent. *Note Case Folding::. + +`-I REGEXP' +`--ignore-matching-lines=REGEXP' + Ignore changes that just insert or delete lines that match REGEXP. + *Note Specified Lines::. + +`--ignore-file-name-case' + Ignore case when comparing file names during recursive comparison. + *Note Comparing Directories::. + +`-l' +`--paginate' + Pass the output through `pr' to paginate it. *Note Pagination::. + +`--label=LABEL' + Use LABEL instead of the file name in the context format (*note + Context Format::) and unified format (*note Unified Format::) + headers. *Note RCS::. + +`--left-column' + Print only the left column of two common lines in side by side + format. *Note Side by Side Format::. + +`--line-format=FORMAT' + Use FORMAT to output all input lines in if-then-else format. + *Note Line Formats::. + +`-n' +`--rcs' + Output RCS-format diffs; like `-f' except that each command + specifies the number of lines affected. *Note RCS::. + +`-N' +`--new-file' + In directory comparison, if a file is found in only one directory, + treat it as present but empty in the other directory. *Note + Comparing Directories::. + +`--new-group-format=FORMAT' + Use FORMAT to output a group of lines taken from just the second + file in if-then-else format. *Note Line Group Formats::. + +`--new-line-format=FORMAT' + Use FORMAT to output a line taken from just the second file in + if-then-else format. *Note Line Formats::. + +`--old-group-format=FORMAT' + Use FORMAT to output a group of lines taken from just the first + file in if-then-else format. *Note Line Group Formats::. + +`--old-line-format=FORMAT' + Use FORMAT to output a line taken from just the first file in + if-then-else format. *Note Line Formats::. + +`-p' +`--show-c-function' + Show which C function each change is in. *Note C Function + Headings::. + +`-q' +`--brief' + Report only whether the files differ, not the details of the + differences. *Note Brief::. + +`-r' +`--recursive' + When comparing directories, recursively compare any subdirectories + found. *Note Comparing Directories::. + +`-s' +`--report-identical-files' + Report when two files are the same. *Note Comparing Directories::. + +`-S FILE' +`--starting-file=FILE' + When comparing directories, start with the file FILE. This is + used for resuming an aborted comparison. *Note Comparing + Directories::. + +`--speed-large-files' + Use heuristics to speed handling of large files that have numerous + scattered small changes. *Note diff Performance::. + +`--strip-trailing-cr' + Strip any trailing carriage return at the end of an input line. + *Note Binary::. + +`--suppress-common-lines' + Do not print common lines in side by side format. *Note Side by + Side Format::. + +`-t' +`--expand-tabs' + Expand tabs to spaces in the output, to preserve the alignment of + tabs in the input files. *Note Tabs::. + +`-T' +`--initial-tab' + Output a tab rather than a space before the text of a line in + normal or context format. This causes the alignment of tabs in + the line to look normal. *Note Tabs::. + +`--tabsize=COLUMNS' + Assume that tab stops are set every COLUMNS (default 8) print + columns. *Note Tabs::. + +`--suppress-blank-empty' + Suppress any blanks before newlines when printing the + representation of an empty line, when outputting normal, context, + or unified format. *Note Trailing Blanks::. + +`--to-file=FILE' + Compare each operand to FILE; FILE may be a directory. + +`-u' + Use the unified output format, showing three lines of context. + *Note Unified Format::. + +`--unchanged-group-format=FORMAT' + Use FORMAT to output a group of common lines taken from both files + in if-then-else format. *Note Line Group Formats::. + +`--unchanged-line-format=FORMAT' + Use FORMAT to output a line common to both files in if-then-else + format. *Note Line Formats::. + +`--unidirectional-new-file' + When comparing directories, if a file appears only in the second + directory of the two, treat it as present but empty in the other. + *Note Comparing Directories::. + +`-U LINES' +`--unified[=LINES]' + Use the unified output format, showing LINES (an integer) lines of + context, or three if LINES is not given. *Note Unified Format::. + For proper operation, `patch' typically needs at least two lines of + context. + + On older systems, `diff' supports an obsolete option `-LINES' that + has effect when combined with `-u'. POSIX 1003.1-2001 (*note + Standards conformance::) does not allow this; use `-U LINES' + instead. + +`-v' +`--version' + Output version information and then exit. + +`-w' +`--ignore-all-space' + Ignore white space when comparing lines. *Note White Space::. + +`-W COLUMNS' +`--width=COLUMNS' + Output at most COLUMNS (default 130) print columns per line in + side by side format. *Note Side by Side Format::. + +`-x PATTERN' +`--exclude=PATTERN' + When comparing directories, ignore files and subdirectories whose + basenames match PATTERN. *Note Comparing Directories::. + +`-X FILE' +`--exclude-from=FILE' + When comparing directories, ignore files and subdirectories whose + basenames match any pattern contained in FILE. *Note Comparing + Directories::. + +`-y' +`--side-by-side' + Use the side by side output format. *Note Side by Side Format::. + + +File: diff.info, Node: Invoking diff3, Next: Invoking patch, Prev: Invoking diff, Up: Top + +14 Invoking `diff3' +******************* + +The `diff3' command compares three files and outputs descriptions of +their differences. Its arguments are as follows: + + diff3 OPTIONS... MINE OLDER YOURS + + The files to compare are MINE, OLDER, and YOURS. At most one of +these three file names may be `-', which tells `diff3' to read the +standard input for that file. + + An exit status of 0 means `diff3' was successful, 1 means some +conflicts were found, and 2 means trouble. + +* Menu: + +* diff3 Options:: Summary of options to `diff3'. + + +File: diff.info, Node: diff3 Options, Up: Invoking diff3 + +14.1 Options to `diff3' +======================= + +Below is a summary of all of the options that GNU `diff3' accepts. +Multiple single letter options (unless they take an argument) can be +combined into a single command line argument. + +`-a' +`--text' + Treat all files as text and compare them line-by-line, even if they + do not appear to be text. *Note Binary::. + +`-A' +`--show-all' + Incorporate all unmerged changes from OLDER to YOURS into MINE, + surrounding conflicts with bracket lines. *Note Marking + Conflicts::. + +`--diff-program=PROGRAM' + Use the compatible comparison program PROGRAM to compare files + instead of `diff'. + +`-e' +`--ed' + Generate an `ed' script that incorporates all the changes from + OLDER to YOURS into MINE. *Note Which Changes::. + +`-E' +`--show-overlap' + Like `-e', except bracket lines from overlapping changes' first + and third files. *Note Marking Conflicts::. With `-E', an + overlapping change looks like this: + + <<<<<<< MINE + lines from MINE + ======= + lines from YOURS + >>>>>>> YOURS + +`--help' + Output a summary of usage and then exit. + +`-i' + Generate `w' and `q' commands at the end of the `ed' script for + System V compatibility. This option must be combined with one of + the `-AeExX3' options, and may not be combined with `-m'. *Note + Saving the Changed File::. + +`--label=LABEL' + Use the label LABEL for the brackets output by the `-A', `-E' and + `-X' options. This option may be given up to three times, one for + each input file. The default labels are the names of the input + files. Thus `diff3 --label X --label Y --label Z -m A B C' acts + like `diff3 -m A B C', except that the output looks like it came + from files named `X', `Y' and `Z' rather than from files named + `A', `B' and `C'. *Note Marking Conflicts::. + +`-m' +`--merge' + Apply the edit script to the first file and send the result to + standard output. Unlike piping the output from `diff3' to `ed', + this works even for binary files and incomplete lines. `-A' is + assumed if no edit script option is specified. *Note Bypassing + ed::. + +`--strip-trailing-cr' + Strip any trailing carriage return at the end of an input line. + *Note Binary::. + +`-T' +`--initial-tab' + Output a tab rather than two spaces before the text of a line in + normal format. This causes the alignment of tabs in the line to + look normal. *Note Tabs::. + +`-v' +`--version' + Output version information and then exit. + +`-x' +`--overlap-only' + Like `-e', except output only the overlapping changes. *Note + Which Changes::. + +`-X' + Like `-E', except output only the overlapping changes. In other + words, like `-x', except bracket changes as in `-E'. *Note + Marking Conflicts::. + +`-3' +`--easy-only' + Like `-e', except output only the nonoverlapping changes. *Note + Which Changes::. + + +File: diff.info, Node: Invoking patch, Next: Invoking sdiff, Prev: Invoking diff3, Up: Top + +15 Invoking `patch' +******************* + +Normally `patch' is invoked like this: + + patch <PATCHFILE + + The full format for invoking `patch' is: + + patch OPTIONS... [ORIGFILE [PATCHFILE]] + + You can also specify where to read the patch from with the `-i +PATCHFILE' or `--input=PATCHFILE' option. If you do not specify +PATCHFILE, or if PATCHFILE is `-', `patch' reads the patch (that is, +the `diff' output) from the standard input. + + If you do not specify an input file on the command line, `patch' +tries to intuit from the "leading text" (any text in the patch that +comes before the `diff' output) which file to edit. *Note Multiple +Patches::. + + By default, `patch' replaces the original input file with the +patched version, possibly after renaming the original file into a +backup file (*note Backup Names::, for a description of how `patch' +names backup files). You can also specify where to put the output with +the `-o FILE' or `--output=FILE' option; however, do not use this option +if FILE is one of the input files. + +* Menu: + +* patch Options:: Summary table of options to `patch'. + + +File: diff.info, Node: patch Options, Up: Invoking patch + +15.1 Options to `patch' +======================= + +Here is a summary of all of the options that GNU `patch' accepts. +*Note patch and Tradition::, for which of these options are safe to use +in older versions of `patch'. + + Multiple single-letter options that do not take an argument can be +combined into a single command line argument with only one dash. + +`-b' +`--backup' + Back up the original contents of each file, even if backups would + normally not be made. *Note Backups::. + +`-B PREFIX' +`--prefix=PREFIX' + Prepend PREFIX to backup file names. *Note Backup Names::. + +`--backup-if-mismatch' + Back up the original contents of each file if the patch does not + exactly match the file. This is the default behavior when not + conforming to POSIX. *Note Backups::. + +`--binary' + Read and write all files in binary mode, except for standard output + and `/dev/tty'. This option has no effect on POSIX-conforming + systems like GNU/Linux. On systems where this option makes a + difference, the patch should be generated by `diff -a --binary'. + *Note Binary::. + +`-c' +`--context' + Interpret the patch file as a context diff. *Note patch Input::. + +`-d DIRECTORY' +`--directory=DIRECTORY' + Make directory DIRECTORY the current directory for interpreting + both file names in the patch file, and file names given as + arguments to other options. *Note patch Directories::. + +`-D NAME' +`--ifdef=NAME' + Make merged if-then-else output using NAME. *Note If-then-else::. + +`--dry-run' + Print the results of applying the patches without actually changing + any files. *Note Dry Runs::. + +`-e' +`--ed' + Interpret the patch file as an `ed' script. *Note patch Input::. + +`-E' +`--remove-empty-files' + Remove output files that are empty after the patches have been + applied. *Note Creating and Removing::. + +`-f' +`--force' + Assume that the user knows exactly what he or she is doing, and do + not ask any questions. *Note patch Messages::. + +`-F LINES' +`--fuzz=LINES' + Set the maximum fuzz factor to LINES. *Note Inexact::. + +`-g NUM' +`--get=NUM' + If NUM is positive, get input files from a revision control system + as necessary; if zero, do not get the files; if negative, ask the + user whether to get the files. *Note Revision Control::. + +`--help' + Output a summary of usage and then exit. + +`-i PATCHFILE' +`--input=PATCHFILE' + Read the patch from PATCHFILE rather than from standard input. + *Note patch Options::. + +`-l' +`--ignore-white-space' + Let any sequence of blanks (spaces or tabs) in the patch file match + any sequence of blanks in the input file. *Note Changed White + Space::. + +`-n' +`--normal' + Interpret the patch file as a normal diff. *Note patch Input::. + +`-N' +`--forward' + Ignore patches that `patch' thinks are reversed or already applied. + See also `-R'. *Note Reversed Patches::. + +`--no-backup-if-mismatch' + Do not back up the original contents of files. This is the default + behavior when conforming to POSIX. *Note Backups::. + +`-o FILE' +`--output=FILE' + Use FILE as the output file name. *Note patch Options::. + +`-pNUMBER' +`--strip=NUMBER' + Set the file name strip count to NUMBER. *Note patch + Directories::. + +`--posix' + Conform to POSIX, as if the `POSIXLY_CORRECT' environment variable + had been set. *Note patch and POSIX::. + +`--quoting-style=WORD' + Use style WORD to quote names in diagnostics, as if the + `QUOTING_STYLE' environment variable had been set to WORD. *Note + patch Quoting Style::. + +`-r REJECT-FILE' +`--reject-file=REJECT-FILE' + Use REJECT-FILE as the reject file name. *Note Reject Names::. + +`-R' +`--reverse' + Assume that this patch was created with the old and new files + swapped. *Note Reversed Patches::. + +`-s' +`--quiet' +`--silent' + Work silently unless an error occurs. *Note patch Messages::. + +`-t' +`--batch' + Do not ask any questions. *Note patch Messages::. + +`-T' +`--set-time' + Set the modification and access times of patched files from time + stamps given in context diff headers, assuming that the context + diff headers use local time. *Note Patching Time Stamps::. + +`-u' +`--unified' + Interpret the patch file as a unified diff. *Note patch Input::. + +`-v' +`--version' + Output version information and then exit. + +`-V BACKUP-STYLE' +`--version=control=BACKUP-STYLE' + Select the naming convention for backup file names. *Note Backup + Names::. + +`--verbose' + Print more diagnostics than usual. *Note patch Messages::. + +`-x NUMBER' +`--debug=NUMBER' + Set internal debugging flags. Of interest only to `patch' + patchers. + +`-Y PREFIX' +`--basename-prefix=PREFIX' + Prepend PREFIX to base names of backup files. *Note Backup + Names::. + +`-z SUFFIX' +`--suffix=SUFFIX' + Use SUFFIX as the backup extension instead of `.orig' or `~'. + *Note Backup Names::. + +`-Z' +`--set-utc' + Set the modification and access times of patched files from time + stamps given in context diff headers, assuming that the context + diff headers use UTC. *Note Patching Time Stamps::. + + + +File: diff.info, Node: Invoking sdiff, Next: Standards conformance, Prev: Invoking patch, Up: Top + +16 Invoking `sdiff' +******************* + +The `sdiff' command merges two files and interactively outputs the +results. Its arguments are as follows: + + sdiff -o OUTFILE OPTIONS... FROM-FILE TO-FILE + + This merges FROM-FILE with TO-FILE, with output to OUTFILE. If +FROM-FILE is a directory and TO-FILE is not, `sdiff' compares the file +in FROM-FILE whose file name is that of TO-FILE, and vice versa. +FROM-FILE and TO-FILE may not both be directories. + + `sdiff' options begin with `-', so normally FROM-FILE and TO-FILE +may not begin with `-'. However, `--' as an argument by itself treats +the remaining arguments as file names even if they begin with `-'. You +may not use `-' as an input file. + + `sdiff' without `-o' (or `--output') produces a side-by-side +difference. This usage is obsolete; use the `-y' or `--side-by-side' +option of `diff' instead. + + An exit status of 0 means no differences were found, 1 means some +differences were found, and 2 means trouble. + +* Menu: + +* sdiff Options:: Summary of options to `diff'. + + +File: diff.info, Node: sdiff Options, Up: Invoking sdiff + +16.1 Options to `sdiff' +======================= + +Below is a summary of all of the options that GNU `sdiff' accepts. +Each option has two equivalent names, one of which is a single letter +preceded by `-', and the other of which is a long name preceded by +`--'. Multiple single letter options (unless they take an argument) +can be combined into a single command line argument. Long named +options can be abbreviated to any unique prefix of their name. + +`-a' +`--text' + Treat all files as text and compare them line-by-line, even if they + do not appear to be text. *Note Binary::. + +`-b' +`--ignore-space-change' + Ignore changes in amount of white space. *Note White Space::. + +`-B' +`--ignore-blank-lines' + Ignore changes that just insert or delete blank lines. *Note + Blank Lines::. + +`-d' +`--minimal' + Change the algorithm to perhaps find a smaller set of changes. + This makes `sdiff' slower (sometimes much slower). *Note diff + Performance::. + +`--diff-program=PROGRAM' + Use the compatible comparison program PROGRAM to compare files + instead of `diff'. + +`-E' +`--ignore-tab-expansion' + Ignore changes due to tab expansion. *Note White Space::. + +`--help' + Output a summary of usage and then exit. + +`-i' +`--ignore-case' + Ignore changes in case; consider upper- and lower-case to be the + same. *Note Case Folding::. + +`-I REGEXP' +`--ignore-matching-lines=REGEXP' + Ignore changes that just insert or delete lines that match REGEXP. + *Note Specified Lines::. + +`-l' +`--left-column' + Print only the left column of two common lines. *Note Side by + Side Format::. + +`-o FILE' +`--output=FILE' + Put merged output into FILE. This option is required for merging. + +`-s' +`--suppress-common-lines' + Do not print common lines. *Note Side by Side Format::. + +`--speed-large-files' + Use heuristics to speed handling of large files that have numerous + scattered small changes. *Note diff Performance::. + +`--strip-trailing-cr' + Strip any trailing carriage return at the end of an input line. + *Note Binary::. + +`-t' +`--expand-tabs' + Expand tabs to spaces in the output, to preserve the alignment of + tabs in the input files. *Note Tabs::. + +`--tabsize=COLUMNS' + Assume that tab stops are set every COLUMNS (default 8) print + columns. *Note Tabs::. + +`-v' +`--version' + Output version information and then exit. + +`-w COLUMNS' +`--width=COLUMNS' + Output at most COLUMNS (default 130) print columns per line. + *Note Side by Side Format::. Note that for historical reasons, + this option is `-W' in `diff', `-w' in `sdiff'. + +`-W' +`--ignore-all-space' + Ignore white space when comparing lines. *Note White Space::. + Note that for historical reasons, this option is `-w' in `diff', + `-W' in `sdiff'. + + +File: diff.info, Node: Standards conformance, Next: Projects, Prev: Invoking sdiff, Up: Top + +17 Standards conformance +************************ + +In a few cases, the GNU utilities' default behavior is incompatible +with the POSIX standard. To suppress these incompatibilities, define +the `POSIXLY_CORRECT' environment variable. Unless you are checking +for POSIX conformance, you probably do not need to define +`POSIXLY_CORRECT'. + + Normally options and operands can appear in any order, and programs +act as if all the options appear before any operands. For example, +`diff lao tzu -C 2' acts like `diff -C 2 lao tzu', since `2' is an +option-argument of `-C'. However, if the `POSIXLY_CORRECT' environment +variable is set, options must appear before operands, unless otherwise +specified for a particular command. + + Newer versions of POSIX are occasionally incompatible with older +versions. For example, older versions of POSIX allowed the command +`diff -c -10' to have the same meaning as `diff -C 10', but POSIX +1003.1-2001 `diff' no longer allows digit-string options like `-10'. + + The GNU utilities normally conform to the version of POSIX that is +standard for your system. To cause them to conform to a different +version of POSIX, define the `_POSIX2_VERSION' environment variable to +a value of the form YYYYMM specifying the year and month the standard +was adopted. Two values are currently supported for `_POSIX2_VERSION': +`199209' stands for POSIX 1003.2-1992, and `200112' stands for POSIX +1003.1-2001. For example, if you are running older software that +assumes an older version of POSIX and uses `diff -c -10', you can work +around the compatibility problems by setting `_POSIX2_VERSION=199209' +in your environment. + + +File: diff.info, Node: Projects, Next: Copying This Manual, Prev: Standards conformance, Up: Top + +18 Future Projects +****************** + +Here are some ideas for improving GNU `diff' and `patch'. The GNU +project has identified some improvements as potential programming +projects for volunteers. You can also help by reporting any bugs that +you find. + + If you are a programmer and would like to contribute something to the +GNU project, please consider volunteering for one of these projects. +If you are seriously contemplating work, please write to <gvc@gnu.org> +to coordinate with other volunteers. + +* Menu: + +* Shortcomings:: Suggested projects for improvements. +* Bugs:: Reporting bugs. + + +File: diff.info, Node: Shortcomings, Next: Bugs, Up: Projects + +18.1 Suggested Projects for Improving GNU `diff' and `patch' +============================================================ + +One should be able to use GNU `diff' to generate a patch from any pair +of directory trees, and given the patch and a copy of one such tree, +use `patch' to generate a faithful copy of the other. Unfortunately, +some changes to directory trees cannot be expressed using current patch +formats; also, `patch' does not handle some of the existing formats. +These shortcomings motivate the following suggested projects. + +* Menu: + +* Internationalization:: Handling multibyte and varying-width characters. +* Changing Structure:: Handling changes to the directory structure. +* Special Files:: Handling symbolic links, device special files, etc. +* Unusual File Names:: Handling file names that contain unusual characters. +* Time Stamp Order:: Outputting diffs in time stamp order. +* Ignoring Changes:: Ignoring certain changes while showing others. +* Speedups:: Improving performance. + + +File: diff.info, Node: Internationalization, Next: Changing Structure, Up: Shortcomings + +18.1.1 Handling Multibyte and Varying-Width Characters +------------------------------------------------------ + +`diff', `diff3' and `sdiff' treat each line of input as a string of +unibyte characters. This can mishandle multibyte characters in some +cases. For example, when asked to ignore spaces, `diff' does not +properly ignore a multibyte space character. + + Also, `diff' currently assumes that each byte is one column wide, +and this assumption is incorrect in some locales, e.g., locales that +use UTF-8 encoding. This causes problems with the `-y' or +`--side-by-side' option of `diff'. + + These problems need to be fixed without unduly affecting the +performance of the utilities in unibyte environments. + + The IBM GNU/Linux Technology Center Internationalization Team has +proposed patches to support internationalized `diff' +(http://oss.software.ibm.com/developer/opensource/linux/patches/i18n/diffutils-2.7.2-i18n-0.1.patch.gz). +Unfortunately, these patches are incomplete and are to an older version +of `diff', so more work needs to be done in this area. + + +File: diff.info, Node: Changing Structure, Next: Special Files, Prev: Internationalization, Up: Shortcomings + +18.1.2 Handling Changes to the Directory Structure +-------------------------------------------------- + +`diff' and `patch' do not handle some changes to directory structure. +For example, suppose one directory tree contains a directory named `D' +with some subsidiary files, and another contains a file with the same +name `D'. `diff -r' does not output enough information for `patch' to +transform the directory subtree into the file. + + There should be a way to specify that a file has been removed without +having to include its entire contents in the patch file. There should +also be a way to tell `patch' that a file was renamed, even if there is +no way for `diff' to generate such information. There should be a way +to tell `patch' that a file's time stamp has changed, even if its +contents have not changed. + + These problems can be fixed by extending the `diff' output format to +represent changes in directory structure, and extending `patch' to +understand these extensions. + + +File: diff.info, Node: Special Files, Next: Unusual File Names, Prev: Changing Structure, Up: Shortcomings + +18.1.3 Files that are Neither Directories Nor Regular Files +----------------------------------------------------------- + +Some files are neither directories nor regular files: they are unusual +files like symbolic links, device special files, named pipes, and +sockets. Currently, `diff' treats symbolic links as if they were the +pointed-to files, except that a recursive `diff' reports an error if it +detects infinite loops of symbolic links (e.g., symbolic links to +`..'). `diff' treats other special files like regular files if they +are specified at the top level, but simply reports their presence when +comparing directories. This means that `patch' cannot represent +changes to such files. For example, if you change which file a +symbolic link points to, `diff' outputs the difference between the two +files, instead of the change to the symbolic link. + + `diff' should optionally report changes to special files specially, +and `patch' should be extended to understand these extensions. + + +File: diff.info, Node: Unusual File Names, Next: Time Stamp Order, Prev: Special Files, Up: Shortcomings + +18.1.4 File Names that Contain Unusual Characters +------------------------------------------------- + +When a file name contains an unusual character like a newline or white +space, `diff -r' generates a patch that `patch' cannot parse. The +problem is with format of `diff' output, not just with `patch', because +with odd enough file names one can cause `diff' to generate a patch +that is syntactically correct but patches the wrong files. The format +of `diff' output should be extended to handle all possible file names. + + +File: diff.info, Node: Time Stamp Order, Next: Ignoring Changes, Prev: Unusual File Names, Up: Shortcomings + +18.1.5 Outputting Diffs in Time Stamp Order +------------------------------------------- + +Applying `patch' to a multiple-file diff can result in files whose time +stamps are out of order. GNU `patch' has options to restore the time +stamps of the updated files (*note Patching Time Stamps::), but +sometimes it is useful to generate a patch that works even if the +recipient does not have GNU patch, or does not use these options. One +way to do this would be to implement a `diff' option to output diffs in +time stamp order. + + +File: diff.info, Node: Ignoring Changes, Next: Speedups, Prev: Time Stamp Order, Up: Shortcomings + +18.1.6 Ignoring Certain Changes +------------------------------- + +It would be nice to have a feature for specifying two strings, one in +FROM-FILE and one in TO-FILE, which should be considered to match. +Thus, if the two strings are `foo' and `bar', then if two lines differ +only in that `foo' in file 1 corresponds to `bar' in file 2, the lines +are treated as identical. + + It is not clear how general this feature can or should be, or what +syntax should be used for it. + + A partial substitute is to filter one or both files before comparing, +e.g.: + + sed 's/foo/bar/g' file1 | diff - file2 + + However, this outputs the filtered text, not the original. + + +File: diff.info, Node: Speedups, Prev: Ignoring Changes, Up: Shortcomings + +18.1.7 Improving Performance +---------------------------- + +When comparing two large directory structures, one of which was +originally copied from the other with time stamps preserved (e.g., with +`cp -pR'), it would greatly improve performance if an option told +`diff' to assume that two files with the same size and time stamps have +the same content. *Note diff Performance::. + + +File: diff.info, Node: Bugs, Prev: Shortcomings, Up: Projects + +18.2 Reporting Bugs +=================== + +If you think you have found a bug in GNU `cmp', `diff', `diff3', or +`sdiff', please report it by electronic mail to the GNU utilities bug +report mailing list +(http://mail.gnu.org/mailman/listinfo/bug-gnu-utils) +<bug-gnu-utils@gnu.org>. Please send bug reports for GNU `patch' to +<bug-patch@gnu.org>. Send as precise a description of the problem as +you can, including the output of the `--version' option and sample +input files that produce the bug, if applicable. If you have a +nontrivial fix for the bug, please send it as well. If you have a +patch, please send it too. It may simplify the maintainer's job if the +patch is relative to a recent test release, which you can find in the +directory `ftp://alpha.gnu.org/gnu/diffutils/'. + + +File: diff.info, Node: Copying This Manual, Next: Translations, Prev: Projects, Up: Top + +Appendix A Copying This Manual +****************************** + + 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: diff.info, Node: Translations, Next: Index, Prev: Copying This Manual, Up: Top + +Appendix B Translations of This Manual +************************************** + +Nishio Futoshi of the GNUjdoc project has prepared a Japanese +translation of this manual. Its most recent version can be found at +`http://openlab.ring.gr.jp/gnujdoc/cvsweb/cvsweb.cgi/gnujdoc/'. + + +File: diff.info, Node: Index, Prev: Translations, Up: Top + +Appendix C Index +**************** + +�[index�] +* Menu: + +* ! output format: Context. (line 6) +* +- output format: Unified Format. (line 6) +* < output format: Normal. (line 6) +* <<<<<<< for marking conflicts: Marking Conflicts. (line 6) +* _POSIX2_VERSION: Standards conformance. + (line 24) +* aligning tab stops: Tabs. (line 6) +* alternate file names: Alternate Names. (line 6) +* backup file names: Backup Names. (line 6) +* backup file strategy: Backups. (line 6) +* binary file diff: Binary. (line 6) +* blank and tab difference suppression: White Space. (line 6) +* blank line difference suppression: Blank Lines. (line 6) +* brief difference reports: Brief. (line 6) +* bug reports: Bugs. (line 6) +* C function headings: C Function Headings. (line 6) +* C if-then-else output format: If-then-else. (line 6) +* case difference suppression: Case Folding. (line 6) +* ClearCase: Revision Control. (line 6) +* cmp invocation: Invoking cmp. (line 6) +* cmp options: cmp Options. (line 6) +* columnar output: Side by Side. (line 6) +* common mistakes with patches: Avoiding Common Mistakes. + (line 6) +* comparing three files: Comparing Three Files. + (line 6) +* conflict: diff3 Merging. (line 26) +* conflict marking: Marking Conflicts. (line 6) +* context output format: Context. (line 6) +* creating files: Creating and Removing. + (line 6) +* diagnostics from patch: patch Messages. (line 6) +* diff invocation: Invoking diff. (line 6) +* diff merging: Interactive Merging. (line 6) +* diff options: diff Options. (line 6) +* diff sample input: Sample diff Input. (line 6) +* diff3 hunks: diff3 Hunks. (line 6) +* diff3 invocation: Invoking diff3. (line 6) +* diff3 options: diff3 Options. (line 6) +* diff3 sample input: Sample diff3 Input. (line 6) +* directories and patch: patch Directories. (line 6) +* directory structure changes: Changing Structure. (line 6) +* dry runs for patch: Dry Runs. (line 6) +* ed script output format: ed Scripts. (line 6) +* EDITOR: Merge Commands. (line 50) +* empty files, removing: Creating and Removing. + (line 6) +* exabyte, definition of: cmp Options. (line 106) +* exbibyte, definition of: cmp Options. (line 110) +* file name alternates: Alternate Names. (line 6) +* file names with unusual characters: Unusual File Names. (line 6) +* format of diff output: Output Formats. (line 6) +* format of diff3 output: Comparing Three Files. + (line 6) +* formats for if-then-else line groups: Line Group Formats. (line 6) +* forward ed script output format: Forward ed. (line 6) +* full lines: Incomplete Lines. (line 6) +* function headings, C: C Function Headings. (line 6) +* fuzz factor when patching: Inexact. (line 6) +* gibibyte, definition of: cmp Options. (line 89) +* gigabyte, definition of: cmp Options. (line 85) +* headings: Sections. (line 6) +* hunks: Hunks. (line 6) +* hunks for diff3: diff3 Hunks. (line 6) +* if-then-else output format: If-then-else. (line 6) +* ifdef output format: If-then-else. (line 6) +* imperfect patch application: Imperfect. (line 6) +* incomplete line merging: Merging Incomplete Lines. + (line 6) +* incomplete lines: Incomplete Lines. (line 6) +* inexact patches: Inexact. (line 6) +* inhibit messages from patch: More or Fewer Messages. + (line 6) +* interactive merging: Interactive Merging. (line 6) +* introduction: Comparison. (line 6) +* intuiting file names from patches: Multiple Patches. (line 6) +* invoking cmp: Invoking cmp. (line 6) +* invoking diff: Invoking diff. (line 6) +* invoking diff3: Invoking diff3. (line 6) +* invoking patch: Invoking patch. (line 6) +* invoking sdiff: Invoking sdiff. (line 6) +* keyboard input to patch: patch and Keyboard Input. + (line 6) +* kibibyte, definition of: cmp Options. (line 73) +* kilobyte, definition of: cmp Options. (line 68) +* LC_COLLATE: Comparing Directories. + (line 6) +* LC_NUMERIC: Line Group Formats. (line 144) +* LC_TIME: Detailed Context. (line 12) +* line formats: Line Formats. (line 6) +* line group formats: Line Group Formats. (line 6) +* mebibyte, definition of: cmp Options. (line 82) +* megabyte, definition of: cmp Options. (line 78) +* merge commands: Merge Commands. (line 6) +* merged diff3 format: Bypassing ed. (line 6) +* merged output format: If-then-else. (line 6) +* merging from a common ancestor: diff3 Merging. (line 6) +* merging interactively: Merge Commands. (line 6) +* messages from patch: patch Messages. (line 6) +* multibyte characters: Internationalization. + (line 6) +* multiple patches: Multiple Patches. (line 6) +* newline treatment by diff: Incomplete Lines. (line 6) +* normal output format: Normal. (line 6) +* options for cmp: cmp Options. (line 6) +* options for diff: diff Options. (line 6) +* options for diff3: diff3 Options. (line 6) +* options for patch: patch Options. (line 6) +* options for sdiff: sdiff Options. (line 6) +* output formats: Output Formats. (line 6) +* overlap: diff3 Merging. (line 26) +* overlapping change, selection of: Which Changes. (line 6) +* overview of diff and patch: Overview. (line 6) +* paginating diff output: Pagination. (line 6) +* patch consumer tips: Tips for Patch Consumers. + (line 6) +* patch input format: patch Input. (line 6) +* patch invocation: Invoking patch. (line 6) +* patch messages and questions: patch Messages. (line 6) +* patch options: patch Options. (line 6) +* patch producer tips: Tips for Patch Producers. + (line 6) +* patch, common mistakes: Avoiding Common Mistakes. + (line 6) +* PATCH_GET: Revision Control. (line 13) +* PATCH_VERSION_CONTROL: Backup Names. (line 21) +* patches, shrinking: Generating Smaller Patches. + (line 6) +* patching directories: patch Directories. (line 6) +* pebibyte, definition of: cmp Options. (line 103) +* performance of diff: diff Performance. (line 6) +* petabyte, definition of: cmp Options. (line 99) +* POSIX <1>: Standards conformance. + (line 6) +* POSIX: patch and POSIX. (line 6) +* POSIXLY_CORRECT <1>: Standards conformance. + (line 6) +* POSIXLY_CORRECT: patch and POSIX. (line 6) +* projects for directories: Shortcomings. (line 6) +* quoting style: patch Quoting Style. (line 6) +* QUOTING_STYLE: patch Quoting Style. (line 30) +* RCS: Revision Control. (line 6) +* RCS script output format: RCS. (line 6) +* regular expression matching headings: Specified Headings. (line 6) +* regular expression suppression: Specified Lines. (line 6) +* reject file names: Reject Names. (line 6) +* removing empty files: Creating and Removing. + (line 6) +* reporting bugs: Bugs. (line 6) +* reversed patches: Reversed Patches. (line 6) +* revision control: Revision Control. (line 6) +* sample input for diff: Sample diff Input. (line 6) +* sample input for diff3: Sample diff3 Input. (line 6) +* SCCS: Revision Control. (line 6) +* script output formats: Scripts. (line 6) +* sdiff invocation: Invoking sdiff. (line 6) +* sdiff options: sdiff Options. (line 6) +* sdiff output format: sdiff Option Summary. + (line 6) +* section headings: Sections. (line 6) +* side by side: Side by Side. (line 6) +* side by side format: Side by Side Format. (line 6) +* SIMPLE_BACKUP_SUFFIX: Backup Names. (line 12) +* special files: Special Files. (line 6) +* specified headings: Specified Headings. (line 6) +* summarizing which files differ: Brief. (line 6) +* System V diff3 compatibility: Saving the Changed File. + (line 6) +* tab and blank difference suppression: White Space. (line 6) +* tab stop alignment: Tabs. (line 6) +* tebibyte, definition of: cmp Options. (line 96) +* terabyte, definition of: cmp Options. (line 92) +* testing patch: Dry Runs. (line 6) +* text versus binary diff: Binary. (line 6) +* time stamp format, context diffs: Detailed Context. (line 12) +* time stamp format, unified diffs: Detailed Unified. (line 12) +* time stamps on patched files: Patching Time Stamps. + (line 6) +* traditional patch: patch and Tradition. (line 6) +* trailing blanks: Trailing Blanks. (line 6) +* two-column output: Side by Side. (line 6) +* unified output format: Unified Format. (line 6) +* unmerged change: Which Changes. (line 6) +* varying-width characters: Internationalization. + (line 6) +* verbose messages from patch: More or Fewer Messages. + (line 6) +* version control: Revision Control. (line 6) +* VERSION_CONTROL <1>: Backup Names. (line 21) +* VERSION_CONTROL: Revision Control. (line 22) +* white space in patches: Changed White Space. (line 6) +* yottabyte, definition of: cmp Options. (line 121) +* zettabyte, definition of: cmp Options. (line 113) + + + +Tag Table: +Node: Top1675 +Node: Overview4135 +Node: Comparison7759 +Node: Hunks10457 +Node: White Space11895 +Node: Blank Lines13623 +Node: Specified Lines14653 +Node: Case Folding15775 +Node: Brief16187 +Node: Binary17506 +Node: Output Formats21591 +Node: Sample diff Input22311 +Node: Context23805 +Node: Context Format25377 +Node: Example Context26164 +Node: Less Context27666 +Node: Detailed Context28850 +Node: Unified Format31043 +Node: Example Unified31834 +Node: Detailed Unified32867 +Node: Sections34509 +Node: Specified Headings35263 +Node: C Function Headings36812 +Node: Alternate Names37654 +Node: Side by Side38563 +Node: Side by Side Format40707 +Node: Example Side by Side41605 +Node: Normal42940 +Node: Example Normal43935 +Node: Detailed Normal44666 +Node: Scripts46400 +Node: ed Scripts46800 +Node: Example ed48002 +Node: Detailed ed48447 +Node: Forward ed50201 +Node: RCS50972 +Node: If-then-else52184 +Node: Line Group Formats53857 +Node: Line Formats59728 +Node: Example If-then-else62993 +Node: Detailed If-then-else64067 +Node: Incomplete Lines65945 +Node: Comparing Directories67577 +Node: Adjusting Output71621 +Node: Tabs72123 +Node: Trailing Blanks73733 +Node: Pagination74954 +Node: diff Performance75418 +Node: Comparing Three Files78501 +Node: Sample diff3 Input79374 +Node: Example diff3 Normal80317 +Node: Detailed diff3 Normal81362 +Node: diff3 Hunks83117 +Node: diff3 Merging84408 +Node: Which Changes86647 +Node: Marking Conflicts88046 +Node: Bypassing ed90500 +Node: Merging Incomplete Lines91839 +Node: Saving the Changed File92560 +Node: Interactive Merging93171 +Node: sdiff Option Summary93876 +Node: Merge Commands95047 +Node: Merging with patch96331 +Node: patch Input98698 +Node: Revision Control99375 +Node: Imperfect100541 +Node: Changed White Space101684 +Node: Reversed Patches102476 +Node: Inexact103936 +Node: Dry Runs107490 +Node: Creating and Removing108349 +Node: Patching Time Stamps109395 +Node: Multiple Patches111593 +Node: patch Directories114251 +Node: Backups115872 +Node: Backup Names116933 +Ref: Backup Names-Footnote-1119897 +Node: Reject Names120024 +Node: patch Messages120608 +Node: More or Fewer Messages121663 +Node: patch and Keyboard Input122289 +Node: patch Quoting Style123315 +Node: patch and POSIX124460 +Node: patch and Tradition125295 +Node: Making Patches128747 +Node: Tips for Patch Producers129568 +Node: Tips for Patch Consumers130819 +Node: Avoiding Common Mistakes131451 +Node: Generating Smaller Patches133971 +Node: Invoking cmp135727 +Node: cmp Options137145 +Node: Invoking diff140632 +Node: diff Options142485 +Node: Invoking diff3150912 +Node: diff3 Options151545 +Node: Invoking patch154573 +Node: patch Options155776 +Node: Invoking sdiff160998 +Node: sdiff Options162140 +Node: Standards conformance165015 +Node: Projects166756 +Node: Shortcomings167462 +Node: Internationalization168559 +Node: Changing Structure169720 +Node: Special Files170819 +Node: Unusual File Names171926 +Node: Time Stamp Order172560 +Node: Ignoring Changes173198 +Node: Speedups173963 +Node: Bugs174422 +Node: Copying This Manual175270 +Node: Translations200404 +Node: Index200771 + +End Tag Table diff --git a/doc/diff.texi b/doc/diff.texi new file mode 100644 index 0000000..c933934 --- /dev/null +++ b/doc/diff.texi @@ -0,0 +1,4682 @@ +\input texinfo @c -*-texinfo-*- +@comment %**start of header +@setfilename diff.info +@include version.texi +@settitle Comparing and Merging Files +@syncodeindex vr cp +@setchapternewpage odd +@comment %**end of header +@copying +This manual is for GNU Diffutils +(version @value{VERSION}, @value{UPDATED}), +and documents the @acronym{GNU} @command{diff}, @command{diff3}, +@command{sdiff}, and @command{cmp} commands for showing the +differences between files and the @acronym{GNU} @command{patch} command for +using their output to update files. + +Copyright @copyright{} 1992-1994, 1998, 2001-2002, 2004, 2006, 2009-2010 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, 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.'' +@end quotation +@end copying + +@c Debian install-info (up through at least version 1.9.20) uses only the +@c first dircategory. Put this one first, as it is more useful in practice. +@dircategory Individual utilities +@direntry +* cmp: (diff)Invoking cmp. Compare 2 files byte by byte. +* diff: (diff)Invoking diff. Compare 2 files line by line. +* diff3: (diff)Invoking diff3. Compare 3 files line by line. +* patch: (diff)Invoking patch. Apply a patch to a file. +* sdiff: (diff)Invoking sdiff. Merge 2 files side-by-side. +@end direntry + +@dircategory Text creation and manipulation +@direntry +* Diff: (diff). Comparing and merging files. +@end direntry + +@titlepage +@title Comparing and Merging Files +@subtitle for Diffutils @value{VERSION} and @code{patch} 2.5.4 +@subtitle @value{UPDATED} +@author David MacKenzie, Paul Eggert, and Richard Stallman +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@shortcontents +@contents + +@ifnottex +@node Top +@top Comparing and Merging Files + +@insertcopying +@end ifnottex + +@menu +* Overview:: Preliminary information. +* Comparison:: What file comparison means. + +* Output Formats:: Formats for two-way difference reports. +* Incomplete Lines:: Lines that lack trailing newlines. +* Comparing Directories:: Comparing files and directories. +* Adjusting Output:: Making @command{diff} output prettier. +* diff Performance:: Making @command{diff} smarter or faster. + +* Comparing Three Files:: Formats for three-way difference reports. +* diff3 Merging:: Merging from a common ancestor. + +* Interactive Merging:: Interactive merging with @command{sdiff}. + +* Merging with patch:: Using @command{patch} to change old files into new ones. +* Making Patches:: Tips for making and using patch distributions. + +* Invoking cmp:: Compare two files byte by byte. +* Invoking diff:: Compare two files line by line. +* Invoking diff3:: Compare three files line by line. +* Invoking patch:: Apply a diff file to an original. +* Invoking sdiff:: Side-by-side merge of file differences. + +* Standards conformance:: Conformance to the @acronym{POSIX} standard. +* Projects:: If you've found a bug or other shortcoming. + +* Copying This Manual:: How to make copies of this manual. +* Translations:: Available translations of this manual. +* Index:: Index. +@end menu + +@node Overview +@unnumbered Overview +@cindex overview of @command{diff} and @command{patch} + +Computer users often find occasion to ask how two files differ. Perhaps +one file is a newer version of the other file. Or maybe the two files +started out as identical copies but were changed by different people. + +You can use the @command{diff} command to show differences between two +files, or each corresponding file in two directories. @command{diff} +outputs differences between files line by line in any of several +formats, selectable by command line options. This set of differences is +often called a @dfn{diff} or @dfn{patch}. For files that are identical, +@command{diff} normally produces no output; for binary (non-text) files, +@command{diff} normally reports only that they are different. + +You can use the @command{cmp} command to show the byte and line numbers +where two files differ. @command{cmp} can also show all the bytes +that differ between the two files, side by side. A way to compare +two files character by character is the Emacs command @kbd{M-x +compare-windows}. @xref{Other Window, , Other Window, emacs, The @acronym{GNU} +Emacs Manual}, for more information on that command. + +You can use the @command{diff3} command to show differences among three +files. When two people have made independent changes to a common +original, @command{diff3} can report the differences between the original +and the two changed versions, and can produce a merged file that +contains both persons' changes together with warnings about conflicts. + +You can use the @command{sdiff} command to merge two files interactively. + +You can use the set of differences produced by @command{diff} to distribute +updates to text files (such as program source code) to other people. +This method is especially useful when the differences are small compared +to the complete files. Given @command{diff} output, you can use the +@command{patch} program to update, or @dfn{patch}, a copy of the file. If you +think of @command{diff} as subtracting one file from another to produce +their difference, you can think of @command{patch} as adding the difference +to one file to reproduce the other. + +This manual first concentrates on making diffs, and later shows how to +use diffs to update files. + +@acronym{GNU} @command{diff} was written by Paul Eggert, Mike Haertel, +David Hayes, Richard Stallman, and Len Tower. Wayne Davison designed and +implemented the unified output format. The basic algorithm is described +by Eugene W. Myers in ``An O(ND) Difference Algorithm and its Variations'', +@cite{Algorithmica} Vol.@: 1 No.@: 2, 1986, pp.@: 251--266; and in ``A File +Comparison Program'', Webb Miller and Eugene W. Myers, +@cite{Software---Practice and Experience} Vol.@: 15 No.@: 11, 1985, +pp.@: 1025--1040. +@c From: "Gene Myers" <gene@cs.arizona.edu> +@c They are about the same basic algorithm; the Algorithmica +@c paper gives a rigorous treatment and the sub-algorithm for +@c delivering scripts and should be the primary reference, but +@c both should be mentioned. +The algorithm was independently discovered as described by E. Ukkonen in +``Algorithms for Approximate String Matching'', +@cite{Information and Control} Vol.@: 64, 1985, pp.@: 100--118. +@c From: "Gene Myers" <gene@cs.arizona.edu> +@c Date: Wed, 29 Sep 1993 08:27:55 MST +@c Ukkonen should be given credit for also discovering the algorithm used +@c in GNU diff. +Unless the @option{--minimal} option is used, @command{diff} uses a +heuristic by Paul Eggert that limits the cost to @math{O(N^1.5 log N)} +at the price of producing suboptimal output for large inputs with many +differences. Related algorithms are surveyed by Alfred V. Aho in +section 6.3 of ``Algorithms for Finding Patterns in Strings'', +@cite{Handbook of Theoretical Computer Science} (Jan Van Leeuwen, +ed.), Vol.@: A, @cite{Algorithms and Complexity}, Elsevier/MIT Press, +1990, pp.@: 255--300. + +@acronym{GNU} @command{diff3} was written by Randy Smith. @acronym{GNU} +@command{sdiff} was written by Thomas Lord. @acronym{GNU} @command{cmp} +was written by Torbj@"orn Granlund and David MacKenzie. + +@acronym{GNU} @command{patch} was written mainly by Larry Wall and Paul Eggert; +several @acronym{GNU} enhancements were contributed by Wayne Davison and +David MacKenzie. Parts of this manual are adapted from a manual page +written by Larry Wall, with his permission. + +@node Comparison +@chapter What Comparison Means +@cindex introduction + +There are several ways to think about the differences between two files. +One way to think of the differences is as a series of lines that were +deleted from, inserted in, or changed in one file to produce the other +file. @command{diff} compares two files line by line, finds groups of +lines that differ, and reports each group of differing lines. It can +report the differing lines in several formats, which have different +purposes. + +@acronym{GNU} @command{diff} can show whether files are different +without detailing the differences. It also provides ways to suppress +certain kinds of differences that are not important to you. Most +commonly, such differences are changes in the amount of white space +between words or lines. @command{diff} also provides ways to suppress +differences in alphabetic case or in lines that match a regular +expression that you provide. These options can accumulate; for +example, you can ignore changes in both white space and alphabetic +case. + +Another way to think of the differences between two files is as a +sequence of pairs of bytes that can be either identical or +different. @command{cmp} reports the differences between two files +byte by byte, instead of line by line. As a result, it is often +more useful than @command{diff} for comparing binary files. For text +files, @command{cmp} is useful mainly when you want to know only whether +two files are identical, or whether one file is a prefix of the other. + +To illustrate the effect that considering changes byte by byte +can have compared with considering them line by line, think of what +happens if a single newline character is added to the beginning of a +file. If that file is then compared with an otherwise identical file +that lacks the newline at the beginning, @command{diff} will report that a +blank line has been added to the file, while @command{cmp} will report that +almost every byte of the two files differs. + +@command{diff3} normally compares three input files line by line, finds +groups of lines that differ, and reports each group of differing lines. +Its output is designed to make it easy to inspect two different sets of +changes to the same file. + +@menu +* Hunks:: Groups of differing lines. +* White Space:: Suppressing differences in white space. +* Blank Lines:: Suppressing differences whose lines are all blank. +* Specified Lines:: Suppressing differences whose lines all match a pattern. +* Case Folding:: Suppressing differences in alphabetic case. +* Brief:: Summarizing which files are different. +* Binary:: Comparing binary files or forcing text comparisons. +@end menu + +@node Hunks +@section Hunks +@cindex hunks + +When comparing two files, @command{diff} finds sequences of lines common to +both files, interspersed with groups of differing lines called +@dfn{hunks}. Comparing two identical files yields one sequence of +common lines and no hunks, because no lines differ. Comparing two +entirely different files yields no common lines and one large hunk that +contains all lines of both files. In general, there are many ways to +match up lines between two given files. @command{diff} tries to minimize +the total hunk size by finding large sequences of common lines +interspersed with small hunks of differing lines. + +For example, suppose the file @file{F} contains the three lines +@samp{a}, @samp{b}, @samp{c}, and the file @file{G} contains the same +three lines in reverse order @samp{c}, @samp{b}, @samp{a}. If +@command{diff} finds the line @samp{c} as common, then the command +@samp{diff F G} produces this output: + +@example +1,2d0 +< a +< b +3a2,3 +> b +> a +@end example + +@noindent +But if @command{diff} notices the common line @samp{b} instead, it produces +this output: + +@example +1c1 +< a +--- +> c +3c3 +< c +--- +> a +@end example + +@noindent +It is also possible to find @samp{a} as the common line. @command{diff} +does not always find an optimal matching between the files; it takes +shortcuts to run faster. But its output is usually close to the +shortest possible. You can adjust this tradeoff with the +@option{-d} or @option{--minimal} option (@pxref{diff Performance}). + +@node White Space +@section Suppressing Differences in Blank and Tab Spacing +@cindex blank and tab difference suppression +@cindex tab and blank difference suppression + +The @option{-E} or @option{--ignore-tab-expansion} option ignores the +distinction between tabs and spaces on input. A tab is considered to be +equivalent to the number of spaces to the next tab stop (@pxref{Tabs}). + +The @option{-b} or @option{--ignore-space-change} option is stronger. +It ignores white space at line end, and considers all other sequences of +one or more white space characters within a line to be equivalent. With this +option, @command{diff} considers the following two lines to be equivalent, +where @samp{$} denotes the line end: + +@example +Here lyeth muche rychnesse in lytell space. -- John Heywood$ +Here lyeth muche rychnesse in lytell space. -- John Heywood $ +@end example + +The @option{-w} or @option{--ignore-all-space} option is stronger still. +It ignores differences even if one line has white space where +the other line has none. @dfn{White space} characters include +tab, vertical tab, form feed, carriage return, and space; +some locales may define additional characters to be white space. +With this option, @command{diff} considers the +following two lines to be equivalent, where @samp{$} denotes the line +end and @samp{^M} denotes a carriage return: + +@example +Here lyeth muche rychnesse in lytell space.-- John Heywood$ + He relyeth much erychnes seinly tells pace. --John Heywood ^M$ +@end example + +For many other programs newline is also a white space character, but +@command{diff} is a line-oriented program and a newline character +always ends a line. Hence the @option{-w} or +@option{--ignore-all-space} option does not ignore newline-related +changes; it ignores only other white space changes. + +@node Blank Lines +@section Suppressing Differences Whose Lines Are All Blank +@cindex blank line difference suppression + +The @option{-B} or @option{--ignore-blank-lines} option ignores changes +that consist entirely of blank lines. With this option, for example, a +file containing +@example +1. A point is that which has no part. + +2. A line is breadthless length. +-- Euclid, The Elements, I +@end example +@noindent +is considered identical to a file containing +@example +1. A point is that which has no part. +2. A line is breadthless length. + + +-- Euclid, The Elements, I +@end example + +Normally this option affects only lines that are completely empty, but +if you also specify the @option{-b} or @option{--ignore-space-change} +option, or the @option{-w} or @option{--ignore-all-space} option, +lines are also affected if they look empty but contain white space. +In other words, @option{-B} is equivalent to @samp{-I '^$'} by +default, but it is equivalent to @option{-I '^[[:space:]]*$'} if +@option{-b} or @option{-w} is also specified. + +@node Specified Lines +@section Suppressing Differences Whose Lines All Match a Regular Expression +@cindex regular expression suppression + +To ignore insertions and deletions of lines that match a +@command{grep}-style regular expression, use the @option{-I +@var{regexp}} or @option{--ignore-matching-lines=@var{regexp}} option. +You should escape +regular expressions that contain shell metacharacters to prevent the +shell from expanding them. For example, @samp{diff -I '^[[:digit:]]'} ignores +all changes to lines beginning with a digit. + +However, @option{-I} only ignores the insertion or deletion of lines that +contain the regular expression if every changed line in the hunk---every +insertion and every deletion---matches the regular expression. In other +words, for each nonignorable change, @command{diff} prints the complete set +of changes in its vicinity, including the ignorable ones. + +You can specify more than one regular expression for lines to ignore by +using more than one @option{-I} option. @command{diff} tries to match each +line against each regular expression. + +@node Case Folding +@section Suppressing Case Differences +@cindex case difference suppression + +@acronym{GNU} @command{diff} can treat lower case letters as +equivalent to their upper case counterparts, so that, for example, it +considers @samp{Funky Stuff}, @samp{funky STUFF}, and @samp{fUNKy +stuFf} to all be the same. To request this, use the @option{-i} or +@option{--ignore-case} option. + +@node Brief +@section Summarizing Which Files Differ +@cindex summarizing which files differ +@cindex brief difference reports + +When you only want to find out whether files are different, and you +don't care what the differences are, you can use the summary output +format. In this format, instead of showing the differences between the +files, @command{diff} simply reports whether files differ. The @option{-q} +or @option{--brief} option selects this output format. + +This format is especially useful when comparing the contents of two +directories. It is also much faster than doing the normal line by line +comparisons, because @command{diff} can stop analyzing the files as soon as +it knows that there are any differences. + +You can also get a brief indication of whether two files differ by using +@command{cmp}. For files that are identical, @command{cmp} produces no +output. When the files differ, by default, @command{cmp} outputs the byte +and line number where the first difference occurs, or reports that one +file is a prefix of the other. You can use +the @option{-s}, @option{--quiet}, or @option{--silent} option to +suppress that information, so that @command{cmp} +produces no output and reports whether the files differ using only its +exit status (@pxref{Invoking cmp}). + +@c Fix this. +Unlike @command{diff}, @command{cmp} cannot compare directories; it can only +compare two files. + +@node Binary +@section Binary Files and Forcing Text Comparisons +@cindex binary file diff +@cindex text versus binary diff + +If @command{diff} thinks that either of the two files it is comparing is +binary (a non-text file), it normally treats that pair of files much as +if the summary output format had been selected (@pxref{Brief}), and +reports only that the binary files are different. This is because line +by line comparisons are usually not meaningful for binary files. + +@command{diff} determines whether a file is text or binary by checking the +first few bytes in the file; the exact number of bytes is system +dependent, but it is typically several thousand. If every byte in +that part of the file is non-null, @command{diff} considers the file to be +text; otherwise it considers the file to be binary. + +Sometimes you might want to force @command{diff} to consider files to be +text. For example, you might be comparing text files that contain +null characters; @command{diff} would erroneously decide that those are +non-text files. Or you might be comparing documents that are in a +format used by a word processing system that uses null characters to +indicate special formatting. You can force @command{diff} to consider all +files to be text files, and compare them line by line, by using the +@option{-a} or @option{--text} option. If the files you compare using this +option do not in fact contain text, they will probably contain few +newline characters, and the @command{diff} output will consist of hunks +showing differences between long lines of whatever characters the files +contain. + +You can also force @command{diff} to report only whether files differ +(but not how). Use the @option{-q} or @option{--brief} option for +this. + +Normally, differing binary files count as trouble because the +resulting @command{diff} output does not capture all the differences. +This trouble causes @command{diff} to exit with status 2. However, +this trouble cannot occur with the @option{-a} or @option{--text} +option, or with the @option{-q} or @option{--brief} option, as these +options both cause @command{diff} to generate a form of output that +represents differences as requested. + +In operating systems that distinguish between text and binary files, +@command{diff} normally reads and writes all data as text. Use the +@option{--binary} option to force @command{diff} to read and write binary +data instead. This option has no effect on a @acronym{POSIX}-compliant system +like @acronym{GNU} or traditional Unix. However, many personal computer +operating systems represent the end of a line with a carriage return +followed by a newline. On such systems, @command{diff} normally ignores +these carriage returns on input and generates them at the end of each +output line, but with the @option{--binary} option @command{diff} treats +each carriage return as just another input character, and does not +generate a carriage return at the end of each output line. This can be +useful when dealing with non-text files that are meant to be +interchanged with @acronym{POSIX}-compliant systems. + +The @option{--strip-trailing-cr} causes @command{diff} to treat input +lines that end in carriage return followed by newline as if they end +in plain newline. This can be useful when comparing text that is +imperfectly imported from many personal computer operating systems. +This option affects how lines are read, which in turn affects how they +are compared and output. + +If you want to compare two files byte by byte, you can use the +@command{cmp} program with the @option{-l} or @option{--verbose} +option to show the values of each differing byte in the two files. +With @acronym{GNU} @command{cmp}, you can also use the @option{-b} or +@option{--print-bytes} option to show the @acronym{ASCII} representation of +those bytes. @xref{Invoking cmp}, for more information. + +If @command{diff3} thinks that any of the files it is comparing is binary +(a non-text file), it normally reports an error, because such +comparisons are usually not useful. @command{diff3} uses the same test as +@command{diff} to decide whether a file is binary. As with @command{diff}, if +the input files contain a few non-text bytes but otherwise are like +text files, you can force @command{diff3} to consider all files to be text +files and compare them line by line by using the @option{-a} or +@option{--text} option. + +@node Output Formats +@chapter @command{diff} Output Formats +@cindex output formats +@cindex format of @command{diff} output + +@command{diff} has several mutually exclusive options for output format. +The following sections describe each format, illustrating how +@command{diff} reports the differences between two sample input files. + +@menu +* Sample diff Input:: Sample @command{diff} input files for examples. +* Context:: Showing differences with the surrounding text. +* Side by Side:: Showing differences in two columns. +* Normal:: Showing differences without surrounding text. +* Scripts:: Generating scripts for other programs. +* If-then-else:: Merging files with if-then-else. +@end menu + +@node Sample diff Input +@section Two Sample Input Files +@cindex @command{diff} sample input +@cindex sample input for @command{diff} + +Here are two sample files that we will use in numerous examples to +illustrate the output of @command{diff} and how various options can change +it. + +This is the file @file{lao}: + +@example +The Way that can be told of is not the eternal Way; +The name that can be named is not the eternal name. +The Nameless is the origin of Heaven and Earth; +The Named is the mother of all things. +Therefore let there always be non-being, + so we may see their subtlety, +And let there always be being, + so we may see their outcome. +The two are the same, +But after they are produced, + they have different names. +@end example + +This is the file @file{tzu}: + +@example +The Nameless is the origin of Heaven and Earth; +The named is the mother of all things. + +Therefore let there always be non-being, + so we may see their subtlety, +And let there always be being, + so we may see their outcome. +The two are the same, +But after they are produced, + they have different names. +They both may be called deep and profound. +Deeper and more profound, +The door of all subtleties! +@end example + +In this example, the first hunk contains just the first two lines of +@file{lao}, the second hunk contains the fourth line of @file{lao} +opposing the second and third lines of @file{tzu}, and the last hunk +contains just the last three lines of @file{tzu}. + +@node Context +@section Showing Differences in Their Context +@cindex context output format +@cindex @samp{!} output format + +Usually, when you are looking at the differences between files, you will +also want to see the parts of the files near the lines that differ, to +help you understand exactly what has changed. These nearby parts of the +files are called the @dfn{context}. + +@acronym{GNU} @command{diff} provides two output formats that show context +around the differing lines: @dfn{context format} and @dfn{unified +format}. It can optionally show in which function or section of the +file the differing lines are found. + +If you are distributing new versions of files to other people in the +form of @command{diff} output, you should use one of the output formats +that show context so that they can apply the diffs even if they have +made small changes of their own to the files. @command{patch} can apply +the diffs in this case by searching in the files for the lines of +context around the differing lines; if those lines are actually a few +lines away from where the diff says they are, @command{patch} can adjust +the line numbers accordingly and still apply the diff correctly. +@xref{Imperfect}, for more information on using @command{patch} to apply +imperfect diffs. + +@menu +* Context Format:: An output format that shows surrounding lines. +* Unified Format:: A more compact output format that shows context. +* Sections:: Showing which sections of the files differences are in. +* Alternate Names:: Showing alternate file names in context headers. +@end menu + +@node Context Format +@subsection Context Format + +The context output format shows several lines of context around the +lines that differ. It is the standard format for distributing updates +to source code. + +To select this output format, use the @option{-C @var{lines}}, +@option{--context@r{[}=@var{lines}@r{]}}, or @option{-c} option. The +argument @var{lines} that some of these options take is the number of +lines of context to show. If you do not specify @var{lines}, it +defaults to three. For proper operation, @command{patch} typically needs +at least two lines of context. + +@menu +* Example Context:: Sample output in context format. +* Less Context:: Another sample with less context. +* Detailed Context:: A detailed description of the context output format. +@end menu + +@node Example Context +@subsubsection An Example of Context Format + +Here is the output of @samp{diff -c lao tzu} (@pxref{Sample diff Input}, +for the complete contents of the two files). Notice that up to three +lines that are not different are shown around each line that is +different; they are the context lines. Also notice that the first two +hunks have run together, because their contents overlap. + +@example +*** lao 2002-02-21 23:30:39.942229878 -0800 +--- tzu 2002-02-21 23:30:50.442260588 -0800 +*************** +*** 1,7 **** +- The Way that can be told of is not the eternal Way; +- The name that can be named is not the eternal name. + The Nameless is the origin of Heaven and Earth; +! The Named is the mother of all things. + Therefore let there always be non-being, + so we may see their subtlety, + And let there always be being, +--- 1,6 ---- + The Nameless is the origin of Heaven and Earth; +! The named is the mother of all things. +! @- + Therefore let there always be non-being, + so we may see their subtlety, + And let there always be being, +*************** +*** 9,11 **** +--- 8,13 ---- + The two are the same, + But after they are produced, + they have different names. ++ They both may be called deep and profound. ++ Deeper and more profound, ++ The door of all subtleties! +@end example + +@node Less Context +@subsubsection An Example of Context Format with Less Context + +Here is the output of @samp{diff -C 1 lao tzu} (@pxref{Sample diff +Input}, for the complete contents of the two files). Notice that at +most one context line is reported here. + +@example +*** lao 2002-02-21 23:30:39.942229878 -0800 +--- tzu 2002-02-21 23:30:50.442260588 -0800 +*************** +*** 1,5 **** +- The Way that can be told of is not the eternal Way; +- The name that can be named is not the eternal name. + The Nameless is the origin of Heaven and Earth; +! The Named is the mother of all things. + Therefore let there always be non-being, +--- 1,4 ---- + The Nameless is the origin of Heaven and Earth; +! The named is the mother of all things. +! @- + Therefore let there always be non-being, +*************** +*** 11 **** +--- 10,13 ---- + they have different names. ++ They both may be called deep and profound. ++ Deeper and more profound, ++ The door of all subtleties! +@end example + +@node Detailed Context +@subsubsection Detailed Description of Context Format + +The context output format starts with a two-line header, which looks +like this: + +@example +*** @var{from-file} @var{from-file-modification-time} +--- @var{to-file} @var{to-file-modification time} +@end example + +@noindent +@vindex LC_TIME +@cindex time stamp format, context diffs +The time stamp normally looks like @samp{2002-02-21 23:30:39.942229878 +-0800} to indicate the date, time with fractional seconds, and time +zone in @uref{ftp://ftp.isi.edu/in-notes/rfc2822.txt, Internet RFC +2822 format}. (The fractional seconds are omitted on hosts that do +not support fractional time stamps.) However, a traditional time +stamp like @samp{Thu Feb 21 23:30:39 2002} is used if the +@env{LC_TIME} locale category is either @samp{C} or @samp{POSIX}. + +You can change the header's content with the +@option{--label=@var{label}} option; see @ref{Alternate Names}. + +Next come one or more hunks of differences; each hunk shows one area +where the files differ. Context format hunks look like this: + +@example +*************** +*** @var{from-file-line-numbers} **** + @var{from-file-line} + @var{from-file-line}@dots{} +--- @var{to-file-line-numbers} ---- + @var{to-file-line} + @var{to-file-line}@dots{} +@end example + +If a hunk contains two or more lines, its line numbers look like +@samp{@var{start},@var{end}}. Otherwise only its end line number +appears. An empty hunk is considered to end at the line that precedes +the hunk. + +The lines of context around the lines that differ start with two space +characters. The lines that differ between the two files start with one +of the following indicator characters, followed by a space character: + +@table @samp +@item ! +A line that is part of a group of one or more lines that changed between +the two files. There is a corresponding group of lines marked with +@samp{!} in the part of this hunk for the other file. + +@item + +An ``inserted'' line in the second file that corresponds to nothing in +the first file. + +@item - +A ``deleted'' line in the first file that corresponds to nothing in the +second file. +@end table + +If all of the changes in a hunk are insertions, the lines of +@var{from-file} are omitted. If all of the changes are deletions, the +lines of @var{to-file} are omitted. + +@node Unified Format +@subsection Unified Format +@cindex unified output format +@cindex @samp{+-} output format + +The unified output format is a variation on the context format that is +more compact because it omits redundant context lines. To select this +output format, use the @option{-U @var{lines}}, +@option{--unified@r{[}=@var{lines}@r{]}}, or @option{-u} +option. The argument @var{lines} is the number of lines of context to +show. When it is not given, it defaults to three. + +At present, only @acronym{GNU} @command{diff} can produce this format and +only @acronym{GNU} @command{patch} can automatically apply diffs in this +format. For proper operation, @command{patch} typically needs at +least three lines of context. + +@menu +* Example Unified:: Sample output in unified format. +* Detailed Unified:: A detailed description of unified format. +@end menu + +@node Example Unified +@subsubsection An Example of Unified Format + +Here is the output of the command @samp{diff -u lao tzu} +(@pxref{Sample diff Input}, for the complete contents of the two files): + +@example +--- lao 2002-02-21 23:30:39.942229878 -0800 ++++ tzu 2002-02-21 23:30:50.442260588 -0800 +@@@@ -1,7 +1,6 @@@@ +-The Way that can be told of is not the eternal Way; +-The name that can be named is not the eternal name. + The Nameless is the origin of Heaven and Earth; +-The Named is the mother of all things. ++The named is the mother of all things. ++ + Therefore let there always be non-being, + so we may see their subtlety, + And let there always be being, +@@@@ -9,3 +8,6 @@@@ + The two are the same, + But after they are produced, + they have different names. ++They both may be called deep and profound. ++Deeper and more profound, ++The door of all subtleties! +@end example + +@node Detailed Unified +@subsubsection Detailed Description of Unified Format + +The unified output format starts with a two-line header, which looks +like this: + +@example +--- @var{from-file} @var{from-file-modification-time} ++++ @var{to-file} @var{to-file-modification-time} +@end example + +@noindent +@cindex time stamp format, unified diffs +The time stamp looks like @samp{2002-02-21 23:30:39.942229878 -0800} +to indicate the date, time with fractional seconds, and time zone. +The fractional seconds are omitted on hosts that do not support +fractional time stamps. + +You can change the header's content with the +@option{--label=@var{label}} option; see @xref{Alternate Names}. + +Next come one or more hunks of differences; each hunk shows one area +where the files differ. Unified format hunks look like this: + +@example +@@@@ @var{from-file-line-numbers} @var{to-file-line-numbers} @@@@ + @var{line-from-either-file} + @var{line-from-either-file}@dots{} +@end example + +If a hunk contains just one line, only its start line number appears. +Otherwise its line numbers look like @samp{@var{start},@var{count}}. +An empty hunk is considered to start at the line that follows the hunk. + +If a hunk and its context contain two or more lines, its +line numbers look like @samp{@var{start},@var{count}}. Otherwise only +its end line number appears. An empty hunk is considered to end at +the line that precedes the hunk. + +The lines common to both files begin with a space character. The lines +that actually differ between the two files have one of the following +indicator characters in the left print column: + +@table @samp +@item + +A line was added here to the first file. + +@item - +A line was removed here from the first file. +@end table + +@node Sections +@subsection Showing Which Sections Differences Are in +@cindex headings +@cindex section headings + +Sometimes you might want to know which part of the files each change +falls in. If the files are source code, this could mean which +function was changed. If the files are documents, it could mean which +chapter or appendix was changed. @acronym{GNU} @command{diff} can +show this by displaying the nearest section heading line that precedes +the differing lines. Which lines are ``section headings'' is +determined by a regular expression. + +@menu +* Specified Headings:: Showing headings that match regular expressions. +* C Function Headings:: Showing headings of C functions. +@end menu + +@node Specified Headings +@subsubsection Showing Lines That Match Regular Expressions +@cindex specified headings +@cindex regular expression matching headings + +To show in which sections differences occur for files that are not +source code for C or similar languages, use the @option{-F @var{regexp}} +or @option{--show-function-line=@var{regexp}} option. @command{diff} +considers lines that match the @command{grep}-style regular expression +@var{regexp} to be the beginning +of a section of the file. Here are suggested regular expressions for +some common languages: + +@c Please add to this list, e.g. Fortran, Pascal, Perl, Python. +@table @samp +@item ^[[:alpha:]$_] +C, C++, Prolog +@item ^( +Lisp +@item ^@@node +Texinfo +@end table + +This option does not automatically select an output format; in order to +use it, you must select the context format (@pxref{Context Format}) or +unified format (@pxref{Unified Format}). In other output formats it +has no effect. + +The @option{-F} or @option{--show-function-line} option finds the nearest +unchanged line that precedes each hunk of differences and matches the +given regular expression. Then it adds that line to the end of the +line of asterisks in the context format, or to the @samp{@@@@} line in +unified format. If no matching line exists, this option leaves the output for +that hunk unchanged. If that line is more than 40 characters long, it +outputs only the first 40 characters. You can specify more than one +regular expression for such lines; @command{diff} tries to match each line +against each regular expression, starting with the last one given. This +means that you can use @option{-p} and @option{-F} together, if you wish. + +@node C Function Headings +@subsubsection Showing C Function Headings +@cindex C function headings +@cindex function headings, C + +To show in which functions differences occur for C and similar +languages, you can use the @option{-p} or @option{--show-c-function} option. +This option automatically defaults to the context output format +(@pxref{Context Format}), with the default number of lines of context. +You can override that number with @option{-C @var{lines}} elsewhere in the +command line. You can override both the format and the number with +@option{-U @var{lines}} elsewhere in the command line. + +The @option{-p} or @option{--show-c-function} option is equivalent to +@option{-F '^[[:alpha:]$_]'} if the unified format is specified, otherwise +@option{-c -F '^[[:alpha:]$_]'} (@pxref{Specified Headings}). @acronym{GNU} +@command{diff} provides this option for the sake of convenience. + +@node Alternate Names +@subsection Showing Alternate File Names +@cindex alternate file names +@cindex file name alternates + +If you are comparing two files that have meaningless or uninformative +names, you might want @command{diff} to show alternate names in the header +of the context and unified output formats. To do this, use the +@option{--label=@var{label}} option. The first time +you give this option, its argument replaces the name and date of the +first file in the header; the second time, its argument replaces the +name and date of the second file. If you give this option more than +twice, @command{diff} reports an error. The @option{--label} option does not +affect the file names in the @command{pr} header when the @option{-l} or +@option{--paginate} option is used (@pxref{Pagination}). + +Here are the first two lines of the output from @samp{diff -C 2 +--label=original --label=modified lao tzu}: + +@example +*** original +--- modified +@end example + +@node Side by Side +@section Showing Differences Side by Side +@cindex side by side +@cindex two-column output +@cindex columnar output + +@command{diff} can produce a side by side difference listing of two files. +The files are listed in two columns with a gutter between them. The +gutter contains one of the following markers: + +@table @asis +@item white space +The corresponding lines are in common. That is, either the lines are +identical, or the difference is ignored because of one of the +@option{--ignore} options (@pxref{White Space}). + +@item @samp{|} +The corresponding lines differ, and they are either both complete +or both incomplete. + +@item @samp{<} +The files differ and only the first file contains the line. + +@item @samp{>} +The files differ and only the second file contains the line. + +@item @samp{(} +Only the first file contains the line, but the difference is ignored. + +@item @samp{)} +Only the second file contains the line, but the difference is ignored. + +@item @samp{\} +The corresponding lines differ, and only the first line is incomplete. + +@item @samp{/} +The corresponding lines differ, and only the second line is incomplete. +@end table + +Normally, an output line is incomplete if and only if the lines that it +contains are incomplete; @xref{Incomplete Lines}. However, when an +output line represents two differing lines, one might be incomplete +while the other is not. In this case, the output line is complete, +but its the gutter is marked @samp{\} if the first line is incomplete, +@samp{/} if the second line is. + +Side by side format is sometimes easiest to read, but it has limitations. +It generates much wider output than usual, and truncates lines that are +too long to fit. Also, it relies on lining up output more heavily than +usual, so its output looks particularly bad if you use varying +width fonts, nonstandard tab stops, or nonprinting characters. + +You can use the @command{sdiff} command to interactively merge side by side +differences. @xref{Interactive Merging}, for more information on merging files. + +@menu +* Side by Side Format:: Controlling side by side output format. +* Example Side by Side:: Sample side by side output. +@end menu + +@node Side by Side Format +@subsection Controlling Side by Side Format +@cindex side by side format + +The @option{-y} or @option{--side-by-side} option selects side by side +format. Because side by side output lines contain two input lines, the +output is wider than usual: normally 130 print columns, which can fit +onto a traditional printer line. You can set the width of the output +with the @option{-W @var{columns}} or @option{--width=@var{columns}} +option. The output is split into two halves of equal width, separated by a +small gutter to mark differences; the right half is aligned to a tab +stop so that tabs line up. Input lines that are too long to fit in half +of an output line are truncated for output. + +The @option{--left-column} option prints only the left column of two +common lines. The @option{--suppress-common-lines} option suppresses +common lines entirely. + +@node Example Side by Side +@subsection An Example of Side by Side Format + +Here is the output of the command @samp{diff -y -W 72 lao tzu} +(@pxref{Sample diff Input}, for the complete contents of the two files). + +@example +The Way that can be told of is n < +The name that can be named is no < +The Nameless is the origin of He The Nameless is the origin of He +The Named is the mother of all t | The named is the mother of all t + > +Therefore let there always be no Therefore let there always be no + so we may see their subtlety, so we may see their subtlety, +And let there always be being, And let there always be being, + so we may see their outcome. so we may see their outcome. +The two are the same, The two are the same, +But after they are produced, But after they are produced, + they have different names. they have different names. + > They both may be called deep and + > Deeper and more profound, + > The door of all subtleties! +@end example + +@node Normal +@section Showing Differences Without Context +@cindex normal output format +@cindex @samp{<} output format + +The ``normal'' @command{diff} output format shows each hunk of differences +without any surrounding context. Sometimes such output is the clearest +way to see how lines have changed, without the clutter of nearby +unchanged lines (although you can get similar results with the context +or unified formats by using 0 lines of context). However, this format +is no longer widely used for sending out patches; for that purpose, the +context format (@pxref{Context Format}) and the unified format +(@pxref{Unified Format}) are superior. Normal format is the default for +compatibility with older versions of @command{diff} and the @acronym{POSIX} +standard. Use the @option{--normal} option to select this output +format explicitly. + +@menu +* Example Normal:: Sample output in the normal format. +* Detailed Normal:: A detailed description of normal output format. +@end menu + +@node Example Normal +@subsection An Example of Normal Format + +Here is the output of the command @samp{diff lao tzu} +(@pxref{Sample diff Input}, for the complete contents of the two files). +Notice that it shows only the lines that are different between the two +files. + +@example +1,2d0 +< The Way that can be told of is not the eternal Way; +< The name that can be named is not the eternal name. +4c2,3 +< The Named is the mother of all things. +--- +> The named is the mother of all things. +> @- +11a11,13 +> They both may be called deep and profound. +> Deeper and more profound, +> The door of all subtleties! +@end example + +@node Detailed Normal +@subsection Detailed Description of Normal Format + +The normal output format consists of one or more hunks of differences; +each hunk shows one area where the files differ. Normal format hunks +look like this: + +@example +@var{change-command} +< @var{from-file-line} +< @var{from-file-line}@dots{} +--- +> @var{to-file-line} +> @var{to-file-line}@dots{} +@end example + +There are three types of change commands. Each consists of a line +number or comma-separated range of lines in the first file, a single +character indicating the kind of change to make, and a line number or +comma-separated range of lines in the second file. All line numbers are +the original line numbers in each file. The types of change commands +are: + +@table @samp +@item @var{l}a@var{r} +Add the lines in range @var{r} of the second file after line @var{l} of +the first file. For example, @samp{8a12,15} means append lines 12--15 +of file 2 after line 8 of file 1; or, if changing file 2 into file 1, +delete lines 12--15 of file 2. + +@item @var{f}c@var{t} +Replace the lines in range @var{f} of the first file with lines in range +@var{t} of the second file. This is like a combined add and delete, but +more compact. For example, @samp{5,7c8,10} means change lines 5--7 of +file 1 to read as lines 8--10 of file 2; or, if changing file 2 into +file 1, change lines 8--10 of file 2 to read as lines 5--7 of file 1. + +@item @var{r}d@var{l} +Delete the lines in range @var{r} from the first file; line @var{l} is where +they would have appeared in the second file had they not been deleted. +For example, @samp{5,7d3} means delete lines 5--7 of file 1; or, if +changing file 2 into file 1, append lines 5--7 of file 1 after line 3 of +file 2. +@end table + +@node Scripts +@section Making Edit Scripts +@cindex script output formats + +Several output modes produce command scripts for editing @var{from-file} +to produce @var{to-file}. + +@menu +* ed Scripts:: Using @command{diff} to produce commands for @command{ed}. +* Forward ed:: Making forward @command{ed} scripts. +* RCS:: A special @command{diff} output format used by @acronym{RCS}. +@end menu + +@node ed Scripts +@subsection @command{ed} Scripts +@cindex @command{ed} script output format + +@command{diff} can produce commands that direct the @command{ed} text editor +to change the first file into the second file. Long ago, this was the +only output mode that was suitable for editing one file into another +automatically; today, with @command{patch}, it is almost obsolete. Use the +@option{-e} or @option{--ed} option to select this output format. + +Like the normal format (@pxref{Normal}), this output format does not +show any context; unlike the normal format, it does not include the +information necessary to apply the diff in reverse (to produce the first +file if all you have is the second file and the diff). + +If the file @file{d} contains the output of @samp{diff -e old new}, then +the command @samp{(cat d && echo w) | ed - old} edits @file{old} to make +it a copy of @file{new}. More generally, if @file{d1}, @file{d2}, +@dots{}, @file{dN} contain the outputs of @samp{diff -e old new1}, +@samp{diff -e new1 new2}, @dots{}, @samp{diff -e newN-1 newN}, +respectively, then the command @samp{(cat d1 d2 @dots{} dN && echo w) | +ed - old} edits @file{old} to make it a copy of @file{newN}. + +@menu +* Example ed:: A sample @command{ed} script. +* Detailed ed:: A detailed description of @command{ed} format. +@end menu + +@node Example ed +@subsubsection Example @command{ed} Script + +Here is the output of @samp{diff -e lao tzu} (@pxref{Sample +diff Input}, for the complete contents of the two files): + +@example +11a +They both may be called deep and profound. +Deeper and more profound, +The door of all subtleties! +. +4c +The named is the mother of all things. + +. +1,2d +@end example + +@node Detailed ed +@subsubsection Detailed Description of @command{ed} Format + +The @command{ed} output format consists of one or more hunks of +differences. The changes closest to the ends of the files come first so +that commands that change the number of lines do not affect how +@command{ed} interprets line numbers in succeeding commands. @command{ed} +format hunks look like this: + +@example +@var{change-command} +@var{to-file-line} +@var{to-file-line}@dots{} +. +@end example + +Because @command{ed} uses a single period on a line to indicate the +end of input, @acronym{GNU} @command{diff} protects lines of changes +that contain a single period on a line by writing two periods instead, +then writing a subsequent @command{ed} command to change the two +periods into one. The @command{ed} format cannot represent an +incomplete line, so if the second file ends in a changed incomplete +line, @command{diff} reports an error and then pretends that a newline +was appended. + +There are three types of change commands. Each consists of a line +number or comma-separated range of lines in the first file and a single +character indicating the kind of change to make. All line numbers are +the original line numbers in the file. The types of change commands +are: + +@table @samp +@item @var{l}a +Add text from the second file after line @var{l} in the first file. For +example, @samp{8a} means to add the following lines after line 8 of file +1. + +@item @var{r}c +Replace the lines in range @var{r} in the first file with the following +lines. Like a combined add and delete, but more compact. For example, +@samp{5,7c} means change lines 5--7 of file 1 to read as the text file +2. + +@item @var{r}d +Delete the lines in range @var{r} from the first file. For example, +@samp{5,7d} means delete lines 5--7 of file 1. +@end table + +@node Forward ed +@subsection Forward @command{ed} Scripts +@cindex forward @command{ed} script output format + +@command{diff} can produce output that is like an @command{ed} script, but +with hunks in forward (front to back) order. The format of the commands +is also changed slightly: command characters precede the lines they +modify, spaces separate line numbers in ranges, and no attempt is made +to disambiguate hunk lines consisting of a single period. Like +@command{ed} format, forward @command{ed} format cannot represent incomplete +lines. + +Forward @command{ed} format is not very useful, because neither @command{ed} +nor @command{patch} can apply diffs in this format. It exists mainly for +compatibility with older versions of @command{diff}. Use the @option{-f} or +@option{--forward-ed} option to select it. + +@node RCS +@subsection @acronym{RCS} Scripts +@cindex @acronym{RCS} script output format + +The @acronym{RCS} output format is designed specifically for use by +the Revision Control System, which is a set of free programs used for +organizing different versions and systems of files. Use the +@option{-n} or @option{--rcs} option to select this output format. It +is like the forward @command{ed} format (@pxref{Forward ed}), but it +can represent arbitrary changes to the contents of a file because it +avoids the forward @command{ed} format's problems with lines +consisting of a single period and with incomplete lines. Instead of +ending text sections with a line consisting of a single period, each +command specifies the number of lines it affects; a combination of the +@samp{a} and @samp{d} commands are used instead of @samp{c}. Also, if +the second file ends in a changed incomplete line, then the output +also ends in an incomplete line. + +Here is the output of @samp{diff -n lao tzu} (@pxref{Sample +diff Input}, for the complete contents of the two files): + +@example +d1 2 +d4 1 +a4 2 +The named is the mother of all things. + +a11 3 +They both may be called deep and profound. +Deeper and more profound, +The door of all subtleties! +@end example + +@node If-then-else +@section Merging Files with If-then-else +@cindex merged output format +@cindex if-then-else output format +@cindex C if-then-else output format +@cindex @command{ifdef} output format + +You can use @command{diff} to merge two files of C source code. The output +of @command{diff} in this format contains all the lines of both files. +Lines common to both files are output just once; the differing parts are +separated by the C preprocessor directives @code{#ifdef @var{name}} or +@code{#ifndef @var{name}}, @code{#else}, and @code{#endif}. When +compiling the output, you select which version to use by either defining +or leaving undefined the macro @var{name}. + +To merge two files, use @command{diff} with the @option{-D @var{name}} or +@option{--ifdef=@var{name}} option. The argument @var{name} is the C +preprocessor identifier to use in the @code{#ifdef} and @code{#ifndef} +directives. + +For example, if you change an instance of @code{wait (&s)} to +@code{waitpid (-1, &s, 0)} and then merge the old and new files with +the @option{--ifdef=HAVE_WAITPID} option, then the affected part of your code +might look like this: + +@example + do @{ +#ifndef HAVE_WAITPID + if ((w = wait (&s)) < 0 && errno != EINTR) +#else /* HAVE_WAITPID */ + if ((w = waitpid (-1, &s, 0)) < 0 && errno != EINTR) +#endif /* HAVE_WAITPID */ + return w; + @} while (w != child); +@end example + +You can specify formats for languages other than C by using line group +formats and line formats, as described in the next sections. + +@menu +* Line Group Formats:: Formats for general if-then-else line groups. +* Line Formats:: Formats for each line in a line group. +* Example If-then-else:: Sample if-then-else format output. +* Detailed If-then-else:: A detailed description of if-then-else format. +@end menu + +@node Line Group Formats +@subsection Line Group Formats +@cindex line group formats +@cindex formats for if-then-else line groups + +Line group formats let you specify formats suitable for many +applications that allow if-then-else input, including programming +languages and text formatting languages. A line group format specifies +the output format for a contiguous group of similar lines. + +For example, the following command compares the TeX files @file{old} +and @file{new}, and outputs a merged file in which old regions are +surrounded by @samp{\begin@{em@}}-@samp{\end@{em@}} lines, and new +regions are surrounded by @samp{\begin@{bf@}}-@samp{\end@{bf@}} lines. + +@example +diff \ + --old-group-format='\begin@{em@} +%<\end@{em@} +' \ + --new-group-format='\begin@{bf@} +%>\end@{bf@} +' \ + old new +@end example + +The following command is equivalent to the above example, but it is a +little more verbose, because it spells out the default line group formats. + +@example +diff \ + --old-group-format='\begin@{em@} +%<\end@{em@} +' \ + --new-group-format='\begin@{bf@} +%>\end@{bf@} +' \ + --unchanged-group-format='%=' \ + --changed-group-format='\begin@{em@} +%<\end@{em@} +\begin@{bf@} +%>\end@{bf@} +' \ + old new +@end example + +Here is a more advanced example, which outputs a diff listing with +headers containing line numbers in a ``plain English'' style. + +@example +diff \ + --unchanged-group-format='' \ + --old-group-format='-------- %dn line%(n=1?:s) deleted at %df: +%<' \ + --new-group-format='-------- %dN line%(N=1?:s) added after %de: +%>' \ + --changed-group-format='-------- %dn line%(n=1?:s) changed at %df: +%<-------- to: +%>' \ + old new +@end example + +To specify a line group format, use @command{diff} with one of the options +listed below. You can specify up to four line group formats, one for +each kind of line group. You should quote @var{format}, because it +typically contains shell metacharacters. + +@table @option +@item --old-group-format=@var{format} +These line groups are hunks containing only lines from the first file. +The default old group format is the same as the changed group format if +it is specified; otherwise it is a format that outputs the line group as-is. + +@item --new-group-format=@var{format} +These line groups are hunks containing only lines from the second +file. The default new group format is same as the changed group +format if it is specified; otherwise it is a format that outputs the +line group as-is. + +@item --changed-group-format=@var{format} +These line groups are hunks containing lines from both files. The +default changed group format is the concatenation of the old and new +group formats. + +@item --unchanged-group-format=@var{format} +These line groups contain lines common to both files. The default +unchanged group format is a format that outputs the line group as-is. +@end table + +In a line group format, ordinary characters represent themselves; +conversion specifications start with @samp{%} and have one of the +following forms. + +@table @samp +@item %< +stands for the lines from the first file, including the trailing newline. +Each line is formatted according to the old line format (@pxref{Line Formats}). + +@item %> +stands for the lines from the second file, including the trailing newline. +Each line is formatted according to the new line format. + +@item %= +stands for the lines common to both files, including the trailing newline. +Each line is formatted according to the unchanged line format. + +@item %% +stands for @samp{%}. + +@item %c'@var{C}' +where @var{C} is a single character, stands for @var{C}. +@var{C} may not be a backslash or an apostrophe. +For example, @samp{%c':'} stands for a colon, even inside +the then-part of an if-then-else format, which a colon would +normally terminate. + +@item %c'\@var{O}' +where @var{O} is a string of 1, 2, or 3 octal digits, +stands for the character with octal code @var{O}. +For example, @samp{%c'\0'} stands for a null character. + +@item @var{F}@var{n} +where @var{F} is a @code{printf} conversion specification and @var{n} is one +of the following letters, stands for @var{n}'s value formatted with @var{F}. + +@table @samp +@item e +The line number of the line just before the group in the old file. + +@item f +The line number of the first line in the group in the old file; +equals @var{e} + 1. + +@item l +The line number of the last line in the group in the old file. + +@item m +The line number of the line just after the group in the old file; +equals @var{l} + 1. + +@item n +The number of lines in the group in the old file; equals @var{l} - @var{f} + 1. + +@item E, F, L, M, N +Likewise, for lines in the new file. + +@end table + +@vindex LC_NUMERIC +The @code{printf} conversion specification can be @samp{%d}, +@samp{%o}, @samp{%x}, or @samp{%X}, specifying decimal, octal, +lower case hexadecimal, or upper case hexadecimal output +respectively. After the @samp{%} the following options can appear in +sequence: a series of zero or more flags; an integer +specifying the minimum field width; and a period followed by an +optional integer specifying the minimum number of digits. +The flags are @samp{-} for left-justification, @samp{'} for separating +the digit into groups as specified by the @env{LC_NUMERIC} locale category, +and @samp{0} for padding with zeros instead of spaces. +For example, @samp{%5dN} prints the number of new lines in the group +in a field of width 5 characters, using the @code{printf} format @code{"%5d"}. + +@item (@var{A}=@var{B}?@var{T}:@var{E}) +If @var{A} equals @var{B} then @var{T} else @var{E}. +@var{A} and @var{B} are each either a decimal constant +or a single letter interpreted as above. +This format spec is equivalent to @var{T} if +@var{A}'s value equals @var{B}'s; otherwise it is equivalent to @var{E}. + +For example, @samp{%(N=0?no:%dN) line%(N=1?:s)} is equivalent to +@samp{no lines} if @var{N} (the number of lines in the group in the +new file) is 0, to @samp{1 line} if @var{N} is 1, and to @samp{%dN lines} +otherwise. +@end table + +@node Line Formats +@subsection Line Formats +@cindex line formats + +Line formats control how each line taken from an input file is +output as part of a line group in if-then-else format. + +For example, the following command outputs text with a one-character +change indicator to the left of the text. The first character of output +is @samp{-} for deleted lines, @samp{|} for added lines, and a space for +unchanged lines. The formats contain newline characters where newlines +are desired on output. + +@example +diff \ + --old-line-format='-%l +' \ + --new-line-format='|%l +' \ + --unchanged-line-format=' %l +' \ + old new +@end example + +To specify a line format, use one of the following options. You should +quote @var{format}, since it often contains shell metacharacters. + +@table @option +@item --old-line-format=@var{format} +formats lines just from the first file. + +@item --new-line-format=@var{format} +formats lines just from the second file. + +@item --unchanged-line-format=@var{format} +formats lines common to both files. + +@item --line-format=@var{format} +formats all lines; in effect, it sets all three above options simultaneously. +@end table + +In a line format, ordinary characters represent themselves; +conversion specifications start with @samp{%} and have one of the +following forms. + +@table @samp +@item %l +stands for the contents of the line, not counting its trailing +newline (if any). This format ignores whether the line is incomplete; +@xref{Incomplete Lines}. + +@item %L +stands for the contents of the line, including its trailing newline +(if any). If a line is incomplete, this format preserves its +incompleteness. + +@item %% +stands for @samp{%}. + +@item %c'@var{C}' +where @var{C} is a single character, stands for @var{C}. +@var{C} may not be a backslash or an apostrophe. +For example, @samp{%c':'} stands for a colon. + +@item %c'\@var{O}' +where @var{O} is a string of 1, 2, or 3 octal digits, +stands for the character with octal code @var{O}. +For example, @samp{%c'\0'} stands for a null character. + +@item @var{F}n +where @var{F} is a @code{printf} conversion specification, +stands for the line number formatted with @var{F}. +For example, @samp{%.5dn} prints the line number using the +@code{printf} format @code{"%.5d"}. @xref{Line Group Formats}, for +more about printf conversion specifications. + +@end table + +The default line format is @samp{%l} followed by a newline character. + +If the input contains tab characters and it is important that they line +up on output, you should ensure that @samp{%l} or @samp{%L} in a line +format is just after a tab stop (e.g.@: by preceding @samp{%l} or +@samp{%L} with a tab character), or you should use the @option{-t} or +@option{--expand-tabs} option. + +Taken together, the line and line group formats let you specify many +different formats. For example, the following command uses a format +similar to normal @command{diff} format. You can tailor this command +to get fine control over @command{diff} output. + +@example +diff \ + --old-line-format='< %l +' \ + --new-line-format='> %l +' \ + --old-group-format='%df%(f=l?:,%dl)d%dE +%<' \ + --new-group-format='%dea%dF%(F=L?:,%dL) +%>' \ + --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL) +%<--- +%>' \ + --unchanged-group-format='' \ + old new +@end example + +@node Example If-then-else +@subsection An Example of If-then-else Format + +Here is the output of @samp{diff -DTWO lao tzu} (@pxref{Sample +diff Input}, for the complete contents of the two files): + +@example +#ifndef TWO +The Way that can be told of is not the eternal Way; +The name that can be named is not the eternal name. +#endif /* ! TWO */ +The Nameless is the origin of Heaven and Earth; +#ifndef TWO +The Named is the mother of all things. +#else /* TWO */ +The named is the mother of all things. + +#endif /* TWO */ +Therefore let there always be non-being, + so we may see their subtlety, +And let there always be being, + so we may see their outcome. +The two are the same, +But after they are produced, + they have different names. +#ifdef TWO +They both may be called deep and profound. +Deeper and more profound, +The door of all subtleties! +#endif /* TWO */ +@end example + +@node Detailed If-then-else +@subsection Detailed Description of If-then-else Format + +For lines common to both files, @command{diff} uses the unchanged line +group format. For each hunk of differences in the merged output +format, if the hunk contains only lines from the first file, +@command{diff} uses the old line group format; if the hunk contains only +lines from the second file, @command{diff} uses the new group format; +otherwise, @command{diff} uses the changed group format. + +The old, new, and unchanged line formats specify the output format of +lines from the first file, lines from the second file, and lines common +to both files, respectively. + +The option @option{--ifdef=@var{name}} is equivalent to +the following sequence of options using shell syntax: + +@example +--old-group-format='#ifndef @var{name} +%<#endif /* ! @var{name} */ +' \ +--new-group-format='#ifdef @var{name} +%>#endif /* @var{name} */ +' \ +--unchanged-group-format='%=' \ +--changed-group-format='#ifndef @var{name} +%<#else /* @var{name} */ +%>#endif /* @var{name} */ +' +@end example + +You should carefully check the @command{diff} output for proper nesting. +For example, when using the @option{-D @var{name}} or +@option{--ifdef=@var{name}} option, you should check that if the +differing lines contain any of the C preprocessor directives +@samp{#ifdef}, @samp{#ifndef}, @samp{#else}, @samp{#elif}, or +@samp{#endif}, they are nested properly and match. If they don't, you +must make corrections manually. It is a good idea to carefully check +the resulting code anyway to make sure that it really does what you +want it to; depending on how the input files were produced, the output +might contain duplicate or otherwise incorrect code. + +The @command{patch} @option{-D @var{name}} option behaves like +the @command{diff} @option{-D @var{name}} option, except it operates on +a file and a diff to produce a merged file; @xref{patch Options}. + +@node Incomplete Lines +@chapter Incomplete Lines +@cindex incomplete lines +@cindex full lines +@cindex newline treatment by @command{diff} + +When an input file ends in a non-newline character, its last line is +called an @dfn{incomplete line} because its last character is not a +newline. All other lines are called @dfn{full lines} and end in a +newline character. Incomplete lines do not match full lines unless +differences in white space are ignored (@pxref{White Space}). + +An incomplete line is normally distinguished on output from a full +line by a following line that starts with @samp{\}. However, the +@acronym{RCS} format (@pxref{RCS}) outputs the incomplete line as-is, +without any trailing newline or following line. The side by side +format normally represents incomplete lines as-is, but in some cases +uses a @samp{\} or @samp{/} gutter marker; @xref{Side by Side}. The +if-then-else line format preserves a line's incompleteness with +@samp{%L}, and discards the newline with @samp{%l}; @xref{Line +Formats}. Finally, with the @command{ed} and forward @command{ed} +output formats (@pxref{Output Formats}) @command{diff} cannot +represent an incomplete line, so it pretends there was a newline and +reports an error. + +For example, suppose @file{F} and @file{G} are one-byte files that +contain just @samp{f} and @samp{g}, respectively. Then @samp{diff F G} +outputs + +@example +1c1 +< f +\ No newline at end of file +--- +> g +\ No newline at end of file +@end example + +@noindent +(The exact message may differ in non-English locales.) +@samp{diff -n F G} outputs the following without a trailing newline: + +@example +d1 1 +a1 1 +g +@end example + +@noindent +@samp{diff -e F G} reports two errors and outputs the following: + +@example +1c +g +. +@end example + +@node Comparing Directories +@chapter Comparing Directories + +@vindex LC_COLLATE +You can use @command{diff} to compare some or all of the files in two +directory trees. When both file name arguments to @command{diff} are +directories, it compares each file that is contained in both +directories, examining file names in alphabetical order as specified by +the @env{LC_COLLATE} locale category. Normally +@command{diff} is silent about pairs of files that contain no differences, +but if you use the @option{-s} or @option{--report-identical-files} option, +it reports pairs of identical files. Normally @command{diff} reports +subdirectories common to both directories without comparing +subdirectories' files, but if you use the @option{-r} or +@option{--recursive} option, it compares every corresponding pair of files +in the directory trees, as many levels deep as they go. + +For file names that are in only one of the directories, @command{diff} +normally does not show the contents of the file that exists; it reports +only that the file exists in that directory and not in the other. You +can make @command{diff} act as though the file existed but was empty in the +other directory, so that it outputs the entire contents of the file that +actually exists. (It is output as either an insertion or a +deletion, depending on whether it is in the first or the second +directory given.) To do this, use the @option{-N} or @option{--new-file} +option. + +If the older directory contains one or more large files that are not in +the newer directory, you can make the patch smaller by using the +@option{--unidirectional-new-file} option instead of @option{-N}. +This option is like @option{-N} except that it only inserts the contents +of files that appear in the second directory but not the first (that is, +files that were added). At the top of the patch, write instructions for +the user applying the patch to remove the files that were deleted before +applying the patch. @xref{Making Patches}, for more discussion of +making patches for distribution. + +To ignore some files while comparing directories, use the @option{-x +@var{pattern}} or @option{--exclude=@var{pattern}} option. This option +ignores any files or subdirectories whose base names match the shell +pattern @var{pattern}. Unlike in the shell, a period at the start of +the base of a file name matches a wildcard at the start of a pattern. +You should enclose @var{pattern} in quotes so that the shell does not +expand it. For example, the option @option{-x '*.[ao]'} ignores any file +whose name ends with @samp{.a} or @samp{.o}. + +This option accumulates if you specify it more than once. For example, +using the options @option{-x 'RCS' -x '*,v'} ignores any file or +subdirectory whose base name is @samp{RCS} or ends with @samp{,v}. + +If you need to give this option many times, you can instead put the +patterns in a file, one pattern per line, and use the @option{-X +@var{file}} or @option{--exclude-from=@var{file}} option. Trailing +white space and empty lines are ignored in the pattern file. + +If you have been comparing two directories and stopped partway through, +later you might want to continue where you left off. You can do this by +using the @option{-S @var{file}} or @option{--starting-file=@var{file}} +option. This compares only the file @var{file} and all alphabetically +later files in the topmost directory level. + +If two directories differ only in that file names are lower case in +one directory and upper case in the upper, @command{diff} normally +reports many differences because it compares file names in a +case sensitive way. With the @option{--ignore-file-name-case} option, +@command{diff} ignores case differences in file names, so that for example +the contents of the file @file{Tao} in one directory are compared to +the contents of the file @file{TAO} in the other. The +@option{--no-ignore-file-name-case} option cancels the effect of the +@option{--ignore-file-name-case} option, reverting to the default +behavior. + +If an @option{-x @var{pattern}} or @option{--exclude=@var{pattern}} +option, or an @option{-X @var{file}} or +@option{--exclude-from=@var{file}} option, +is specified while the @option{--ignore-file-name-case} option is in +effect, case is ignored when excluding file names matching the +specified patterns. + +@node Adjusting Output +@chapter Making @command{diff} Output Prettier + +@command{diff} provides several ways to adjust the appearance of its output. +These adjustments can be applied to any output format. + +@menu +* Tabs:: Preserving the alignment of tab stops. +* Trailing Blanks:: Suppressing blanks before empty output lines. +* Pagination:: Page numbering and time-stamping @command{diff} output. +@end menu + +@node Tabs +@section Preserving Tab Stop Alignment +@cindex tab stop alignment +@cindex aligning tab stops + +The lines of text in some of the @command{diff} output formats are +preceded by one or two characters that indicate whether the text is +inserted, deleted, or changed. The addition of those characters can +cause tabs to move to the next tab stop, throwing off the alignment of +columns in the line. @acronym{GNU} @command{diff} provides two ways +to make tab-aligned columns line up correctly. + +The first way is to have @command{diff} convert all tabs into the correct +number of spaces before outputting them; select this method with the +@option{-t} or @option{--expand-tabs} option. To use this form of output with +@command{patch}, you must give @command{patch} the @option{-l} or +@option{--ignore-white-space} option (@pxref{Changed White Space}, for more +information). @command{diff} normally assumes that tab stops are set +every 8 print columns, but this can be altered by the +@option{--tabsize=@var{columns}} option. + +The other method for making tabs line up correctly is to add a tab +character instead of a space after the indicator character at the +beginning of the line. This ensures that all following tab characters +are in the same position relative to tab stops that they were in the +original files, so that the output is aligned correctly. Its +disadvantage is that it can make long lines too long to fit on one line +of the screen or the paper. It also does not work with the unified +output format, which does not have a space character after the change +type indicator character. Select this method with the @option{-T} or +@option{--initial-tab} option. + +@node Trailing Blanks +@section Omitting trailing blanks +@cindex trailing blanks +When outputting lines in normal or context format, or outputting an +unchanged line in unified format, @command{diff} normally outputs a +blank just before each line. If the line is empty, the output of +@command{diff} therefore contains trailing blanks even though the +input does not contain them. For example, when outputting an +unchanged empty line in context format, @command{diff} normally +outputs a line with two leading spaces. + +Some text editors and email agents routinely delete trailing blanks, +so it can be a problem to deal with diff output files that contain +them. You can avoid this problem with the +@option{--suppress-blank-empty} option. It causes @command{diff} to +omit trailing blanks at the end of output lines in normal, context, +and unified format, unless the trailing blanks were already present in +the input. This changes the output format slightly, so that output +lines are guaranteed to never end in a blank unless an input line ends +in a blank. This format is less likely to be munged by text editors +or by transmission via email. It is accepted by @acronym{GNU} +@command{patch} as well. + +@node Pagination +@section Paginating @command{diff} Output +@cindex paginating @command{diff} output + +It can be convenient to have long output page-numbered and time-stamped. +The @option{-l} or @option{--paginate} option does this by sending the +@command{diff} output through the @command{pr} program. Here is what the page +header might look like for @samp{diff -lc lao tzu}: + +@example +2002-02-22 14:20 diff -lc lao tzu Page 1 +@end example + +@node diff Performance +@chapter @command{diff} Performance Tradeoffs +@cindex performance of @command{diff} + +@acronym{GNU} @command{diff} runs quite efficiently; however, in some +circumstances you can cause it to run faster or produce a more compact +set of changes. + +One way to improve @command{diff} performance is to use hard or +symbolic links to files instead of copies. This improves performance +because @command{diff} normally does not need to read two hard or +symbolic links to the same file, since their contents must be +identical. For example, suppose you copy a large directory hierarchy, +make a few changes to the copy, and then often use @samp{diff -r} to +compare the original to the copy. If the original files are +read-only, you can greatly improve performance by creating the copy +using hard or symbolic links (e.g., with @acronym{GNU} @samp{cp -lR} or +@samp{cp -sR}). Before editing a file in the copy for the first time, +you should break the link and replace it with a regular copy. + +You can also affect the performance of @acronym{GNU} @command{diff} by +giving it options that change the way it compares files. +Performance has more than one dimension. These options improve one +aspect of performance at the cost of another, or they improve +performance in some cases while hurting it in others. + +The way that @acronym{GNU} @command{diff} determines which lines have +changed always comes up with a near-minimal set of differences. +Usually it is good enough for practical purposes. If the +@command{diff} output is large, you might want @command{diff} to use a +modified algorithm that sometimes produces a smaller set of +differences. The @option{-d} or @option{--minimal} option does this; +however, it can also cause @command{diff} to run more slowly than +usual, so it is not the default behavior. + +When the files you are comparing are large and have small groups of +changes scattered throughout them, you can use the +@option{--speed-large-files} option to make a different modification to +the algorithm that @command{diff} uses. If the input files have a constant +small density of changes, this option speeds up the comparisons without +changing the output. If not, @command{diff} might produce a larger set of +differences; however, the output will still be correct. + +Normally @command{diff} discards the prefix and suffix that is common to +both files before it attempts to find a minimal set of differences. +This makes @command{diff} run faster, but occasionally it may produce +non-minimal output. The @option{--horizon-lines=@var{lines}} option +prevents @command{diff} from discarding the last @var{lines} lines of the +prefix and the first @var{lines} lines of the suffix. This gives +@command{diff} further opportunities to find a minimal output. + +Suppose a run of changed lines includes a sequence of lines at one end +and there is an identical sequence of lines just outside the other end. +The @command{diff} command is free to choose which identical sequence is +included in the hunk. In this case, @command{diff} normally shifts the +hunk's boundaries when this merges adjacent hunks, or shifts a hunk's +lines towards the end of the file. Merging hunks can make the output +look nicer in some cases. + +@node Comparing Three Files +@chapter Comparing Three Files +@cindex comparing three files +@cindex format of @command{diff3} output + +Use the program @command{diff3} to compare three files and show any +differences among them. (@command{diff3} can also merge files; see +@ref{diff3 Merging}). + +The ``normal'' @command{diff3} output format shows each hunk of +differences without surrounding context. Hunks are labeled depending +on whether they are two-way or three-way, and lines are annotated by +their location in the input files. + +@xref{Invoking diff3}, for more information on how to run @command{diff3}. + +@menu +* Sample diff3 Input:: Sample @command{diff3} input for examples. +* Example diff3 Normal:: Sample output in the normal format. +* diff3 Hunks:: The format of normal output format. +* Detailed diff3 Normal:: A detailed description of normal output format. +@end menu + +@node Sample diff3 Input +@section A Third Sample Input File +@cindex @command{diff3} sample input +@cindex sample input for @command{diff3} + +Here is a third sample file that will be used in examples to illustrate +the output of @command{diff3} and how various options can change it. The +first two files are the same that we used for @command{diff} (@pxref{Sample +diff Input}). This is the third sample file, called @file{tao}: + +@example +The Way that can be told of is not the eternal Way; +The name that can be named is not the eternal name. +The Nameless is the origin of Heaven and Earth; +The named is the mother of all things. + +Therefore let there always be non-being, + so we may see their subtlety, +And let there always be being, + so we may see their result. +The two are the same, +But after they are produced, + they have different names. + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan +@end example + +@node Example diff3 Normal +@section An Example of @command{diff3} Normal Format + +Here is the output of the command @samp{diff3 lao tzu tao} +(@pxref{Sample diff3 Input}, for the complete contents of the files). +Notice that it shows only the lines that are different among the three +files. + +@example +====2 +1:1,2c +3:1,2c + The Way that can be told of is not the eternal Way; + The name that can be named is not the eternal name. +2:0a +====1 +1:4c + The Named is the mother of all things. +2:2,3c +3:4,5c + The named is the mother of all things. + @- +====3 +1:8c +2:7c + so we may see their outcome. +3:9c + so we may see their result. +==== +1:11a +2:11,13c + They both may be called deep and profound. + Deeper and more profound, + The door of all subtleties! +3:13,14c + @- + -- The Way of Lao-Tzu, tr. Wing-tsit Chan +@end example + +@node Detailed diff3 Normal +@section Detailed Description of @command{diff3} Normal Format + +Each hunk begins with a line marked @samp{====}. Three-way hunks have +plain @samp{====} lines, and two-way hunks have @samp{1}, @samp{2}, or +@samp{3} appended to specify which of the three input files differ in +that hunk. The hunks contain copies of two or three sets of input +lines each preceded by one or two commands identifying where the lines +came from. + +Normally, two spaces precede each copy of an input line to distinguish +it from the commands. But with the @option{-T} or @option{--initial-tab} +option, @command{diff3} uses a tab instead of two spaces; this lines up +tabs correctly. @xref{Tabs}, for more information. + +Commands take the following forms: + +@table @samp +@item @var{file}:@var{l}a +This hunk appears after line @var{l} of file @var{file}, and +contains no lines in that file. To edit this file to yield the other +files, one must append hunk lines taken from the other files. For +example, @samp{1:11a} means that the hunk follows line 11 in the first +file and contains no lines from that file. + +@item @var{file}:@var{r}c +This hunk contains the lines in the range @var{r} of file @var{file}. +The range @var{r} is a comma-separated pair of line numbers, or just one +number if there is only one line. To edit this file to yield the +other files, one must change the specified lines to be the lines taken +from the other files. For example, @samp{2:11,13c} means that the hunk +contains lines 11 through 13 from the second file. +@end table + +If the last line in a set of input lines is incomplete +(@pxref{Incomplete Lines}), it is distinguished on output from a full +line by a following line that starts with @samp{\}. + +@node diff3 Hunks +@section @command{diff3} Hunks +@cindex hunks for @command{diff3} +@cindex @command{diff3} hunks + +Groups of lines that differ in two or three of the input files are +called @dfn{diff3 hunks}, by analogy with @command{diff} hunks +(@pxref{Hunks}). If all three input files differ in a @command{diff3} +hunk, the hunk is called a @dfn{three-way hunk}; if just two input files +differ, it is a @dfn{two-way hunk}. + +As with @command{diff}, several solutions are possible. When comparing the +files @samp{A}, @samp{B}, and @samp{C}, @command{diff3} normally finds +@command{diff3} hunks by merging the two-way hunks output by the two +commands @samp{diff A B} and @samp{diff A C}. This does not necessarily +minimize the size of the output, but exceptions should be rare. + +For example, suppose @file{F} contains the three lines @samp{a}, +@samp{b}, @samp{f}, @file{G} contains the lines @samp{g}, @samp{b}, +@samp{g}, and @file{H} contains the lines @samp{a}, @samp{b}, +@samp{h}. @samp{diff3 F G H} might output the following: + +@example +====2 +1:1c +3:1c + a +2:1c + g +==== +1:3c + f +2:3c + g +3:3c + h +@end example + +@noindent +because it found a two-way hunk containing @samp{a} in the first and +third files and @samp{g} in the second file, then the single line +@samp{b} common to all three files, then a three-way hunk containing +the last line of each file. + +@node diff3 Merging +@chapter Merging From a Common Ancestor +@cindex merging from a common ancestor + +When two people have made changes to copies of the same file, +@command{diff3} can produce a merged output that contains both sets of +changes together with warnings about conflicts. + +One might imagine programs with names like @command{diff4} and @command{diff5} +to compare more than three files simultaneously, but in practice the +need rarely arises. You can use @command{diff3} to merge three or more +sets of changes to a file by merging two change sets at a time. + +@command{diff3} can incorporate changes from two modified versions into a +common preceding version. This lets you merge the sets of changes +represented by the two newer files. Specify the common ancestor version +as the second argument and the two newer versions as the first and third +arguments, like this: + +@example +diff3 @var{mine} @var{older} @var{yours} +@end example + +@noindent +You can remember the order of the arguments by noting that they are in +alphabetical order. + +@cindex conflict +@cindex overlap +You can think of this as subtracting @var{older} from @var{yours} and +adding the result to @var{mine}, or as merging into @var{mine} the +changes that would turn @var{older} into @var{yours}. This merging is +well-defined as long as @var{mine} and @var{older} match in the +neighborhood of each such change. This fails to be true when all three +input files differ or when only @var{older} differs; we call this +a @dfn{conflict}. When all three input files differ, we call the +conflict an @dfn{overlap}. + +@command{diff3} gives you several ways to handle overlaps and conflicts. +You can omit overlaps or conflicts, or select only overlaps, +or mark conflicts with special @samp{<<<<<<<} and @samp{>>>>>>>} lines. + +@command{diff3} can output the merge results as an @command{ed} script that +that can be applied to the first file to yield the merged output. +However, it is usually better to have @command{diff3} generate the merged +output directly; this bypasses some problems with @command{ed}. + +@menu +* Which Changes:: Selecting changes to incorporate. +* Marking Conflicts:: Marking conflicts. +* Bypassing ed:: Generating merged output directly. +* Merging Incomplete Lines:: How @command{diff3} merges incomplete lines. +* Saving the Changed File:: Emulating System V behavior. +@end menu + +@node Which Changes +@section Selecting Which Changes to Incorporate +@cindex overlapping change, selection of +@cindex unmerged change + +You can select all unmerged changes from @var{older} to @var{yours} for merging +into @var{mine} with the @option{-e} or @option{--ed} option. You can +select only the nonoverlapping unmerged changes with @option{-3} or +@option{--easy-only}, and you can select only the overlapping changes with +@option{-x} or @option{--overlap-only}. + +The @option{-e}, @option{-3} and @option{-x} options select only +@dfn{unmerged changes}, i.e.@: changes where @var{mine} and @var{yours} +differ; they ignore changes from @var{older} to @var{yours} where +@var{mine} and @var{yours} are identical, because they assume that such +changes have already been merged. If this assumption is not a safe +one, you can use the @option{-A} or @option{--show-all} option +(@pxref{Marking Conflicts}). + +Here is the output of the command @command{diff3} with each of these three +options (@pxref{Sample diff3 Input}, for the complete contents of the files). +Notice that @option{-e} outputs the union of the disjoint sets of changes +output by @option{-3} and @option{-x}. + +Output of @samp{diff3 -e lao tzu tao}: +@example +11a + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan +. +8c + so we may see their result. +. +@end example + +Output of @samp{diff3 -3 lao tzu tao}: +@example +8c + so we may see their result. +. +@end example + +Output of @samp{diff3 -x lao tzu tao}: +@example +11a + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan +. +@end example + +@node Marking Conflicts +@section Marking Conflicts +@cindex conflict marking +@cindex @samp{<<<<<<<} for marking conflicts + +@command{diff3} can mark conflicts in the merged output by +bracketing them with special marker lines. A conflict +that comes from two files @var{A} and @var{B} is marked as follows: + +@example +<<<<<<< @var{A} +@r{lines from @var{A}} +======= +@r{lines from @var{B}} +>>>>>>> @var{B} +@end example + +A conflict that comes from three files @var{A}, @var{B} and @var{C} is +marked as follows: + +@example +<<<<<<< @var{A} +@r{lines from @var{A}} +||||||| @var{B} +@r{lines from @var{B}} +======= +@r{lines from @var{C}} +>>>>>>> @var{C} +@end example + +The @option{-A} or @option{--show-all} option acts like the @option{-e} +option, except that it brackets conflicts, and it outputs all changes +from @var{older} to @var{yours}, not just the unmerged changes. Thus, +given the sample input files (@pxref{Sample diff3 Input}), @samp{diff3 +-A lao tzu tao} puts brackets around the conflict where only @file{tzu} +differs: + +@example +<<<<<<< tzu +======= +The Way that can be told of is not the eternal Way; +The name that can be named is not the eternal name. +>>>>>>> tao +@end example + +And it outputs the three-way conflict as follows: + +@example +<<<<<<< lao +||||||| tzu +They both may be called deep and profound. +Deeper and more profound, +The door of all subtleties! +======= + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan +>>>>>>> tao +@end example + +The @option{-E} or @option{--show-overlap} option outputs less information +than the @option{-A} or @option{--show-all} option, because it outputs only +unmerged changes, and it never outputs the contents of the second +file. Thus the @option{-E} option acts like the @option{-e} option, +except that it brackets the first and third files from three-way +overlapping changes. Similarly, @option{-X} acts like @option{-x}, except +it brackets all its (necessarily overlapping) changes. For example, +for the three-way overlapping change above, the @option{-E} and @option{-X} +options output the following: + +@example +<<<<<<< lao +======= + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan +>>>>>>> tao +@end example + +If you are comparing files that have meaningless or uninformative names, +you can use the @option{--label=@var{label}} +option to show alternate names in the @samp{<<<<<<<}, @samp{|||||||} +and @samp{>>>>>>>} brackets. This option can be given up to three +times, once for each input file. Thus @samp{diff3 -A --label X +--label Y --label Z A +B C} acts like @samp{diff3 -A A B C}, except that the output looks like +it came from files named @samp{X}, @samp{Y} and @samp{Z} rather than +from files named @samp{A}, @samp{B} and @samp{C}. + +@node Bypassing ed +@section Generating the Merged Output Directly +@cindex merged @command{diff3} format + +With the @option{-m} or @option{--merge} option, @command{diff3} outputs the +merged file directly. This is more efficient than using @command{ed} to +generate it, and works even with non-text files that @command{ed} would +reject. If you specify @option{-m} without an @command{ed} script option, +@option{-A} is assumed. + +For example, the command @samp{diff3 -m lao tzu tao} +(@pxref{Sample diff3 Input} for a copy of the input files) would output +the following: + +@example +<<<<<<< tzu +======= +The Way that can be told of is not the eternal Way; +The name that can be named is not the eternal name. +>>>>>>> tao +The Nameless is the origin of Heaven and Earth; +The Named is the mother of all things. +Therefore let there always be non-being, + so we may see their subtlety, +And let there always be being, + so we may see their result. +The two are the same, +But after they are produced, + they have different names. +<<<<<<< lao +||||||| tzu +They both may be called deep and profound. +Deeper and more profound, +The door of all subtleties! +======= + + -- The Way of Lao-Tzu, tr. Wing-tsit Chan +>>>>>>> tao +@end example + +@node Merging Incomplete Lines +@section How @command{diff3} Merges Incomplete Lines +@cindex incomplete line merging + +With @option{-m}, incomplete lines (@pxref{Incomplete Lines}) are simply +copied to the output as they are found; if the merged output ends in an +conflict and one of the input files ends in an incomplete +line, succeeding @samp{|||||||}, @samp{=======} or @samp{>>>>>>>} +brackets appear somewhere other than the start of a line because +they are appended to the incomplete line. + +Without @option{-m}, if an @command{ed} script option is specified and an +incomplete line is found, @command{diff3} generates a warning and acts as +if a newline had been present. + +@node Saving the Changed File +@section Saving the Changed File +@cindex System V @command{diff3} compatibility + +Traditional Unix @command{diff3} generates an @command{ed} script without the +trailing @samp{w} and @samp{q} commands that save the changes. +System V @command{diff3} generates these extra commands. @acronym{GNU} +@command{diff3} normally behaves like traditional Unix +@command{diff3}, but with the @option{-i} option it behaves like +System V @command{diff3} and appends the @samp{w} and @samp{q} +commands. + +The @option{-i} option requires one of the @command{ed} script options +@option{-AeExX3}, and is incompatible with the merged output option +@option{-m}. + +@node Interactive Merging +@chapter Interactive Merging with @command{sdiff} +@cindex diff merging +@cindex interactive merging + +With @command{sdiff}, you can merge two files interactively based on a +side-by-side @option{-y} format comparison (@pxref{Side by Side}). Use +@option{-o @var{file}} or @option{--output=@var{file}} to specify where to +put the merged text. @xref{Invoking sdiff}, for more details on the +options to @command{sdiff}. + +Another way to merge files interactively is to use the Emacs Lisp +package @command{emerge}. @xref{emerge, , emerge, emacs, The +@acronym{GNU} Emacs Manual}, for more information. + +@menu +* sdiff Option Summary:: Summary of @command{sdiff} options. +* Merge Commands:: Merging two files interactively. +@end menu + +@node sdiff Option Summary +@section Specifying @command{diff} Options to @command{sdiff} +@cindex @command{sdiff} output format + +The following @command{sdiff} options have the same meaning as for +@command{diff}. @xref{diff Options}, for the use of these options. + +@example +-a -b -d -i -t -v +-B -E -I @var{regexp} + +--expand-tabs +--ignore-blank-lines --ignore-case +--ignore-matching-lines=@var{regexp} --ignore-space-change +--ignore-tab-expansion +--left-column --minimal --speed-large-files +--strip-trailing-cr --suppress-common-lines +--tabsize=@var{columns} --text --version --width=@var{columns} +@end example + +For historical reasons, @command{sdiff} has alternate names for some +options. The @option{-l} option is equivalent to the +@option{--left-column} option, and similarly @option{-s} is equivalent +to @option{--suppress-common-lines}. The meaning of the @command{sdiff} +@option{-w} and @option{-W} options is interchanged from that of +@command{diff}: with @command{sdiff}, @option{-w @var{columns}} is +equivalent to @option{--width=@var{columns}}, and @option{-W} is +equivalent to @option{--ignore-all-space}. @command{sdiff} without the +@option{-o} option is equivalent to @command{diff} with the @option{-y} +or @option{--side-by-side} option (@pxref{Side by Side}). + +@node Merge Commands +@section Merge Commands +@cindex merge commands +@cindex merging interactively + +Groups of common lines, with a blank gutter, are copied from the first +file to the output. After each group of differing lines, @command{sdiff} +prompts with @samp{%} and pauses, waiting for one of the following +commands. Follow each command with @key{RET}. + +@table @samp +@item e +Discard both versions. +Invoke a text editor on an empty temporary file, +then copy the resulting file to the output. + +@item eb +Concatenate the two versions, edit the result in a temporary file, +then copy the edited result to the output. + +@item ed +Like @samp{eb}, except precede each version with a header that +shows what file and lines the version came from. + +@item el +@itemx e1 +Edit a copy of the left version, then copy the result to the output. + +@item er +@itemx e2 +Edit a copy of the right version, then copy the result to the output. + +@item l +@itemx 1 +Copy the left version to the output. + +@item q +Quit. + +@item r +@itemx 2 +Copy the right version to the output. + +@item s +Silently copy common lines. + +@item v +Verbosely copy common lines. This is the default. +@end table + +@vindex EDITOR +The text editor invoked is specified by the @env{EDITOR} environment +variable if it is set. The default is system-dependent. + +@node Merging with patch +@chapter Merging with @command{patch} + +@command{patch} takes comparison output produced by @command{diff} and applies +the differences to a copy of the original file, producing a patched +version. With @command{patch}, you can distribute just the changes to a +set of files instead of distributing the entire file set; your +correspondents can apply @command{patch} to update their copy of the files +with your changes. @command{patch} automatically determines the diff +format, skips any leading or trailing headers, and uses the headers to +determine which file to patch. This lets your correspondents feed a +mail message containing a difference listing directly to +@command{patch}. + +@command{patch} detects and warns about common problems like forward +patches. It saves any patches that it could not apply. It can also maintain a +@code{patchlevel.h} file to ensure that your correspondents apply +diffs in the proper order. + +@command{patch} accepts a series of diffs in its standard input, usually +separated by headers that specify which file to patch. It applies +@command{diff} hunks (@pxref{Hunks}) one by one. If a hunk does not +exactly match the original file, @command{patch} uses heuristics to try to +patch the file as well as it can. If no approximate match can be found, +@command{patch} rejects the hunk and skips to the next hunk. @command{patch} +normally replaces each file @var{f} with its new version, putting reject +hunks (if any) into @samp{@var{f}.rej}. + +@xref{Invoking patch}, for detailed information on the options to +@command{patch}. + +@menu +* patch Input:: Selecting the type of @command{patch} input. +* Revision Control:: Getting files from @acronym{RCS}, @acronym{SCCS}, etc. +* Imperfect:: Dealing with imperfect patches. +* Creating and Removing:: Creating and removing files with a patch. +* Patching Time Stamps:: Updating time stamps on patched files. +* Multiple Patches:: Handling multiple patches in a file. +* patch Directories:: Changing directory and stripping directories. +* Backups:: Whether backup files are made. +* Backup Names:: Backup file names. +* Reject Names:: Reject file names. +* patch Messages:: Messages and questions @command{patch} can produce. +* patch and POSIX:: Conformance to the @acronym{POSIX} standard. +* patch and Tradition:: @acronym{GNU} versus traditional @command{patch}. +@end menu + +@node patch Input +@section Selecting the @command{patch} Input Format +@cindex @command{patch} input format + +@command{patch} normally determines which @command{diff} format the patch +file uses by examining its contents. For patch files that contain +particularly confusing leading text, you might need to use one of the +following options to force @command{patch} to interpret the patch file as a +certain format of diff. The output formats listed here are the only +ones that @command{patch} can understand. + +@table @option +@item -c +@itemx --context +context diff. + +@item -e +@itemx --ed +@command{ed} script. + +@item -n +@itemx --normal +normal diff. + +@item -u +@itemx --unified +unified diff. +@end table + +@node Revision Control +@section Revision Control +@cindex revision control +@cindex version control +@cindex @acronym{RCS} +@cindex ClearCase +@cindex @acronym{SCCS} + +If a nonexistent input file is under a revision control system +supported by @command{patch}, @command{patch} normally asks the user +whether to get (or check out) the file from the revision control +system. Patch currently supports @acronym{RCS}, ClearCase and +@acronym{SCCS}. Under @acronym{RCS} and @acronym{SCCS}, +@command{patch} also asks when the input file is read-only and matches +the default version in the revision control system. + +@vindex PATCH_GET +The @option{-g @var{num}} or @option{--get=@var{num}} option affects access +to files under supported revision control systems. If @var{num} is +positive, @command{patch} gets the file without asking the user; if +zero, @command{patch} neither asks the user nor gets the file; and if +negative, @command{patch} asks the user before getting the file. The +default value of @var{num} is given by the value of the +@env{PATCH_GET} environment variable if it is set; if not, the default +value is zero if @command{patch} is conforming to @acronym{POSIX}, negative +otherwise. @xref{patch and POSIX}. + +@vindex VERSION_CONTROL +The choice of revision control system is unaffected by the +@env{VERSION_CONTROL} environment variable (@pxref{Backup Names}). + +@node Imperfect +@section Applying Imperfect Patches +@cindex imperfect patch application + +@command{patch} tries to skip any leading text in the patch file, +apply the diff, and then skip any trailing text. Thus you can feed a +mail message directly to @command{patch}, and it should work. If the +entire diff is indented by a constant amount of white space, +@command{patch} automatically ignores the indentation. If a context +diff contains trailing carriage return on each line, @command{patch} +automatically ignores the carriage return. If a context diff has been +encapsulated by prepending @w{@samp{- }} to lines beginning with @samp{-} +as per @uref{ftp://ftp.isi.edu/in-notes/rfc934.txt, Internet RFC 934}, +@command{patch} automatically unencapsulates the input. + +However, certain other types of imperfect input require user +intervention or testing. + +@menu +* Changed White Space:: When tabs and spaces don't match exactly. +* Reversed Patches:: Applying reversed patches correctly. +* Inexact:: Helping @command{patch} find close matches. +* Dry Runs:: Predicting what @command{patch} will do. +@end menu + +@node Changed White Space +@subsection Applying Patches with Changed White Space +@cindex white space in patches + +Sometimes mailers, editors, or other programs change spaces into tabs, +or vice versa. If this happens to a patch file or an input file, the +files might look the same, but @command{patch} will not be able to match +them properly. If this problem occurs, use the @option{-l} or +@option{--ignore-white-space} option, which makes @command{patch} compare +blank characters (i.e.@: spaces and tabs) loosely so that any nonempty +sequence of blanks in the patch file matches any nonempty sequence of +blanks in the input files. Non-blank +characters must still match exactly. Each line of the context must +still match a line in the input file. + +@node Reversed Patches +@subsection Applying Reversed Patches +@cindex reversed patches + +Sometimes people run @command{diff} with the new file first instead of +second. This creates a diff that is ``reversed''. To apply such +patches, give @command{patch} the @option{-R} or @option{--reverse} option. +@command{patch} then attempts to swap each hunk around before applying it. +Rejects come out in the swapped format. + +Often @command{patch} can guess that the patch is reversed. If the first +hunk of a patch fails, @command{patch} reverses the hunk to see if it can +apply it that way. If it can, @command{patch} asks you if you want to have +the @option{-R} option set; if it can't, @command{patch} continues to apply +the patch normally. This method cannot detect a reversed patch if it is +a normal diff and the first command is an append (which should have been +a delete) since appends always succeed, because a null context matches +anywhere. But most patches add or change lines rather than delete them, +so most reversed normal diffs begin with a delete, which fails, and +@command{patch} notices. + +If you apply a patch that you have already applied, @command{patch} thinks +it is a reversed patch and offers to un-apply the patch. This could be +construed as a feature. If you did this inadvertently and you don't +want to un-apply the patch, just answer @samp{n} to this offer and to +the subsequent ``apply anyway'' question---or type @kbd{C-c} to kill the +@command{patch} process. + +@node Inexact +@subsection Helping @command{patch} Find Inexact Matches +@cindex inexact patches +@cindex fuzz factor when patching + +For context diffs, and to a lesser extent normal diffs, @command{patch} can +detect when the line numbers mentioned in the patch are incorrect, and +it attempts to find the correct place to apply each hunk of the patch. +As a first guess, it takes the line number mentioned in the hunk, plus +or minus any offset used in applying the previous hunk. If that is not +the correct place, @command{patch} scans both forward and backward for a +set of lines matching the context given in the hunk. + +First @command{patch} looks for a place where all lines of the context +match. If it cannot find such a place, and it is reading a context or +unified diff, and the maximum fuzz factor is set to 1 or more, then +@command{patch} makes another scan, ignoring the first and last line of +context. If that fails, and the maximum fuzz factor is set to 2 or +more, it makes another scan, ignoring the first two and last two lines +of context are ignored. It continues similarly if the maximum fuzz +factor is larger. + +The @option{-F @var{lines}} or @option{--fuzz=@var{lines}} option sets the +maximum fuzz factor to @var{lines}. This option only applies to context +and unified diffs; it ignores up to @var{lines} lines while looking for +the place to install a hunk. Note that a larger fuzz factor increases +the odds of making a faulty patch. The default fuzz factor is 2; there +is no point to setting it to more than the number of lines of context +in the diff, ordinarily 3. + +If @command{patch} cannot find a place to install a hunk of the patch, it +writes the hunk out to a reject file (@pxref{Reject Names}, for information +on how reject files are named). It writes out rejected hunks in context +format no matter what form the input patch is in. If the input is a +normal or @command{ed} diff, many of the contexts are simply null. The +line numbers on the hunks in the reject file may be different from those +in the patch file: they show the approximate location where @command{patch} +thinks the failed hunks belong in the new file rather than in the old +one. + +If the @option{--verbose} option is given, then +as it completes each hunk @command{patch} tells you whether the hunk +succeeded or failed, and if it failed, on which line (in the new file) +@command{patch} thinks the hunk should go. If this is different from the +line number specified in the diff, it tells you the offset. A single +large offset @emph{may} indicate that @command{patch} installed a hunk in +the wrong place. @command{patch} also tells you if it used a fuzz factor +to make the match, in which case you should also be slightly suspicious. + +@command{patch} cannot tell if the line numbers are off in an @command{ed} +script, and can only detect wrong line numbers in a normal diff when it +finds a change or delete command. It may have the same problem with a +context diff using a fuzz factor equal to or greater than the number of +lines of context shown in the diff (typically 3). In these cases, you +should probably look at a context diff between your original and patched +input files to see if the changes make sense. Compiling without errors +is a pretty good indication that the patch worked, but not a guarantee. + +A patch against an empty file applies to a nonexistent file, and vice +versa. @xref{Creating and Removing}. + +@command{patch} usually produces the correct results, even when it must +make many guesses. However, the results are guaranteed only when +the patch is applied to an exact copy of the file that the patch was +generated from. + +@node Dry Runs +@subsection Predicting what @command{patch} will do +@cindex testing @command{patch} +@cindex dry runs for @command{patch} + +It may not be obvious in advance what @command{patch} will do with a +complicated or poorly formatted patch. If you are concerned that the +input might cause @command{patch} to modify the wrong files, you can +use the @option{--dry-run} option, which causes @command{patch} to +print the results of applying patches without actually changing any +files. You can then inspect the diagnostics generated by the dry run +to see whether @command{patch} will modify the files that you expect. +If the patch does not do what you want, you can modify the patch (or +the other options to @command{patch}) and try another dry run. Once +you are satisfied with the proposed patch you can apply it by invoking +@command{patch} as before, but this time without the +@option{--dry-run} option. + +@node Creating and Removing +@section Creating and Removing Files +@cindex creating files +@cindex empty files, removing +@cindex removing empty files + +Sometimes when comparing two directories, a file may exist in one +directory but not the other. If you give @command{diff} the +@option{-N} or @option{--new-file} option, or if you supply an old or +new file that is named @file{/dev/null} or is empty and is dated the +Epoch (1970-01-01 00:00:00 UTC), @command{diff} outputs a patch that +adds or deletes the contents of this file. When given such a patch, +@command{patch} normally creates a new file or removes the old file. +However, when conforming to @acronym{POSIX} (@pxref{patch and POSIX}), +@command{patch} does not remove the old file, but leaves it empty. +The @option{-E} or @option{--remove-empty-files} option causes +@command{patch} to remove output files that are empty after applying a +patch, even if the patch does not appear to be one that removed the +file. + +If the patch appears to create a file that already exists, +@command{patch} asks for confirmation before applying the patch. + +@node Patching Time Stamps +@section Updating Time Stamps on Patched Files +@cindex time stamps on patched files + +When @command{patch} updates a file, it normally sets the file's +last-modified time stamp to the current time of day. If you are using +@command{patch} to track a software distribution, this can cause +@command{make} to incorrectly conclude that a patched file is out of +date. For example, if @file{syntax.c} depends on @file{syntax.y}, and +@command{patch} updates @file{syntax.c} and then @file{syntax.y}, then +@file{syntax.c} will normally appear to be out of date with respect to +@file{syntax.y} even though its contents are actually up to date. + +The @option{-Z} or @option{--set-utc} option causes @command{patch} to +set a patched file's modification and access times to the time stamps +given in context diff headers. If the context diff headers do not +specify a time zone, they are assumed to use Coordinated Universal +Time (@acronym{UTC}, often known as @acronym{GMT}). + +The @option{-T} or @option{--set-time} option acts like @option{-Z} or +@option{--set-utc}, except that it assumes that the context diff +headers' time stamps use local time instead of @acronym{UTC}. This option +is not recommended, because patches using local time cannot easily be +used by people in other time zones, and because local time stamps are +ambiguous when local clocks move backwards during daylight-saving time +adjustments. If the context diff headers specify a time zone, this +option is equivalent to @option{-Z} or @option{--set-utc}. + +@command{patch} normally refrains from setting a file's time stamps if +the file's original last-modified time stamp does not match the time +given in the diff header, of if the file's contents do not exactly +match the patch. However, if the @option{-f} or @option{--force} +option is given, the file's time stamps are set regardless. + +Due to the limitations of the current @command{diff} format, +@command{patch} cannot update the times of files whose contents have +not changed. Also, if you set file time stamps to values other than +the current time of day, you should also remove (e.g., with @samp{make +clean}) all files that depend on the patched files, so that later +invocations of @command{make} do not get confused by the patched +files' times. + +@node Multiple Patches +@section Multiple Patches in a File +@cindex multiple patches +@cindex intuiting file names from patches + +If the patch file contains more than one patch, and if you do not +specify an input file on the command line, @command{patch} tries to +apply each patch as if they came from separate patch files. This +means that it determines the name of the file to patch for each patch, +and that it examines the leading text before each patch for file names +and prerequisite revision level (@pxref{Making Patches}, for more on +that topic). + +@command{patch} uses the following rules to intuit a file name from +the leading text before a patch. First, @command{patch} takes an +ordered list of candidate file names as follows: + +@itemize @bullet +@item +If the header is that of a context diff, @command{patch} takes the old +and new file names in the header. A name is ignored if it does not +have enough slashes to satisfy the @option{-p@var{num}} or +@option{--strip=@var{num}} option. The name @file{/dev/null} is also +ignored. + +@item +If there is an @samp{Index:} line in the leading garbage and if either +the old and new names are both absent or if @command{patch} is +conforming to @acronym{POSIX}, @command{patch} takes the name in the +@samp{Index:} line. + +@item +For the purpose of the following rules, the candidate file names are +considered to be in the order (old, new, index), regardless of the +order that they appear in the header. +@end itemize + +@noindent +Then @command{patch} selects a file name from the candidate list as +follows: + +@itemize @bullet +@item +If some of the named files exist, @command{patch} selects the first +name if conforming to @acronym{POSIX}, and the best name otherwise. + +@item +If @command{patch} is not ignoring @acronym{RCS}, ClearCase, and @acronym{SCCS} +(@pxref{Revision Control}), and no named files exist but an @acronym{RCS}, +ClearCase, or @acronym{SCCS} master is found, @command{patch} selects the +first named file with an @acronym{RCS}, ClearCase, or @acronym{SCCS} master. + +@item +If no named files exist, no @acronym{RCS}, ClearCase, or @acronym{SCCS} master +was found, some names are given, @command{patch} is not conforming to +@acronym{POSIX}, and the patch appears to create a file, @command{patch} +selects the best name requiring the creation of the fewest +directories. + +@item +If no file name results from the above heuristics, you are asked for +the name of the file to patch, and @command{patch} selects that name. +@end itemize + +To determine the @dfn{best} of a nonempty list of file names, +@command{patch} first takes all the names with the fewest path name +components; of those, it then takes all the names with the shortest +basename; of those, it then takes all the shortest names; finally, it +takes the first remaining name. + +@xref{patch and POSIX}, to see whether @command{patch} is conforming +to @acronym{POSIX}. + +@node patch Directories +@section Applying Patches in Other Directories +@cindex directories and patch +@cindex patching directories + +The @option{-d @var{directory}} or @option{--directory=@var{directory}} +option to @command{patch} makes directory @var{directory} the current +directory for interpreting both file names in the patch file, and file +names given as arguments to other options (such as @option{-B} and +@option{-o}). For example, while in a mail reading program, you can patch +a file in the @file{/usr/src/emacs} directory directly from a message +containing the patch like this: + +@example +| patch -d /usr/src/emacs +@end example + +Sometimes the file names given in a patch contain leading directories, +but you keep your files in a directory different from the one given in +the patch. In those cases, you can use the +@option{-p@var{number}} or @option{--strip=@var{number}} +option to set the file name strip count to @var{number}. The strip +count tells @command{patch} how many slashes, along with the directory +names between them, to strip from the front of file names. A sequence +of one or more adjacent slashes is counted as a single slash. By +default, @command{patch} strips off all leading directories, leaving +just the base file names. + +For example, suppose the file name in the patch file is +@file{/gnu/src/emacs/etc/NEWS}. Using @option{-p0} gives the +entire file name unmodified, @option{-p1} gives +@file{gnu/src/emacs/etc/NEWS} (no leading slash), @option{-p4} gives +@file{etc/NEWS}, and not specifying @option{-p} at all gives @file{NEWS}. + +@command{patch} looks for each file (after any slashes have been stripped) +in the current directory, or if you used the @option{-d @var{directory}} +option, in that directory. + +@node Backups +@section Backup Files +@cindex backup file strategy + +Normally, @command{patch} creates a backup file if the patch does not +exactly match the original input file, because in that case the +original data might not be recovered if you undo the patch with +@samp{patch -R} (@pxref{Reversed Patches}). However, when conforming +to @acronym{POSIX}, @command{patch} does not create backup files by +default. @xref{patch and POSIX}. + +The @option{-b} or @option{--backup} option causes @command{patch} to +make a backup file regardless of whether the patch matches the +original input. The @option{--backup-if-mismatch} option causes +@command{patch} to create backup files for mismatches files; this is +the default when not conforming to @acronym{POSIX}. The +@option{--no-backup-if-mismatch} option causes @command{patch} to not +create backup files, even for mismatched patches; this is the default +when conforming to @acronym{POSIX}. + +When backing up a file that does not exist, an empty, unreadable +backup file is created as a placeholder to represent the nonexistent +file. + +@node Backup Names +@section Backup File Names +@cindex backup file names + +Normally, @command{patch} renames an original input file into a backup +file by appending to its name the extension @samp{.orig}, or @samp{~} +if using @samp{.orig} would make the backup file name too +long.@footnote{A coding error in @acronym{GNU} @command{patch} version +2.5.4 causes it to always use @samp{~}, but this should be fixed in +the next release.} The @option{-z @var{backup-suffix}} or +@option{--suffix=@var{backup-suffix}} option causes @command{patch} to +use @var{backup-suffix} as the backup extension instead. + +@vindex SIMPLE_BACKUP_SUFFIX +Alternately, you can specify the extension for backup files with the +@env{SIMPLE_BACKUP_SUFFIX} environment variable, which the options +override. + +@command{patch} can also create numbered backup files the way +@acronym{GNU} Emacs does. With this method, instead of having a +single backup of each file, @command{patch} makes a new backup file +name each time it patches a file. For example, the backups of a file +named @file{sink} would be called, successively, @file{sink.~1~}, +@file{sink.~2~}, @file{sink.~3~}, etc. + +@vindex PATCH_VERSION_CONTROL +@vindex VERSION_CONTROL +The @option{-V @var{backup-style}} or +@option{--version-control=@var{backup-style}} option takes as an +argument a method for creating backup file names. You can alternately +control the type of backups that @command{patch} makes with the +@env{PATCH_VERSION_CONTROL} environment variable, which the +@option{-V} option overrides. If @env{PATCH_VERSION_CONTROL} is not +set, the @env{VERSION_CONTROL} environment variable is used instead. +Please note that these options and variables control backup file +names; they do not affect the choice of revision control system +(@pxref{Revision Control}). + +The values of these environment variables and the argument to the +@option{-V} option are like the @acronym{GNU} Emacs @code{version-control} +variable (@pxref{Backup Names, , , emacs, The @acronym{GNU} Emacs Manual}, +for more information on backup versions in Emacs). They also +recognize synonyms that are more descriptive. The valid values are +listed below; unique abbreviations are acceptable. + +@table @option +@item t +@itemx numbered +Always make numbered backups. + +@item nil +@itemx existing +Make numbered backups of files that already have them, simple backups of +the others. This is the default. + +@item never +@itemx simple +Always make simple backups. +@end table + +You can also tell @command{patch} to prepend a prefix, such as a +directory name, to produce backup file names. The @option{-B +@var{prefix}} or @option{--prefix=@var{prefix}} option makes backup +files by prepending @var{prefix} to them. The @option{-Y +@var{prefix}} or @option{--basename-prefix=@var{prefix}} prepends +@var{prefix} to the last file name component of backup file names +instead; for example, @option{-Y ~} causes the backup name for +@file{dir/file.c} to be @file{dir/~file.c}. If you use either of +these prefix options, the suffix-based options are ignored. + +If you specify the output file with the @option{-o} option, that file is +the one that is backed up, not the input file. + +Options that affect the names of backup files do not affect whether +backups are made. For example, if you specify the +@option{--no-backup-if-mismatch} option, none of the options described +in this section have any affect, because no backups are made. + +@node Reject Names +@section Reject File Names +@cindex reject file names + +The names for reject files (files containing patches that +@command{patch} could not find a place to apply) are normally the name +of the output file with @samp{.rej} appended (or @samp{#} if using +@samp{.rej} would make the backup file name too long). + +Alternatively, you can tell @command{patch} to place all of the rejected +patches in a single file. The @option{-r @var{reject-file}} or +@option{--reject-file=@var{reject-file}} option uses @var{reject-file} as +the reject file name. + +@node patch Messages +@section Messages and Questions from @command{patch} +@cindex @command{patch} messages and questions +@cindex diagnostics from @command{patch} +@cindex messages from @command{patch} + +@command{patch} can produce a variety of messages, especially if it +has trouble decoding its input. In a few situations where it's not +sure how to proceed, @command{patch} normally prompts you for more +information from the keyboard. There are options to produce more or +fewer messages, to have it not ask for keyboard input, and to +affect the way that file names are quoted in messages. + +@menu +* More or Fewer Messages:: Controlling the verbosity of @command{patch}. +* patch and Keyboard Input:: Inhibiting keyboard input. +* patch Quoting Style:: Quoting file names in diagnostics. +@end menu + +@command{patch} exits with status 0 if all hunks are applied successfully, +1 if some hunks cannot be applied, and 2 if there is more serious trouble. +When applying a set of patches in a loop, you should check the +exit status, so you don't apply a later patch to a partially patched +file. + +@node More or Fewer Messages +@subsection Controlling the Verbosity of @command{patch} +@cindex verbose messages from @command{patch} +@cindex inhibit messages from @command{patch} + +You can cause @command{patch} to produce more messages by using the +@option{--verbose} option. For example, when you give this option, +the message @samp{Hmm...} indicates that @command{patch} is reading text in +the patch file, attempting to determine whether there is a patch in that +text, and if so, what kind of patch it is. + +You can inhibit all terminal output from @command{patch}, unless an error +occurs, by using the @option{-s}, @option{--quiet}, or @option{--silent} +option. + +@node patch and Keyboard Input +@subsection Inhibiting Keyboard Input +@cindex keyboard input to @command{patch} + +There are two ways you can prevent @command{patch} from asking you any +questions. The @option{-f} or @option{--force} option assumes that you know +what you are doing. It causes @command{patch} to do the following: + +@itemize @bullet +@item +Skip patches that do not contain file names in their headers. + +@item +Patch files even though they have the wrong version for the +@samp{Prereq:} line in the patch; + +@item +Assume that patches are not reversed even if they look like they are. +@end itemize + +@noindent +The @option{-t} or @option{--batch} option is similar to @option{-f}, in that +it suppresses questions, but it makes somewhat different assumptions: + +@itemize @bullet +@item +Skip patches that do not contain file names in their headers +(the same as @option{-f}). + +@item +Skip patches for which the file has the wrong version for the +@samp{Prereq:} line in the patch; + +@item +Assume that patches are reversed if they look like they are. +@end itemize + +@node patch Quoting Style +@subsection @command{patch} Quoting Style +@cindex quoting style + +When @command{patch} outputs a file name in a diagnostic message, it +can format the name in any of several ways. This can be useful to +output file names unambiguously, even if they contain punctuation or +special characters like newlines. The +@option{--quoting-style=@var{word}} option controls how names are +output. The @var{word} should be one of the following: + +@table @samp +@item literal +Output names as-is. +@item shell +Quote names for the shell if they contain shell metacharacters or would +cause ambiguous output. +@item shell-always +Quote names for the shell, even if they would normally not require quoting. +@item c +Quote names as for a C language string. +@item escape +Quote as with @samp{c} except omit the surrounding double-quote +characters. +@c The following are not yet implemented in patch 2.5.4. +@c @item clocale +@c Quote as with @samp{c} except use quotation marks appropriate for the +@c locale. +@c @item locale +@c @c Use @t instead of @samp to avoid duplicate quoting in some output styles. +@c Like @samp{clocale}, but quote @t{`like this'} instead of @t{"like +@c this"} in the default C locale. This looks nicer on many displays. +@end table + +@vindex QUOTING_STYLE +You can specify the default value of the @option{--quoting-style} +option with the environment variable @env{QUOTING_STYLE}. If that +environment variable is not set, the default value is @samp{shell}, +but this default may change in a future version of @command{patch}. + +@node patch and POSIX +@section @command{patch} and the @acronym{POSIX} Standard +@cindex @acronym{POSIX} + +@vindex POSIXLY_CORRECT +If you specify the @option{--posix} option, or set the +@env{POSIXLY_CORRECT} environment variable, @command{patch} conforms +more strictly to the @acronym{POSIX} standard, as follows: + +@itemize @bullet +@item +Take the first existing file from the list (old, new, index) +when intuiting file names from diff headers. @xref{Multiple Patches}. + +@item +Do not remove files that are removed by a diff. +@xref{Creating and Removing}. + +@item +Do not ask whether to get files from @acronym{RCS}, ClearCase, or +@acronym{SCCS}. @xref{Revision Control}. + +@item +Require that all options precede the files in the command line. + +@item +Do not backup files, even when there is a mismatch. @xref{Backups}. + +@end itemize + +@node patch and Tradition +@section @acronym{GNU} @command{patch} and Traditional @command{patch} +@cindex traditional @command{patch} + +The current version of @acronym{GNU} @command{patch} normally follows the +@acronym{POSIX} standard. @xref{patch and POSIX}, for the few exceptions +to this general rule. + +Unfortunately, @acronym{POSIX} redefined the behavior of @command{patch} in +several important ways. You should be aware of the following +differences if you must interoperate with traditional @command{patch}, +or with @acronym{GNU} @command{patch} version 2.1 and earlier. + +@itemize @bullet +@item +In traditional @command{patch}, the @option{-p} option's operand was +optional, and a bare @option{-p} was equivalent to @option{-p0}. The +@option{-p} option now requires an operand, and @option{-p@ 0} is now +equivalent to @option{-p0}. For maximum compatibility, use options +like @option{-p0} and @option{-p1}. + +Also, traditional @command{patch} simply counted slashes when +stripping path prefixes; @command{patch} now counts pathname +components. That is, a sequence of one or more adjacent slashes now +counts as a single slash. For maximum portability, avoid sending +patches containing @file{//} in file names. + +@item +In traditional @command{patch}, backups were enabled by default. This +behavior is now enabled with the @option{-b} or @option{--backup} +option. + +Conversely, in @acronym{POSIX} @command{patch}, backups are never made, +even when there is a mismatch. In @acronym{GNU} @command{patch}, this +behavior is enabled with the @option{--no-backup-if-mismatch} option, +or by conforming to @acronym{POSIX}. + +The @option{-b@ @var{suffix}} option of traditional @command{patch} is +equivalent to the @samp{-b -z@ @var{suffix}} options of @acronym{GNU} +@command{patch}. + +@item +Traditional @command{patch} used a complicated (and incompletely +documented) method to intuit the name of the file to be patched from +the patch header. This method did not conform to @acronym{POSIX}, and had +a few gotchas. Now @command{patch} uses a different, equally +complicated (but better documented) method that is optionally +@acronym{POSIX}-conforming; we hope it has fewer gotchas. The two methods +are compatible if the file names in the context diff header and the +@samp{Index:} line are all identical after prefix-stripping. Your +patch is normally compatible if each header's file names all contain +the same number of slashes. + +@item +When traditional @command{patch} asked the user a question, it sent +the question to standard error and looked for an answer from the first +file in the following list that was a terminal: standard error, +standard output, @file{/dev/tty}, and standard input. Now +@command{patch} sends questions to standard output and gets answers +from @file{/dev/tty}. Defaults for some answers have been changed so +that @command{patch} never goes into an infinite loop when using +default answers. + +@item +Traditional @command{patch} exited with a status value that counted +the number of bad hunks, or with status 1 if there was real trouble. +Now @command{patch} exits with status 1 if some hunks failed, or with +2 if there was real trouble. + +@item +Limit yourself to the following options when sending instructions +meant to be executed by anyone running @acronym{GNU} @command{patch}, +traditional @command{patch}, or a @command{patch} that conforms to +@acronym{POSIX}. Spaces are significant in the following list, and +operands are required. + +@example +@option{-c} +@option{-d @var{dir}} +@option{-D @var{define}} +@option{-e} +@option{-l} +@option{-n} +@option{-N} +@option{-o @var{outfile}} +@option{-p@var{num}} +@option{-R} +@option{-r @var{rejectfile}} +@end example + +@end itemize + +@node Making Patches +@chapter Tips for Making and Using Patches + +Use some common sense when making and using patches. For example, +when sending bug fixes to a program's maintainer, send several small +patches, one per independent subject, instead of one large, +harder-to-digest patch that covers all the subjects. + +Here are some other things you should keep in mind if you are going to +distribute patches for updating a software package. + +@menu +* Tips for Patch Producers:: Advice for making patches. +* Tips for Patch Consumers:: Advice for using patches. +* Avoiding Common Mistakes:: Avoiding common mistakes when using @command{patch}. +* Generating Smaller Patches:: How to generate smaller patches. +@end menu + +@node Tips for Patch Producers +@section Tips for Patch Producers +@cindex patch producer tips + +To create a patch that changes an older version of a package into a +newer version, first make a copy of the older and newer versions in +adjacent subdirectories. It is common to do that by unpacking +@command{tar} archives of the two versions. + +To generate the patch, use the command @samp{diff -Naur @var{old} +@var{new}} where @var{old} and @var{new} identify the old and new +directories. The names @var{old} and @var{new} should not contain any +slashes. The @option{-N} option lets the patch create and remove +files; @option{-a} lets the patch update non-text files; @option{-u} +generates useful time stamps and enough context; and @option{-r} lets +the patch update subdirectories. Here is an example command, using +Bourne shell syntax: + +@example +diff -Naur gcc-3.0.3 gcc-3.0.4 +@end example + +Tell your recipients how to apply the patches. This should include +which working directory to use, and which @command{patch} options to +use; the option @samp{-p1} is recommended. Test your procedure by +pretending to be a recipient and applying your patches to a copy of +the original files. + +@xref{Avoiding Common Mistakes}, for how to avoid common mistakes when +generating a patch. + +@node Tips for Patch Consumers +@section Tips for Patch Consumers +@cindex patch consumer tips + +A patch producer should tell recipients how to apply the patches, so +the first rule of thumb for a patch consumer is to follow the +instructions supplied with the patch. + +@acronym{GNU} @command{diff} can analyze files with arbitrarily long lines +and files that end in incomplete lines. However, older versions of +@command{patch} cannot patch such files. If you are having trouble +applying such patches, try upgrading to a recent version of @acronym{GNU} +@command{patch}. + +@node Avoiding Common Mistakes +@section Avoiding Common Mistakes +@cindex common mistakes with patches +@cindex patch, common mistakes + +When producing a patch for multiple files, apply @command{diff} to +directories whose names do not have slashes. This reduces confusion +when the patch consumer specifies the @option{-p@var{number}} option, +since this option can have surprising results when the old and new +file names have different numbers of slashes. For example, do not +send a patch with a header that looks like this: + +@example +diff -Naur v2.0.29/prog/README prog/README +--- v2.0.29/prog/README 2002-03-10 23:30:39.942229878 -0800 ++++ prog/README 2002-03-17 20:49:32.442260588 -0800 +@end example + +@noindent +because the two file names have different numbers of slashes, and +different versions of @command{patch} interpret the file names +differently. To avoid confusion, send output that looks like this +instead: + +@example +diff -Naur v2.0.29/prog/README v2.0.30/prog/README +--- v2.0.29/prog/README 2002-03-10 23:30:39.942229878 -0800 ++++ v2.0.30/prog/README 2002-03-17 20:49:32.442260588 -0800 +@end example + +Make sure you have specified the file names correctly, either in a +context diff header or with an @samp{Index:} line. Take care to not send out +reversed patches, since these make people wonder whether they have +already applied the patch. + +Avoid sending patches that compare backup file names like +@file{README.orig} or @file{README~}, since this might confuse +@command{patch} into patching a backup file instead of the real file. +Instead, send patches that compare the same base file names in +different directories, e.g.@: @file{old/README} and @file{new/README}. + +To save people from partially applying a patch before other patches that +should have gone before it, you can make the first patch in the patch +file update a file with a name like @file{patchlevel.h} or +@file{version.c}, which contains a patch level or version number. If +the input file contains the wrong version number, @command{patch} will +complain immediately. + +An even clearer way to prevent this problem is to put a @samp{Prereq:} +line before the patch. If the leading text in the patch file contains a +line that starts with @samp{Prereq:}, @command{patch} takes the next word +from that line (normally a version number) and checks whether the next +input file contains that word, preceded and followed by either +white space or a newline. If not, @command{patch} prompts you for +confirmation before proceeding. This makes it difficult to accidentally +apply patches in the wrong order. + +@node Generating Smaller Patches +@section Generating Smaller Patches +@cindex patches, shrinking + +The simplest way to generate a patch is to use @samp{diff -Naur} +(@pxref{Tips for Patch Producers}), but you might be able to reduce +the size of the patch by renaming or removing some files before making +the patch. If the older version of the package contains any files +that the newer version does not, or if any files have been renamed +between the two versions, make a list of @command{rm} and @command{mv} +commands for the user to execute in the old version directory before +applying the patch. Then run those commands yourself in the scratch +directory. + +If there are any files that you don't need to include in the patch +because they can easily be rebuilt from other files (for example, +@file{TAGS} and output from @command{yacc} and @command{makeinfo}), +exclude them from the patch by giving @command{diff} the @option{-x +@var{pattern}} option (@pxref{Comparing Directories}). If you want +your patch to modify a derived file because your recipients lack tools +to build it, make sure that the patch for the derived file follows any +patches for files that it depends on, so that the recipients' time +stamps will not confuse @command{make}. + +Now you can create the patch using @samp{diff -Naur}. Make sure to +specify the scratch directory first and the newer directory second. + +Add to the top of the patch a note telling the user any @command{rm} and +@command{mv} commands to run before applying the patch. Then you can +remove the scratch directory. + +You can also shrink the patch size by using fewer lines of context, +but bear in mind that @command{patch} typically needs at least two +lines for proper operation when patches do not exactly match the input +files. + +@node Invoking cmp +@chapter Invoking @command{cmp} +@cindex invoking @command{cmp} +@cindex @command{cmp} invocation + +The @command{cmp} command compares two files, and if they differ, +tells the first byte and line number where they differ or reports +that one file is a prefix of the other. Bytes and +lines are numbered starting with 1. The arguments of @command{cmp} +are as follows: + +@example +cmp @var{options}@dots{} @var{from-file} @r{[}@var{to-file} @r{[}@var{from-skip} @r{[}@var{to-skip}@r{]}@r{]}@r{]} +@end example + +The file name @file{-} is always the standard input. @command{cmp} +also uses the standard input if one file name is omitted. The +@var{from-skip} and @var{to-skip} operands specify how many bytes to +ignore at the start of each file; they are equivalent to the +@option{--ignore-initial=@var{from-skip}:@var{to-skip}} option. + +By default, @command{cmp} outputs nothing if the two files have the +same contents. If one file is a prefix of the other, @command{cmp} +prints to standard error a message of the following form: + +@example +cmp: EOF on @var{shorter-file} +@end example + +Otherwise, @command{cmp} prints to standard output a message of the +following form: + +@example +@var{from-file} @var{to-file} differ: char @var{byte-number}, line @var{line-number} +@end example + +The message formats can differ outside the @acronym{POSIX} locale. +Also, @acronym{POSIX} allows the @acronym{EOF} message to be followed +by a blank and some additional information. + +An exit status of 0 means no differences were found, 1 means some +differences were found, and 2 means trouble. + +@menu +* cmp Options:: Summary of options to @command{cmp}. +@end menu + +@node cmp Options +@section Options to @command{cmp} +@cindex @command{cmp} options +@cindex options for @command{cmp} + +Below is a summary of all of the options that @acronym{GNU} +@command{cmp} accepts. Most options have two equivalent names, one of +which is a single letter preceded by @samp{-}, and the other of which +is a long name preceded by @samp{--}. Multiple single letter options +(unless they take an argument) can be combined into a single command +line word: @option{-bl} is equivalent to @option{-b -l}. + +@table @option +@item -b +@itemx --print-bytes +Print the differing bytes. Display control bytes as a +@samp{^} followed by a letter of the alphabet and precede bytes +that have the high bit set with @samp{M-} (which stands for ``meta''). + +@item --help +Output a summary of usage and then exit. + +@item -i @var{skip} +@itemx --ignore-initial=@var{skip} +Ignore any differences in the first @var{skip} bytes of the input +files. Treat files with fewer than @var{skip} bytes as if they are +empty. If @var{skip} is of the form +@option{@var{from-skip}:@var{to-skip}}, skip the first @var{from-skip} +bytes of the first input file and the first @var{to-skip} bytes of the +second. + +@item -l +@itemx --verbose +Output the (decimal) byte numbers and (octal) values of all differing bytes, +instead of the default standard output. +Also, output the @acronym{EOF} message if one file is shorter than the other. + +@item -n @var{count} +@itemx --bytes=@var{count} +Compare at most @var{count} input bytes. + +@item -s +@itemx --quiet +@itemx --silent +Do not print anything; only return an exit status indicating whether +the files differ. + +@item -v +@itemx --version +Output version information and then exit. +@end table + +In the above table, operands that are byte counts are normally +decimal, but may be preceded by @samp{0} for octal and @samp{0x} for +hexadecimal. + +A byte count can be followed by a suffix to specify a multiple of that +count; in this case an omitted integer is understood to be 1. A bare +size letter, or one followed by @samp{iB}, specifies a multiple using +powers of 1024. A size letter followed by @samp{B} specifies powers +of 1000 instead. For example, @option{-n 4M} and @option{-n 4MiB} are +equivalent to @option{-n 4194304}, whereas @option{-n 4MB} is +equivalent to @option{-n 4000000}. This notation is upward compatible +with the @uref{http://www.bipm.fr/enus/3_SI/si-prefixes.html, SI +prefixes} for decimal multiples and with the +@uref{http://physics.nist.gov/cuu/Units/binary.html, IEC 60027-2 +prefixes for binary multiples}. + +The following suffixes are defined. Large sizes like @code{1Y} may be +rejected by your computer due to limitations of its arithmetic. + +@table @samp +@item kB +@cindex kilobyte, definition of +kilobyte: @math{10^3 = 1000}. +@item k +@itemx K +@itemx KiB +@cindex kibibyte, definition of +kibibyte: @math{2^10 = 1024}. @samp{K} is special: the SI prefix is +@samp{k} and the IEC 60027-2 prefix is @samp{Ki}, but tradition and +@acronym{POSIX} use @samp{k} to mean @samp{KiB}. +@item MB +@cindex megabyte, definition of +megabyte: @math{10^6 = 1,000,000}. +@item M +@itemx MiB +@cindex mebibyte, definition of +mebibyte: @math{2^20 = 1,048,576}. +@item GB +@cindex gigabyte, definition of +gigabyte: @math{10^9 = 1,000,000,000}. +@item G +@itemx GiB +@cindex gibibyte, definition of +gibibyte: @math{2^30 = 1,073,741,824}. +@item TB +@cindex terabyte, definition of +terabyte: @math{10^12 = 1,000,000,000,000}. +@item T +@itemx TiB +@cindex tebibyte, definition of +tebibyte: @math{2^40 = 1,099,511,627,776}. +@item PB +@cindex petabyte, definition of +petabyte: @math{10^15 = 1,000,000,000,000,000}. +@item P +@itemx PiB +@cindex pebibyte, definition of +pebibyte: @math{2^50 = 1,125,899,906,842,624}. +@item EB +@cindex exabyte, definition of +exabyte: @math{10^18 = 1,000,000,000,000,000,000}. +@item E +@itemx EiB +@cindex exbibyte, definition of +exbibyte: @math{2^60 = 1,152,921,504,606,846,976}. +@item ZB +@cindex zettabyte, definition of +zettabyte: @math{10^21 = 1,000,000,000,000,000,000,000} +@item Z +@itemx ZiB +@math{2^70 = 1,180,591,620,717,411,303,424}. +(@samp{Zi} is a GNU extension to IEC 60027-2.) +@item YB +@cindex yottabyte, definition of +yottabyte: @math{10^24 = 1,000,000,000,000,000,000,000,000}. +@item Y +@itemx YiB +@math{2^80 = 1,208,925,819,614,629,174,706,176}. +(@samp{Yi} is a GNU extension to IEC 60027-2.) +@end table + +@node Invoking diff +@chapter Invoking @command{diff} +@cindex invoking @command{diff} +@cindex @command{diff} invocation + +The format for running the @command{diff} command is: + +@example +diff @var{options}@dots{} @var{files}@dots{} +@end example + +In the simplest case, two file names @var{from-file} and +@var{to-file} are given, and @command{diff} compares the contents of +@var{from-file} and @var{to-file}. A file name of @file{-} stands for +text read from the standard input. As a special case, @samp{diff - -} +compares a copy of standard input to itself. + +If one file is a directory and the other is not, @command{diff} compares +the file in the directory whose name is that of the non-directory. +The non-directory file must not be @file{-}. + +If two file names are given and both are directories, +@command{diff} compares corresponding files in both directories, in +alphabetical order; this comparison is not recursive unless the +@option{-r} or @option{--recursive} option is given. @command{diff} never +compares the actual contents of a directory as if it were a file. The +file that is fully specified may not be standard input, because standard +input is nameless and the notion of ``file with the same name'' does not +apply. + +If the @option{--from-file=@var{file}} option is given, the number of +file names is arbitrary, and @var{file} is compared to each named file. +Similarly, if the @option{--to-file=@var{file}} option is given, each +named file is compared to @var{file}. + +@command{diff} options begin with @samp{-}, so normally file names +may not begin with @samp{-}. However, @option{--} as an +argument by itself treats the remaining arguments as file names even if +they begin with @samp{-}. + +An exit status of 0 means no differences were found, 1 means some +differences were found, and 2 means trouble. Normally, differing +binary files count as trouble, but this can be altered by using the +@option{-a} or @option{--text} option, or the @option{-q} or +@option{--brief} option. + +@menu +* diff Options:: Summary of options to @command{diff}. +@end menu + +@node diff Options +@section Options to @command{diff} +@cindex @command{diff} options +@cindex options for @command{diff} + +Below is a summary of all of the options that @acronym{GNU} +@command{diff} accepts. Most options have two equivalent names, one +of which is a single letter preceded by @samp{-}, and the other of +which is a long name preceded by @samp{--}. Multiple single letter +options (unless they take an argument) can be combined into a single +command line word: @option{-ac} is equivalent to @option{-a -c}. Long +named options can be abbreviated to any unique prefix of their name. +Brackets ([ and ]) indicate that an option takes an optional argument. + +@table @option +@item -a +@itemx --text +Treat all files as text and compare them line-by-line, even if they +do not seem to be text. @xref{Binary}. + +@item -b +@itemx --ignore-space-change +Ignore changes in amount of white space. @xref{White Space}. + +@item -B +@itemx --ignore-blank-lines +Ignore changes that just insert or delete blank lines. @xref{Blank +Lines}. + +@item --binary +Read and write data in binary mode. @xref{Binary}. + +@item -c +Use the context output format, showing three lines of context. +@xref{Context Format}. + +@item -C @var{lines} +@itemx --context@r{[}=@var{lines}@r{]} +Use the context output format, showing @var{lines} (an integer) lines of +context, or three if @var{lines} is not given. @xref{Context Format}. +For proper operation, @command{patch} typically needs at least two lines of +context. + +For compatibility @command{diff} also supports an obsolete option +syntax @option{-@var{lines}} that has effect when combined with +@option{-c}, @option{-p}, or @option{-u}. New scripts should use +@option{-C @var{lines}} or @option{-U @var{lines}} instead. + +@item --changed-group-format=@var{format} +Use @var{format} to output a line group containing differing lines from +both files in if-then-else format. @xref{Line Group Formats}. + +@item -d +@itemx --minimal +Change the algorithm perhaps find a smaller set of changes. This makes +@command{diff} slower (sometimes much slower). @xref{diff Performance}. + +@item -D @var{name} +@itemx --ifdef=@var{name} +Make merged @samp{#ifdef} format output, conditional on the preprocessor +macro @var{name}. @xref{If-then-else}. + +@item -e +@itemx --ed +Make output that is a valid @command{ed} script. @xref{ed Scripts}. + +@item -E +@itemx --ignore-tab-expansion +Ignore changes due to tab expansion. +@xref{White Space}. + +@item -f +@itemx --forward-ed +Make output that looks vaguely like an @command{ed} script but has changes +in the order they appear in the file. @xref{Forward ed}. + +@item -F @var{regexp} +@itemx --show-function-line=@var{regexp} +In context and unified format, for each hunk of differences, show some +of the last preceding line that matches @var{regexp}. @xref{Specified +Headings}. + +@item --from-file=@var{file} +Compare @var{file} to each operand; @var{file} may be a directory. + +@item --help +Output a summary of usage and then exit. + +@item --horizon-lines=@var{lines} +Do not discard the last @var{lines} lines of the common prefix +and the first @var{lines} lines of the common suffix. +@xref{diff Performance}. + +@item -i +@itemx --ignore-case +Ignore changes in case; consider upper- and lower-case letters +equivalent. @xref{Case Folding}. + +@item -I @var{regexp} +@itemx --ignore-matching-lines=@var{regexp} +Ignore changes that just insert or delete lines that match @var{regexp}. +@xref{Specified Lines}. + +@item --ignore-file-name-case +Ignore case when comparing file names during recursive comparison. +@xref{Comparing Directories}. + +@item -l +@itemx --paginate +Pass the output through @command{pr} to paginate it. @xref{Pagination}. + +@item --label=@var{label} +Use @var{label} instead of the file name in the context format +(@pxref{Context Format}) and unified format (@pxref{Unified Format}) +headers. @xref{RCS}. + +@item --left-column +Print only the left column of two common lines in side by side format. +@xref{Side by Side Format}. + +@item --line-format=@var{format} +Use @var{format} to output all input lines in if-then-else format. +@xref{Line Formats}. + +@item -n +@itemx --rcs +Output @acronym{RCS}-format diffs; like @option{-f} except that each command +specifies the number of lines affected. @xref{RCS}. + +@item -N +@itemx --new-file +In directory comparison, if a file is found in only one directory, +treat it as present but empty in the other directory. @xref{Comparing +Directories}. + +@item --new-group-format=@var{format} +Use @var{format} to output a group of lines taken from just the second +file in if-then-else format. @xref{Line Group Formats}. + +@item --new-line-format=@var{format} +Use @var{format} to output a line taken from just the second file in +if-then-else format. @xref{Line Formats}. + +@item --old-group-format=@var{format} +Use @var{format} to output a group of lines taken from just the first +file in if-then-else format. @xref{Line Group Formats}. + +@item --old-line-format=@var{format} +Use @var{format} to output a line taken from just the first file in +if-then-else format. @xref{Line Formats}. + +@item -p +@itemx --show-c-function +Show which C function each change is in. @xref{C Function Headings}. + +@item -q +@itemx --brief +Report only whether the files differ, not the details of the +differences. @xref{Brief}. + +@item -r +@itemx --recursive +When comparing directories, recursively compare any subdirectories +found. @xref{Comparing Directories}. + +@item -s +@itemx --report-identical-files +Report when two files are the same. @xref{Comparing Directories}. + +@item -S @var{file} +@itemx --starting-file=@var{file} +When comparing directories, start with the file @var{file}. This is +used for resuming an aborted comparison. @xref{Comparing Directories}. + +@item --speed-large-files +Use heuristics to speed handling of large files that have numerous +scattered small changes. @xref{diff Performance}. + +@item --strip-trailing-cr +Strip any trailing carriage return at the end of an input line. +@xref{Binary}. + +@item --suppress-common-lines +Do not print common lines in side by side format. +@xref{Side by Side Format}. + +@item -t +@itemx --expand-tabs +Expand tabs to spaces in the output, to preserve the alignment of tabs +in the input files. @xref{Tabs}. + +@item -T +@itemx --initial-tab +Output a tab rather than a space before the text of a line in normal or +context format. This causes the alignment of tabs in the line to look +normal. @xref{Tabs}. + +@item --tabsize=@var{columns} +Assume that tab stops are set every @var{columns} (default 8) print +columns. @xref{Tabs}. + +@item --suppress-blank-empty +Suppress any blanks before newlines when printing the representation +of an empty line, when outputting normal, context, or unified format. +@xref{Trailing Blanks}. + +@item --to-file=@var{file} +Compare each operand to @var{file}; @var{file} may be a directory. + +@item -u +Use the unified output format, showing three lines of context. +@xref{Unified Format}. + +@item --unchanged-group-format=@var{format} +Use @var{format} to output a group of common lines taken from both files +in if-then-else format. @xref{Line Group Formats}. + +@item --unchanged-line-format=@var{format} +Use @var{format} to output a line common to both files in if-then-else +format. @xref{Line Formats}. + +@item --unidirectional-new-file +When comparing directories, if a file appears only in the second +directory of the two, treat it as present but empty in the other. +@xref{Comparing Directories}. + +@item -U @var{lines} +@itemx --unified@r{[}=@var{lines}@r{]} +Use the unified output format, showing @var{lines} (an integer) lines of +context, or three if @var{lines} is not given. @xref{Unified Format}. +For proper operation, @command{patch} typically needs at least two lines of +context. + +On older systems, @command{diff} supports an obsolete option +@option{-@var{lines}} that has effect when combined with @option{-u}. +@acronym{POSIX} 1003.1-2001 (@pxref{Standards conformance}) does not allow +this; use @option{-U @var{lines}} instead. + +@item -v +@itemx --version +Output version information and then exit. + +@item -w +@itemx --ignore-all-space +Ignore white space when comparing lines. @xref{White Space}. + +@item -W @var{columns} +@itemx --width=@var{columns} +Output at most @var{columns} (default 130) print columns per line in +side by side format. @xref{Side by Side Format}. + +@item -x @var{pattern} +@itemx --exclude=@var{pattern} +When comparing directories, ignore files and subdirectories whose basenames +match @var{pattern}. @xref{Comparing Directories}. + +@item -X @var{file} +@itemx --exclude-from=@var{file} +When comparing directories, ignore files and subdirectories whose basenames +match any pattern contained in @var{file}. @xref{Comparing Directories}. + +@item -y +@itemx --side-by-side +Use the side by side output format. @xref{Side by Side Format}. +@end table + +@node Invoking diff3 +@chapter Invoking @command{diff3} +@cindex invoking @command{diff3} +@cindex @command{diff3} invocation + +The @command{diff3} command compares three files and outputs descriptions +of their differences. Its arguments are as follows: + +@example +diff3 @var{options}@dots{} @var{mine} @var{older} @var{yours} +@end example + +The files to compare are @var{mine}, @var{older}, and @var{yours}. +At most one of these three file names may be @file{-}, +which tells @command{diff3} to read the standard input for that file. + +An exit status of 0 means @command{diff3} was successful, 1 means some +conflicts were found, and 2 means trouble. + +@menu +* diff3 Options:: Summary of options to @command{diff3}. +@end menu + +@node diff3 Options +@section Options to @command{diff3} +@cindex @command{diff3} options +@cindex options for @command{diff3} + +Below is a summary of all of the options that @acronym{GNU} @command{diff3} +accepts. Multiple single letter options (unless they take an argument) +can be combined into a single command line argument. + +@table @option +@item -a +@itemx --text +Treat all files as text and compare them line-by-line, even if they +do not appear to be text. @xref{Binary}. + +@item -A +@itemx --show-all +Incorporate all unmerged changes from @var{older} to @var{yours} into +@var{mine}, surrounding conflicts with bracket lines. +@xref{Marking Conflicts}. + +@item --diff-program=@var{program} +Use the compatible comparison program @var{program} to compare files +instead of @command{diff}. + +@item -e +@itemx --ed +Generate an @command{ed} script that incorporates all the changes from +@var{older} to @var{yours} into @var{mine}. @xref{Which Changes}. + +@item -E +@itemx --show-overlap +Like @option{-e}, except bracket lines from overlapping changes' first +and third files. +@xref{Marking Conflicts}. +With @option{-E}, an overlapping change looks like this: + +@example +<<<<<<< @var{mine} +@r{lines from @var{mine}} +======= +@r{lines from @var{yours}} +>>>>>>> @var{yours} +@end example + +@item --help +Output a summary of usage and then exit. + +@item -i +Generate @samp{w} and @samp{q} commands at the end of the @command{ed} +script for System V compatibility. This option must be combined with +one of the @option{-AeExX3} options, and may not be combined with @option{-m}. +@xref{Saving the Changed File}. + +@item --label=@var{label} +Use the label @var{label} for the brackets output by the @option{-A}, +@option{-E} and @option{-X} options. This option may be given up to three +times, one for each input file. The default labels are the names of +the input files. Thus @samp{diff3 --label X --label Y --label Z -m A +B C} acts like +@samp{diff3 -m A B C}, except that the output looks like it came from +files named @samp{X}, @samp{Y} and @samp{Z} rather than from files +named @samp{A}, @samp{B} and @samp{C}. @xref{Marking Conflicts}. + +@item -m +@itemx --merge +Apply the edit script to the first file and send the result to standard +output. Unlike piping the output from @command{diff3} to @command{ed}, this +works even for binary files and incomplete lines. @option{-A} is assumed +if no edit script option is specified. @xref{Bypassing ed}. + +@item --strip-trailing-cr +Strip any trailing carriage return at the end of an input line. +@xref{Binary}. + +@item -T +@itemx --initial-tab +Output a tab rather than two spaces before the text of a line in normal format. +This causes the alignment of tabs in the line to look normal. @xref{Tabs}. + +@item -v +@itemx --version +Output version information and then exit. + +@item -x +@itemx --overlap-only +Like @option{-e}, except output only the overlapping changes. +@xref{Which Changes}. + +@item -X +Like @option{-E}, except output only the overlapping changes. +In other words, like @option{-x}, except bracket changes as in @option{-E}. +@xref{Marking Conflicts}. + +@item -3 +@itemx --easy-only +Like @option{-e}, except output only the nonoverlapping changes. +@xref{Which Changes}. +@end table + +@node Invoking patch +@chapter Invoking @command{patch} +@cindex invoking @command{patch} +@cindex @command{patch} invocation + +Normally @command{patch} is invoked like this: + +@example +patch <@var{patchfile} +@end example + +The full format for invoking @command{patch} is: + +@example +patch @var{options}@dots{} @r{[}@var{origfile} @r{[}@var{patchfile}@r{]}@r{]} +@end example + +You can also specify where to read the patch from with the @option{-i +@var{patchfile}} or @option{--input=@var{patchfile}} option. +If you do not specify @var{patchfile}, or if @var{patchfile} is +@file{-}, @command{patch} reads the patch (that is, the @command{diff} output) +from the standard input. + +If you do not specify an input file on the command line, @command{patch} +tries to intuit from the @dfn{leading text} (any text in the patch +that comes before the @command{diff} output) which file to edit. +@xref{Multiple Patches}. + +By default, @command{patch} replaces the original input file with the +patched version, possibly after renaming the original file into a +backup file (@pxref{Backup Names}, for a description of how +@command{patch} names backup files). You can also specify where to +put the output with the @option{-o @var{file}} or +@option{--output=@var{file}} option; however, do not use this option +if @var{file} is one of the input files. + +@menu +* patch Options:: Summary table of options to @command{patch}. +@end menu + +@node patch Options +@section Options to @command{patch} +@cindex @command{patch} options +@cindex options for @command{patch} + +Here is a summary of all of the options that @acronym{GNU} @command{patch} +accepts. @xref{patch and Tradition}, for which of these options are +safe to use in older versions of @command{patch}. + +Multiple single-letter options that do not take an argument can be +combined into a single command line argument with only one dash. + +@table @option +@item -b +@itemx --backup +Back up the original contents of each file, even if backups would +normally not be made. @xref{Backups}. + +@item -B @var{prefix} +@itemx --prefix=@var{prefix} +Prepend @var{prefix} to backup file names. @xref{Backup Names}. + +@item --backup-if-mismatch +Back up the original contents of each file if the patch does not +exactly match the file. This is the default behavior when not +conforming to @acronym{POSIX}. @xref{Backups}. + +@item --binary +Read and write all files in binary mode, except for standard output +and @file{/dev/tty}. This option has no effect on +@acronym{POSIX}-conforming systems like @acronym{GNU}/Linux. On systems where +this option makes a difference, the patch should be generated by +@samp{diff -a --binary}. @xref{Binary}. + +@item -c +@itemx --context +Interpret the patch file as a context diff. @xref{patch Input}. + +@item -d @var{directory} +@itemx --directory=@var{directory} +Make directory @var{directory} the current directory for interpreting +both file names in the patch file, and file names given as arguments to +other options. @xref{patch Directories}. + +@item -D @var{name} +@itemx --ifdef=@var{name} +Make merged if-then-else output using @var{name}. @xref{If-then-else}. + +@item --dry-run +Print the results of applying the patches without actually changing +any files. @xref{Dry Runs}. + +@item -e +@itemx --ed +Interpret the patch file as an @command{ed} script. @xref{patch Input}. + +@item -E +@itemx --remove-empty-files +Remove output files that are empty after the patches have been applied. +@xref{Creating and Removing}. + +@item -f +@itemx --force +Assume that the user knows exactly what he or she is doing, and do not +ask any questions. @xref{patch Messages}. + +@item -F @var{lines} +@itemx --fuzz=@var{lines} +Set the maximum fuzz factor to @var{lines}. @xref{Inexact}. + +@item -g @var{num} +@itemx --get=@var{num} +If @var{num} is positive, get input files from a revision control +system as necessary; if zero, do not get the files; if negative, ask +the user whether to get the files. @xref{Revision Control}. + +@item --help +Output a summary of usage and then exit. + +@item -i @var{patchfile} +@itemx --input=@var{patchfile} +Read the patch from @var{patchfile} rather than from standard input. +@xref{patch Options}. + +@item -l +@itemx --ignore-white-space +Let any sequence of blanks (spaces or tabs) in the patch file match +any sequence of blanks in the input file. @xref{Changed White Space}. + +@item -n +@itemx --normal +Interpret the patch file as a normal diff. @xref{patch Input}. + +@item -N +@itemx --forward +Ignore patches that @command{patch} thinks are reversed or already applied. +See also @option{-R}. @xref{Reversed Patches}. + +@item --no-backup-if-mismatch +Do not back up the original contents of files. This is the default +behavior when conforming to @acronym{POSIX}. @xref{Backups}. + +@item -o @var{file} +@itemx --output=@var{file} +Use @var{file} as the output file name. @xref{patch Options}. + +@item -p@var{number} +@itemx --strip=@var{number} +Set the file name strip count to @var{number}. @xref{patch Directories}. + +@item --posix +Conform to @acronym{POSIX}, as if the @env{POSIXLY_CORRECT} environment +variable had been set. @xref{patch and POSIX}. + +@item --quoting-style=@var{word} +Use style @var{word} to quote names in diagnostics, as if the +@env{QUOTING_STYLE} environment variable had been set to @var{word}. +@xref{patch Quoting Style}. + +@item -r @var{reject-file} +@itemx --reject-file=@var{reject-file} +Use @var{reject-file} as the reject file name. @xref{Reject Names}. + +@item -R +@itemx --reverse +Assume that this patch was created with the old and new files swapped. +@xref{Reversed Patches}. + +@item -s +@itemx --quiet +@itemx --silent +Work silently unless an error occurs. @xref{patch Messages}. + +@item -t +@itemx --batch +Do not ask any questions. @xref{patch Messages}. + +@item -T +@itemx --set-time +Set the modification and access times of patched files from time +stamps given in context diff headers, assuming that the context diff +headers use local time. @xref{Patching Time Stamps}. + +@item -u +@itemx --unified +Interpret the patch file as a unified diff. @xref{patch Input}. + +@item -v +@itemx --version +Output version information and then exit. + +@item -V @var{backup-style} +@itemx --version=control=@var{backup-style} +Select the naming convention for backup file names. @xref{Backup Names}. + +@item --verbose +Print more diagnostics than usual. @xref{patch Messages}. + +@item -x @var{number} +@itemx --debug=@var{number} +Set internal debugging flags. Of interest only to @command{patch} +patchers. + +@item -Y @var{prefix} +@itemx --basename-prefix=@var{prefix} +Prepend @var{prefix} to base names of backup files. @xref{Backup Names}. + +@item -z @var{suffix} +@itemx --suffix=@var{suffix} +Use @var{suffix} as the backup extension instead of @samp{.orig} or +@samp{~}. @xref{Backup Names}. + +@item -Z +@itemx --set-utc +Set the modification and access times of patched files from time +stamps given in context diff headers, assuming that the context diff +headers use @acronym{UTC}. @xref{Patching Time Stamps}. + +@end table + +@node Invoking sdiff +@chapter Invoking @command{sdiff} +@cindex invoking @command{sdiff} +@cindex @command{sdiff} invocation + +The @command{sdiff} command merges two files and interactively outputs the +results. Its arguments are as follows: + +@example +sdiff -o @var{outfile} @var{options}@dots{} @var{from-file} @var{to-file} +@end example + +This merges @var{from-file} with @var{to-file}, with output to @var{outfile}. +If @var{from-file} is a directory and @var{to-file} is not, @command{sdiff} +compares the file in @var{from-file} whose file name is that of @var{to-file}, +and vice versa. @var{from-file} and @var{to-file} may not both be +directories. + +@command{sdiff} options begin with @samp{-}, so normally @var{from-file} +and @var{to-file} may not begin with @samp{-}. However, @option{--} as an +argument by itself treats the remaining arguments as file names even if +they begin with @samp{-}. You may not use @file{-} as an input file. + +@command{sdiff} without @option{-o} (or @option{--output}) produces a +side-by-side difference. This usage is obsolete; use the @option{-y} +or @option{--side-by-side} option of @command{diff} instead. + +An exit status of 0 means no differences were found, 1 means some +differences were found, and 2 means trouble. + +@menu +* sdiff Options:: Summary of options to @command{diff}. +@end menu + +@node sdiff Options +@section Options to @command{sdiff} +@cindex @command{sdiff} options +@cindex options for @command{sdiff} + +Below is a summary of all of the options that @acronym{GNU} +@command{sdiff} accepts. Each option has two equivalent names, one of +which is a single letter preceded by @samp{-}, and the other of which +is a long name preceded by @samp{--}. Multiple single letter options +(unless they take an argument) can be combined into a single command +line argument. Long named options can be abbreviated to any unique +prefix of their name. + +@table @option +@item -a +@itemx --text +Treat all files as text and compare them line-by-line, even if they +do not appear to be text. @xref{Binary}. + +@item -b +@itemx --ignore-space-change +Ignore changes in amount of white space. @xref{White Space}. + +@item -B +@itemx --ignore-blank-lines +Ignore changes that just insert or delete blank lines. @xref{Blank +Lines}. + +@item -d +@itemx --minimal +Change the algorithm to perhaps find a smaller set of changes. This +makes @command{sdiff} slower (sometimes much slower). @xref{diff +Performance}. + +@item --diff-program=@var{program} +Use the compatible comparison program @var{program} to compare files +instead of @command{diff}. + +@item -E +@itemx --ignore-tab-expansion +Ignore changes due to tab expansion. +@xref{White Space}. + +@item --help +Output a summary of usage and then exit. + +@item -i +@itemx --ignore-case +Ignore changes in case; consider upper- and lower-case to be the same. +@xref{Case Folding}. + +@item -I @var{regexp} +@itemx --ignore-matching-lines=@var{regexp} +Ignore changes that just insert or delete lines that match @var{regexp}. +@xref{Specified Lines}. + +@item -l +@itemx --left-column +Print only the left column of two common lines. +@xref{Side by Side Format}. + +@item -o @var{file} +@itemx --output=@var{file} +Put merged output into @var{file}. This option is required for merging. + +@item -s +@itemx --suppress-common-lines +Do not print common lines. @xref{Side by Side Format}. + +@item --speed-large-files +Use heuristics to speed handling of large files that have numerous +scattered small changes. @xref{diff Performance}. + +@item --strip-trailing-cr +Strip any trailing carriage return at the end of an input line. +@xref{Binary}. + +@item -t +@itemx --expand-tabs +Expand tabs to spaces in the output, to preserve the alignment of tabs +in the input files. @xref{Tabs}. + +@item --tabsize=@var{columns} +Assume that tab stops are set every @var{columns} (default 8) print +columns. @xref{Tabs}. + +@item -v +@itemx --version +Output version information and then exit. + +@item -w @var{columns} +@itemx --width=@var{columns} +Output at most @var{columns} (default 130) print columns per line. +@xref{Side by Side Format}. Note that for historical reasons, this +option is @option{-W} in @command{diff}, @option{-w} in @command{sdiff}. + +@item -W +@itemx --ignore-all-space +Ignore white space when comparing lines. @xref{White Space}. +Note that for historical reasons, this option is @option{-w} in @command{diff}, +@option{-W} in @command{sdiff}. +@end table + +@node Standards conformance +@chapter Standards conformance +@cindex @acronym{POSIX} + +@vindex POSIXLY_CORRECT +In a few cases, the @acronym{GNU} utilities' default behavior is +incompatible with the @acronym{POSIX} standard. To suppress these +incompatibilities, define the @env{POSIXLY_CORRECT} environment +variable. Unless you are checking for @acronym{POSIX} conformance, you +probably do not need to define @env{POSIXLY_CORRECT}. + +Normally options and operands can appear in any order, and programs act +as if all the options appear before any operands. For example, +@samp{diff lao tzu -C 2} acts like @samp{diff -C 2 lao tzu}, since +@samp{2} is an option-argument of @option{-C}. However, if the +@env{POSIXLY_CORRECT} environment variable is set, options must appear +before operands, unless otherwise specified for a particular command. + +Newer versions of @acronym{POSIX} are occasionally incompatible with older +versions. For example, older versions of @acronym{POSIX} allowed the +command @samp{diff -c -10} to have the same meaning as @samp{diff -C +10}, but @acronym{POSIX} 1003.1-2001 @samp{diff} no longer allows +digit-string options like @option{-10}. + +@vindex _POSIX2_VERSION +The @acronym{GNU} utilities normally conform to the version of @acronym{POSIX} +that is standard for your system. To cause them to conform to a +different version of @acronym{POSIX}, define the @env{_POSIX2_VERSION} +environment variable to a value of the form @var{yyyymm} specifying +the year and month the standard was adopted. Two values are currently +supported for @env{_POSIX2_VERSION}: @samp{199209} stands for +@acronym{POSIX} 1003.2-1992, and @samp{200112} stands for @acronym{POSIX} +1003.1-2001. For example, if you are running older software that +assumes an older version of @acronym{POSIX} and uses @samp{diff -c -10}, +you can work around the compatibility problems by setting +@samp{_POSIX2_VERSION=199209} in your environment. + +@node Projects +@chapter Future Projects + +Here are some ideas for improving @acronym{GNU} @command{diff} and +@command{patch}. The @acronym{GNU} project has identified some +improvements as potential programming projects for volunteers. You +can also help by reporting any bugs that you find. + +If you are a programmer and would like to contribute something to the +@acronym{GNU} project, please consider volunteering for one of these +projects. If you are seriously contemplating work, please write to +@email{gvc@@gnu.org} to coordinate with other volunteers. + +@menu +* Shortcomings:: Suggested projects for improvements. +* Bugs:: Reporting bugs. +@end menu + +@node Shortcomings +@section Suggested Projects for Improving @acronym{GNU} @command{diff} and @command{patch} +@cindex projects for directories + +One should be able to use @acronym{GNU} @command{diff} to generate a +patch from any pair of directory trees, and given the patch and a copy +of one such tree, use @command{patch} to generate a faithful copy of +the other. Unfortunately, some changes to directory trees cannot be +expressed using current patch formats; also, @command{patch} does not +handle some of the existing formats. These shortcomings motivate the +following suggested projects. + +@menu +* Internationalization:: Handling multibyte and varying-width characters. +* Changing Structure:: Handling changes to the directory structure. +* Special Files:: Handling symbolic links, device special files, etc. +* Unusual File Names:: Handling file names that contain unusual characters. +* Time Stamp Order:: Outputting diffs in time stamp order. +* Ignoring Changes:: Ignoring certain changes while showing others. +* Speedups:: Improving performance. +@end menu + +@node Internationalization +@subsection Handling Multibyte and Varying-Width Characters +@cindex multibyte characters +@cindex varying-width characters + +@command{diff}, @command{diff3} and @command{sdiff} treat each line of +input as a string of unibyte characters. This can mishandle multibyte +characters in some cases. For example, when asked to ignore spaces, +@command{diff} does not properly ignore a multibyte space character. + +Also, @command{diff} currently assumes that each byte is one column +wide, and this assumption is incorrect in some locales, e.g., locales +that use UTF-8 encoding. This causes problems with the @option{-y} or +@option{--side-by-side} option of @command{diff}. + +These problems need to be fixed without unduly affecting the +performance of the utilities in unibyte environments. + +The IBM GNU/Linux Technology Center Internationalization Team has +proposed +@uref{http://oss.software.ibm.com/developer/opensource/linux/patches/i18n/diffutils-2.7.2-i18n-0.1.patch.gz,patches +to support internationalized @command{diff}}. +Unfortunately, these patches are incomplete and are to an older +version of @command{diff}, so more work needs to be done in this area. + +@node Changing Structure +@subsection Handling Changes to the Directory Structure +@cindex directory structure changes + +@command{diff} and @command{patch} do not handle some changes to directory +structure. For example, suppose one directory tree contains a directory +named @samp{D} with some subsidiary files, and another contains a file +with the same name @samp{D}. @samp{diff -r} does not output enough +information for @command{patch} to transform the directory subtree into +the file. + +There should be a way to specify that a file has been removed without +having to include its entire contents in the patch file. There should +also be a way to tell @command{patch} that a file was renamed, even if +there is no way for @command{diff} to generate such information. +There should be a way to tell @command{patch} that a file's time stamp +has changed, even if its contents have not changed. + +These problems can be fixed by extending the @command{diff} output format +to represent changes in directory structure, and extending @command{patch} +to understand these extensions. + +@node Special Files +@subsection Files that are Neither Directories Nor Regular Files +@cindex special files + +Some files are neither directories nor regular files: they are unusual +files like symbolic links, device special files, named pipes, and +sockets. Currently, @command{diff} treats symbolic links as if they +were the pointed-to files, except that a recursive @command{diff} +reports an error if it detects infinite loops of symbolic links (e.g., +symbolic links to @file{..}). @command{diff} treats other special +files like regular files if they are specified at the top level, but +simply reports their presence when comparing directories. This means +that @command{patch} cannot represent changes to such files. For +example, if you change which file a symbolic link points to, +@command{diff} outputs the difference between the two files, instead +of the change to the symbolic link. + +@c This might not be a good idea; is it wise for root to install devices +@c this way? +@command{diff} should optionally report changes to special files specially, +and @command{patch} should be extended to understand these extensions. + +@node Unusual File Names +@subsection File Names that Contain Unusual Characters +@cindex file names with unusual characters + +When a file name contains an unusual character like a newline or +white space, @samp{diff -r} generates a patch that @command{patch} cannot +parse. The problem is with format of @command{diff} output, not just with +@command{patch}, because with odd enough file names one can cause +@command{diff} to generate a patch that is syntactically correct but +patches the wrong files. The format of @command{diff} output should be +extended to handle all possible file names. + +@node Time Stamp Order +@subsection Outputting Diffs in Time Stamp Order + +Applying @command{patch} to a multiple-file diff can result in files +whose time stamps are out of order. @acronym{GNU} @command{patch} has +options to restore the time stamps of the updated files +(@pxref{Patching Time Stamps}), but sometimes it is useful to generate +a patch that works even if the recipient does not have @acronym{GNU} patch, +or does not use these options. One way to do this would be to +implement a @command{diff} option to output diffs in time stamp order. + +@node Ignoring Changes +@subsection Ignoring Certain Changes + +It would be nice to have a feature for specifying two strings, one in +@var{from-file} and one in @var{to-file}, which should be considered to +match. Thus, if the two strings are @samp{foo} and @samp{bar}, then if +two lines differ only in that @samp{foo} in file 1 corresponds to +@samp{bar} in file 2, the lines are treated as identical. + +It is not clear how general this feature can or should be, or +what syntax should be used for it. + +A partial substitute is to filter one or both files before comparing, +e.g.: + +@example +sed 's/foo/bar/g' file1 | diff - file2 +@end example + +However, this outputs the filtered text, not the original. + +@node Speedups +@subsection Improving Performance + +When comparing two large directory structures, one of which was +originally copied from the other with time stamps preserved (e.g., +with @samp{cp -pR}), it would greatly improve performance if an option +told @command{diff} to assume that two files with the same size and +time stamps have the same content. @xref{diff Performance}. + +@node Bugs +@section Reporting Bugs +@cindex bug reports +@cindex reporting bugs + +If you think you have found a bug in @acronym{GNU} @command{cmp}, +@command{diff}, @command{diff3}, or @command{sdiff}, please report it +by electronic mail to the +@uref{http://mail.gnu.org/mailman/listinfo/bug-gnu-utils,GNU utilities +bug report mailing list} @email{bug-gnu-utils@@gnu.org}. Please send +bug reports for @acronym{GNU} @command{patch} to +@email{bug-patch@@gnu.org}. Send as precise a description of the +problem as you can, including the output of the @option{--version} +option and sample input files that produce the bug, if applicable. If +you have a nontrivial fix for the bug, please send it as well. If you +have a patch, please send it too. It may simplify the maintainer's +job if the patch is relative to a recent test release, which you can +find in the directory @uref{ftp://alpha.gnu.org/gnu/diffutils/}. + +@node Copying This Manual +@appendix Copying This Manual +@include fdl.texi + +@node Translations +@appendix Translations of This Manual + +Nishio Futoshi of the GNUjdoc project has prepared a Japanese +translation of this manual. Its most recent version can be found at +@uref{http://openlab.ring.gr.jp/gnujdoc/cvsweb/cvsweb.cgi/gnujdoc/}. + +@node Index +@appendix Index + +@printindex cp + +@bye diff --git a/doc/fdl.texi b/doc/fdl.texi new file mode 100644 index 0000000..8805f1a --- /dev/null +++ b/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 +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{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/doc/stamp-vti b/doc/stamp-vti new file mode 100644 index 0000000..3f276ad --- /dev/null +++ b/doc/stamp-vti @@ -0,0 +1,4 @@ +@set UPDATED 15 April 2010 +@set UPDATED-MONTH April 2010 +@set EDITION 3.0 +@set VERSION 3.0 diff --git a/doc/version.texi b/doc/version.texi new file mode 100644 index 0000000..3f276ad --- /dev/null +++ b/doc/version.texi @@ -0,0 +1,4 @@ +@set UPDATED 15 April 2010 +@set UPDATED-MONTH April 2010 +@set EDITION 3.0 +@set VERSION 3.0 diff --git a/exgettext b/exgettext new file mode 100755 index 0000000..1b2c8f4 --- /dev/null +++ b/exgettext @@ -0,0 +1,113 @@ +#! /bin/sh +# Wrapper around gettext for programs using the msgid convention. + +# Copyright (C) 1998, 2001, 2004, 2009-2010 Free Software Foundation, Inc. + +# Written by Paul Eggert <eggert@twinsun.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 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +# Always operate in the C locale. +LANG=C +LANGUAGE=C +LC_ALL=C +export LANG LANGUAGE LC_ALL + +# Set AWK if environment has not already set it. +AWK=${AWK-awk} + +# The argument to this wrapper is the xgettext command to be executed. +# Extract the xgettext program name from the rest of the command. +xgettext=${1?} +shift + +# Save work if we're just wrapping a no-op. +case $xgettext in +:) exit;; +esac + +# Find the files to be scanned, and the directory to scan them from. +directory=. +files= +for i +do + case $i in + --directory=*) + directory=`expr " $i" : ' --directory=\(.*\)'`;; + --files-from=*) + files_from=`expr " $i" : ' --files-from=\(.*\)'` + files=`$AWK '/^[^#]/ { print }' $files_from`;; + esac +done + +# Generate keyword options for xgettext, +# by scanning for declarations of functions +# whose parameter names end in "msgid". +generate_keyword_options=' + /^[A-Z_a-z].*\(.*msgid[,)]/ { + + paren_index = index($0, "(") + + name = substr($0, 1, paren_index - 1) + sub(/[^0-9A-Z_a-z]*$/, "", name) + sub(/[ ]+PARAMS/, "", name) + sub(/[ ]+VPARAMS/, "", name) + sub(/.*[^0-9A-Z_a-z]/, "", name) + + args = substr($0, paren_index) + sub(/msgid[,)].*/, "", args) + for (n = 1; sub(/^[^,]*,/, "", args); n++) { + continue; + } + + if (n == 1) { + keyword = name + } else { + keyword = name ":" n + } + + if (! keyword_seen[keyword]++) { + print "--keyword=" keyword + } + } +' +keyword_options=`( + cd $directory && + $AWK "$generate_keyword_options" $files < /dev/null +)` || exit + +# Run the xgettext command, with extra input containing the extra +# msgids that it wouldn't normally find. +generate_emsgids=' + /%e.*}/ { + line = $0 + while ((percent_index = index(line, "%e")) != 0) { + line = substr(line, percent_index + 2) + bracket_index = index(line, "}") + if (bracket_index == 0) { + continue + } + msgid = substr(line, 1, bracket_index - 1) + if (index(msgid, "%") != 0) { + continue + } + printf "#line %d \"%s\"\n", FNR, FILENAME + printf "_(\"%s\")\n", msgid + line = substr(line, bracket_index + 1) + } + } +' +(cd $directory && + $AWK "$generate_emsgids" $files < /dev/null +) | "$xgettext" $keyword_options ${1+"$@"} - diff --git a/gnulib-tests/Makefile.am b/gnulib-tests/Makefile.am new file mode 100644 index 0000000..6635f70 --- /dev/null +++ b/gnulib-tests/Makefile.am @@ -0,0 +1 @@ +include gnulib.mk diff --git a/gnulib-tests/Makefile.in b/gnulib-tests/Makefile.in new file mode 100644 index 0000000..9386924 --- /dev/null +++ b/gnulib-tests/Makefile.in @@ -0,0 +1,2661 @@ +# Makefile.in generated by automake 1.11a from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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-2010 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. 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. + + + +VPATH = @srcdir@ +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@ +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/gnulib.mk +TESTS = test-alloca-opt$(EXEEXT) test-argmatch$(EXEEXT) \ + test-binary-io.sh test-bitrotate$(EXEEXT) test-btowc1.sh \ + test-btowc2.sh test-c-ctype$(EXEEXT) test-c-stack.sh \ + test-c-stack2.sh test-c-strcase.sh test-dirname$(EXEEXT) \ + test-dup2$(EXEEXT) test-environ$(EXEEXT) test-errno$(EXEEXT) \ + test-exclude1.sh test-exclude2.sh test-exclude3.sh \ + test-exclude4.sh test-exclude5.sh test-exclude6.sh \ + test-exclude7.sh test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) \ + test-fnmatch$(EXEEXT) test-freopen-safer$(EXEEXT) \ + test-freopen$(EXEEXT) test-getdtablesize$(EXEEXT) \ + test-getopt$(EXEEXT) test-gettimeofday$(EXEEXT) \ + test-hash$(EXEEXT) test-iconv-h$(EXEEXT) test-iconv$(EXEEXT) \ + test-inttypes$(EXEEXT) test-langinfo$(EXEEXT) \ + test-lstat$(EXEEXT) test-malloca$(EXEEXT) test-mbrtowc1.sh \ + test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh \ + test-mbscasecmp.sh test-mbsinit.sh test-mbsrtowcs1.sh \ + test-mbsrtowcs2.sh test-mbsrtowcs3.sh test-mbsrtowcs4.sh \ + test-mbsstr1$(EXEEXT) test-mbsstr2.sh test-mbsstr3.sh \ + test-memchr$(EXEEXT) test-nl_langinfo.sh test-open$(EXEEXT) \ + test-quotearg.sh test-setenv$(EXEEXT) test-sigaction$(EXEEXT) \ + test-signal$(EXEEXT) test-sleep$(EXEEXT) test-stat$(EXEEXT) \ + test-stat-time$(EXEEXT) test-stdbool$(EXEEXT) \ + test-stddef$(EXEEXT) test-stdint$(EXEEXT) test-stdio$(EXEEXT) \ + test-stdlib$(EXEEXT) test-strerror$(EXEEXT) \ + test-striconv$(EXEEXT) test-string$(EXEEXT) \ + test-strings$(EXEEXT) test-symlink$(EXEEXT) \ + test-sys_stat$(EXEEXT) test-sys_time$(EXEEXT) \ + test-sys_wait$(EXEEXT) test-time$(EXEEXT) test-unistd$(EXEEXT) \ + test-uc_width$(EXEEXT) uniwidth/test-uc_width2.sh \ + test-unsetenv$(EXEEXT) test-update-copyright.sh \ + test-usleep$(EXEEXT) test-vc-list-files-git.sh \ + test-vc-list-files-cvs.sh test-version-etc.sh \ + test-wchar$(EXEEXT) test-wcrtomb.sh test-wctype$(EXEEXT) \ + test-wcwidth$(EXEEXT) test-xalloc-die.sh test-xstrtol.sh \ + test-xstrtoumax.sh +XFAIL_TESTS = +noinst_PROGRAMS = +check_PROGRAMS = test-alloca-opt$(EXEEXT) test-argmatch$(EXEEXT) \ + test-binary-io$(EXEEXT) test-bitrotate$(EXEEXT) \ + test-btowc$(EXEEXT) test-c-ctype$(EXEEXT) \ + test-c-stack$(EXEEXT) test-c-strcasecmp$(EXEEXT) \ + test-c-strncasecmp$(EXEEXT) test-dirname$(EXEEXT) \ + test-dup2$(EXEEXT) test-environ$(EXEEXT) test-errno$(EXEEXT) \ + test-exclude$(EXEEXT) test-fcntl-h$(EXEEXT) \ + test-fcntl$(EXEEXT) test-fnmatch$(EXEEXT) \ + test-freopen-safer$(EXEEXT) test-freopen$(EXEEXT) \ + test-getdtablesize$(EXEEXT) test-getopt$(EXEEXT) \ + test-gettimeofday$(EXEEXT) test-hash$(EXEEXT) \ + test-iconv-h$(EXEEXT) test-iconv$(EXEEXT) \ + test-inttypes$(EXEEXT) test-langinfo$(EXEEXT) \ + test-lstat$(EXEEXT) test-malloca$(EXEEXT) \ + test-mbrtowc$(EXEEXT) test-mbscasecmp$(EXEEXT) \ + test-mbsinit$(EXEEXT) test-mbsrtowcs$(EXEEXT) \ + test-mbsstr1$(EXEEXT) test-mbsstr2$(EXEEXT) \ + test-mbsstr3$(EXEEXT) test-memchr$(EXEEXT) \ + test-nl_langinfo$(EXEEXT) test-open$(EXEEXT) \ + test-quotearg$(EXEEXT) test-setenv$(EXEEXT) \ + test-sigaction$(EXEEXT) test-signal$(EXEEXT) \ + test-sleep$(EXEEXT) test-stat$(EXEEXT) test-stat-time$(EXEEXT) \ + test-stdbool$(EXEEXT) test-stddef$(EXEEXT) \ + test-stdint$(EXEEXT) test-stdio$(EXEEXT) test-stdlib$(EXEEXT) \ + test-strerror$(EXEEXT) test-striconv$(EXEEXT) \ + test-string$(EXEEXT) test-strings$(EXEEXT) \ + test-symlink$(EXEEXT) test-sys_stat$(EXEEXT) \ + test-sys_time$(EXEEXT) test-sys_wait$(EXEEXT) \ + test-time$(EXEEXT) test-unistd$(EXEEXT) test-uc_width$(EXEEXT) \ + test-uc_width2$(EXEEXT) test-unsetenv$(EXEEXT) \ + test-usleep$(EXEEXT) test-version-etc$(EXEEXT) \ + test-wchar$(EXEEXT) test-wcrtomb$(EXEEXT) test-wctype$(EXEEXT) \ + test-wcwidth$(EXEEXT) test-xalloc-die$(EXEEXT) \ + test-xstrtol$(EXEEXT) test-xstrtoul$(EXEEXT) \ + test-xstrtoumax$(EXEEXT) +subdir = gnulib-tests +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/c-stack.m4 \ + $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.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/exclude.m4 \ + $(top_srcdir)/m4/extensions.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/file-type.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/freopen.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21_gl.m4 $(top_srcdir)/m4/gnu-make.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \ + $(top_srcdir)/m4/iconv_open.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lib-ld_gl.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix_gl.m4 \ + $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-tr.m4 \ + $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/longlong_gl.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/manywarnings.m4 \ + $(top_srcdir)/m4/mbchar.m4 $(top_srcdir)/m4/mbiter.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbslen.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/memchr.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/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/onceonly.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po_gl.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/putenv.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.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/stdio-safer.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/strftime.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strptime.m4 \ + $(top_srcdir)/m4/strtoimax.m4 $(top_srcdir)/m4/strtol.m4 \ + $(top_srcdir)/m4/strtoll.m4 $(top_srcdir)/m4/strtoul.m4 \ + $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/strtoumax.m4 \ + $(top_srcdir)/m4/symlink.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/time_h.m4 \ + $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/vararrays.m4 \ + $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.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/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \ + $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xstrtol.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +AM_V_AR = $(am__v_AR_$(V)) +am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY)) +am__v_AR_0 = @echo " AR " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +libtests_a_AR = $(AR) $(ARFLAGS) +am__DEPENDENCIES_1 = +am_libtests_a_OBJECTS = hash-pjw.$(OBJEXT) +libtests_a_OBJECTS = $(am_libtests_a_OBJECTS) +PROGRAMS = $(noinst_PROGRAMS) +test_alloca_opt_SOURCES = test-alloca-opt.c +test_alloca_opt_OBJECTS = test-alloca-opt.$(OBJEXT) +test_alloca_opt_LDADD = $(LDADD) +test_alloca_opt_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_argmatch_SOURCES = test-argmatch.c +test_argmatch_OBJECTS = test-argmatch.$(OBJEXT) +am__DEPENDENCIES_2 = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_argmatch_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_binary_io_SOURCES = test-binary-io.c +test_binary_io_OBJECTS = test-binary-io.$(OBJEXT) +test_binary_io_LDADD = $(LDADD) +test_binary_io_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_bitrotate_SOURCES = test-bitrotate.c +test_bitrotate_OBJECTS = test-bitrotate.$(OBJEXT) +test_bitrotate_LDADD = $(LDADD) +test_bitrotate_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_btowc_SOURCES = test-btowc.c +test_btowc_OBJECTS = test-btowc.$(OBJEXT) +test_btowc_LDADD = $(LDADD) +test_btowc_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_c_ctype_SOURCES = test-c-ctype.c +test_c_ctype_OBJECTS = test-c-ctype.$(OBJEXT) +test_c_ctype_LDADD = $(LDADD) +test_c_ctype_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_c_stack_SOURCES = test-c-stack.c +test_c_stack_OBJECTS = test-c-stack.$(OBJEXT) +test_c_stack_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) +test_c_strcasecmp_SOURCES = test-c-strcasecmp.c +test_c_strcasecmp_OBJECTS = test-c-strcasecmp.$(OBJEXT) +test_c_strcasecmp_LDADD = $(LDADD) +test_c_strcasecmp_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_c_strncasecmp_SOURCES = test-c-strncasecmp.c +test_c_strncasecmp_OBJECTS = test-c-strncasecmp.$(OBJEXT) +test_c_strncasecmp_LDADD = $(LDADD) +test_c_strncasecmp_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_dirname_SOURCES = test-dirname.c +test_dirname_OBJECTS = test-dirname.$(OBJEXT) +test_dirname_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_dup2_SOURCES = test-dup2.c +test_dup2_OBJECTS = test-dup2.$(OBJEXT) +test_dup2_LDADD = $(LDADD) +test_dup2_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_environ_SOURCES = test-environ.c +test_environ_OBJECTS = test-environ.$(OBJEXT) +test_environ_LDADD = $(LDADD) +test_environ_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_errno_SOURCES = test-errno.c +test_errno_OBJECTS = test-errno.$(OBJEXT) +test_errno_LDADD = $(LDADD) +test_errno_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_exclude_SOURCES = test-exclude.c +test_exclude_OBJECTS = test-exclude.$(OBJEXT) +test_exclude_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_fcntl_SOURCES = test-fcntl.c +test_fcntl_OBJECTS = test-fcntl.$(OBJEXT) +test_fcntl_LDADD = $(LDADD) +test_fcntl_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fcntl_h_SOURCES = test-fcntl-h.c +test_fcntl_h_OBJECTS = test-fcntl-h.$(OBJEXT) +test_fcntl_h_LDADD = $(LDADD) +test_fcntl_h_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_fnmatch_SOURCES = test-fnmatch.c +test_fnmatch_OBJECTS = test-fnmatch.$(OBJEXT) +test_fnmatch_LDADD = $(LDADD) +test_fnmatch_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_freopen_SOURCES = test-freopen.c +test_freopen_OBJECTS = test-freopen.$(OBJEXT) +test_freopen_LDADD = $(LDADD) +test_freopen_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_freopen_safer_SOURCES = test-freopen-safer.c +test_freopen_safer_OBJECTS = test-freopen-safer.$(OBJEXT) +test_freopen_safer_LDADD = $(LDADD) +test_freopen_safer_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_getdtablesize_SOURCES = test-getdtablesize.c +test_getdtablesize_OBJECTS = test-getdtablesize.$(OBJEXT) +test_getdtablesize_LDADD = $(LDADD) +test_getdtablesize_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_getopt_SOURCES = test-getopt.c +test_getopt_OBJECTS = test-getopt.$(OBJEXT) +test_getopt_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +test_gettimeofday_SOURCES = test-gettimeofday.c +test_gettimeofday_OBJECTS = test-gettimeofday.$(OBJEXT) +test_gettimeofday_LDADD = $(LDADD) +test_gettimeofday_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_hash_SOURCES = test-hash.c +test_hash_OBJECTS = test-hash.$(OBJEXT) +test_hash_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_iconv_SOURCES = test-iconv.c +test_iconv_OBJECTS = test-iconv.$(OBJEXT) +test_iconv_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_iconv_h_SOURCES = test-iconv-h.c +test_iconv_h_OBJECTS = test-iconv-h.$(OBJEXT) +test_iconv_h_LDADD = $(LDADD) +test_iconv_h_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_inttypes_SOURCES = test-inttypes.c +test_inttypes_OBJECTS = test-inttypes.$(OBJEXT) +test_inttypes_LDADD = $(LDADD) +test_inttypes_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_langinfo_SOURCES = test-langinfo.c +test_langinfo_OBJECTS = test-langinfo.$(OBJEXT) +test_langinfo_LDADD = $(LDADD) +test_langinfo_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_lstat_SOURCES = test-lstat.c +test_lstat_OBJECTS = test-lstat.$(OBJEXT) +test_lstat_LDADD = $(LDADD) +test_lstat_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_malloca_SOURCES = test-malloca.c +test_malloca_OBJECTS = test-malloca.$(OBJEXT) +test_malloca_LDADD = $(LDADD) +test_malloca_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_mbrtowc_SOURCES = test-mbrtowc.c +test_mbrtowc_OBJECTS = test-mbrtowc.$(OBJEXT) +test_mbrtowc_LDADD = $(LDADD) +test_mbrtowc_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_mbscasecmp_SOURCES = test-mbscasecmp.c +test_mbscasecmp_OBJECTS = test-mbscasecmp.$(OBJEXT) +test_mbscasecmp_LDADD = $(LDADD) +test_mbscasecmp_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_mbsinit_SOURCES = test-mbsinit.c +test_mbsinit_OBJECTS = test-mbsinit.$(OBJEXT) +test_mbsinit_LDADD = $(LDADD) +test_mbsinit_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_mbsrtowcs_SOURCES = test-mbsrtowcs.c +test_mbsrtowcs_OBJECTS = test-mbsrtowcs.$(OBJEXT) +test_mbsrtowcs_LDADD = $(LDADD) +test_mbsrtowcs_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_mbsstr1_SOURCES = test-mbsstr1.c +test_mbsstr1_OBJECTS = test-mbsstr1.$(OBJEXT) +test_mbsstr1_LDADD = $(LDADD) +test_mbsstr1_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_mbsstr2_SOURCES = test-mbsstr2.c +test_mbsstr2_OBJECTS = test-mbsstr2.$(OBJEXT) +test_mbsstr2_LDADD = $(LDADD) +test_mbsstr2_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_mbsstr3_SOURCES = test-mbsstr3.c +test_mbsstr3_OBJECTS = test-mbsstr3.$(OBJEXT) +test_mbsstr3_LDADD = $(LDADD) +test_mbsstr3_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_memchr_SOURCES = test-memchr.c +test_memchr_OBJECTS = test-memchr.$(OBJEXT) +test_memchr_LDADD = $(LDADD) +test_memchr_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_nl_langinfo_SOURCES = test-nl_langinfo.c +test_nl_langinfo_OBJECTS = test-nl_langinfo.$(OBJEXT) +test_nl_langinfo_LDADD = $(LDADD) +test_nl_langinfo_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_open_SOURCES = test-open.c +test_open_OBJECTS = test-open.$(OBJEXT) +test_open_LDADD = $(LDADD) +test_open_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_quotearg_SOURCES = test-quotearg.c +test_quotearg_OBJECTS = test-quotearg.$(OBJEXT) +test_quotearg_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_setenv_SOURCES = test-setenv.c +test_setenv_OBJECTS = test-setenv.$(OBJEXT) +test_setenv_LDADD = $(LDADD) +test_setenv_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_sigaction_SOURCES = test-sigaction.c +test_sigaction_OBJECTS = test-sigaction.$(OBJEXT) +test_sigaction_LDADD = $(LDADD) +test_sigaction_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_signal_SOURCES = test-signal.c +test_signal_OBJECTS = test-signal.$(OBJEXT) +test_signal_LDADD = $(LDADD) +test_signal_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_sleep_SOURCES = test-sleep.c +test_sleep_OBJECTS = test-sleep.$(OBJEXT) +test_sleep_LDADD = $(LDADD) +test_sleep_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stat_SOURCES = test-stat.c +test_stat_OBJECTS = test-stat.$(OBJEXT) +test_stat_LDADD = $(LDADD) +test_stat_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stat_time_SOURCES = test-stat-time.c +test_stat_time_OBJECTS = test-stat-time.$(OBJEXT) +test_stat_time_LDADD = $(LDADD) +test_stat_time_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_stdbool_SOURCES = test-stdbool.c +test_stdbool_OBJECTS = test-stdbool.$(OBJEXT) +test_stdbool_LDADD = $(LDADD) +test_stdbool_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_stddef_SOURCES = test-stddef.c +test_stddef_OBJECTS = test-stddef.$(OBJEXT) +test_stddef_LDADD = $(LDADD) +test_stddef_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stdint_SOURCES = test-stdint.c +test_stdint_OBJECTS = test-stdint.$(OBJEXT) +test_stdint_LDADD = $(LDADD) +test_stdint_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stdio_SOURCES = test-stdio.c +test_stdio_OBJECTS = test-stdio.$(OBJEXT) +test_stdio_LDADD = $(LDADD) +test_stdio_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stdlib_SOURCES = test-stdlib.c +test_stdlib_OBJECTS = test-stdlib.$(OBJEXT) +test_stdlib_LDADD = $(LDADD) +test_stdlib_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_strerror_SOURCES = test-strerror.c +test_strerror_OBJECTS = test-strerror.$(OBJEXT) +test_strerror_LDADD = $(LDADD) +test_strerror_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_striconv_SOURCES = test-striconv.c +test_striconv_OBJECTS = test-striconv.$(OBJEXT) +test_striconv_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_string_SOURCES = test-string.c +test_string_OBJECTS = test-string.$(OBJEXT) +test_string_LDADD = $(LDADD) +test_string_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_strings_SOURCES = test-strings.c +test_strings_OBJECTS = test-strings.$(OBJEXT) +test_strings_LDADD = $(LDADD) +test_strings_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_symlink_SOURCES = test-symlink.c +test_symlink_OBJECTS = test-symlink.$(OBJEXT) +test_symlink_LDADD = $(LDADD) +test_symlink_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_sys_stat_SOURCES = test-sys_stat.c +test_sys_stat_OBJECTS = test-sys_stat.$(OBJEXT) +test_sys_stat_LDADD = $(LDADD) +test_sys_stat_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_sys_time_SOURCES = test-sys_time.c +test_sys_time_OBJECTS = test-sys_time.$(OBJEXT) +test_sys_time_LDADD = $(LDADD) +test_sys_time_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_sys_wait_SOURCES = test-sys_wait.c +test_sys_wait_OBJECTS = test-sys_wait.$(OBJEXT) +test_sys_wait_LDADD = $(LDADD) +test_sys_wait_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_time_SOURCES = test-time.c +test_time_OBJECTS = test-time.$(OBJEXT) +test_time_LDADD = $(LDADD) +test_time_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +am__dirstamp = $(am__leading_dot)dirstamp +am_test_uc_width_OBJECTS = uniwidth/test-uc_width.$(OBJEXT) +test_uc_width_OBJECTS = $(am_test_uc_width_OBJECTS) +test_uc_width_LDADD = $(LDADD) +test_uc_width_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +am_test_uc_width2_OBJECTS = uniwidth/test-uc_width2.$(OBJEXT) +test_uc_width2_OBJECTS = $(am_test_uc_width2_OBJECTS) +test_uc_width2_LDADD = $(LDADD) +test_uc_width2_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_unistd_SOURCES = test-unistd.c +test_unistd_OBJECTS = test-unistd.$(OBJEXT) +test_unistd_LDADD = $(LDADD) +test_unistd_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_unsetenv_SOURCES = test-unsetenv.c +test_unsetenv_OBJECTS = test-unsetenv.$(OBJEXT) +test_unsetenv_LDADD = $(LDADD) +test_unsetenv_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_usleep_SOURCES = test-usleep.c +test_usleep_OBJECTS = test-usleep.$(OBJEXT) +test_usleep_LDADD = $(LDADD) +test_usleep_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_version_etc_SOURCES = test-version-etc.c +test_version_etc_OBJECTS = test-version-etc.$(OBJEXT) +test_version_etc_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_wchar_SOURCES = test-wchar.c +test_wchar_OBJECTS = test-wchar.$(OBJEXT) +test_wchar_LDADD = $(LDADD) +test_wchar_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_wcrtomb_SOURCES = test-wcrtomb.c +test_wcrtomb_OBJECTS = test-wcrtomb.$(OBJEXT) +test_wcrtomb_LDADD = $(LDADD) +test_wcrtomb_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_wctype_SOURCES = test-wctype.c +test_wctype_OBJECTS = test-wctype.$(OBJEXT) +test_wctype_LDADD = $(LDADD) +test_wctype_DEPENDENCIES = libtests.a ../lib/libdiffutils.a libtests.a \ + $(am__DEPENDENCIES_1) +test_wcwidth_SOURCES = test-wcwidth.c +test_wcwidth_OBJECTS = test-wcwidth.$(OBJEXT) +test_wcwidth_LDADD = $(LDADD) +test_wcwidth_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \ + libtests.a $(am__DEPENDENCIES_1) +test_xalloc_die_SOURCES = test-xalloc-die.c +test_xalloc_die_OBJECTS = test-xalloc-die.$(OBJEXT) +test_xalloc_die_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_xstrtol_SOURCES = test-xstrtol.c +test_xstrtol_OBJECTS = test-xstrtol.$(OBJEXT) +test_xstrtol_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_xstrtoul_SOURCES = test-xstrtoul.c +test_xstrtoul_OBJECTS = test-xstrtoul.$(OBJEXT) +test_xstrtoul_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_xstrtoumax_SOURCES = test-xstrtoumax.c +test_xstrtoumax_OBJECTS = test-xstrtoumax.$(OBJEXT) +test_xstrtoumax_DEPENDENCIES = $(am__DEPENDENCIES_2) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/lib +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_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +CCLD = $(CC) +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_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ + test-alloca-opt.c test-argmatch.c test-binary-io.c \ + test-bitrotate.c test-btowc.c test-c-ctype.c test-c-stack.c \ + test-c-strcasecmp.c test-c-strncasecmp.c test-dirname.c \ + test-dup2.c test-environ.c test-errno.c test-exclude.c \ + test-fcntl.c test-fcntl-h.c test-fnmatch.c test-freopen.c \ + test-freopen-safer.c test-getdtablesize.c test-getopt.c \ + test-gettimeofday.c test-hash.c test-iconv.c test-iconv-h.c \ + test-inttypes.c test-langinfo.c test-lstat.c test-malloca.c \ + test-mbrtowc.c test-mbscasecmp.c test-mbsinit.c \ + test-mbsrtowcs.c test-mbsstr1.c test-mbsstr2.c test-mbsstr3.c \ + test-memchr.c test-nl_langinfo.c test-open.c test-quotearg.c \ + test-setenv.c test-sigaction.c test-signal.c test-sleep.c \ + test-stat.c test-stat-time.c test-stdbool.c test-stddef.c \ + test-stdint.c test-stdio.c test-stdlib.c test-strerror.c \ + test-striconv.c test-string.c test-strings.c test-symlink.c \ + test-sys_stat.c test-sys_time.c test-sys_wait.c test-time.c \ + $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ + test-unistd.c test-unsetenv.c test-usleep.c test-version-etc.c \ + test-wchar.c test-wcrtomb.c test-wctype.c test-wcwidth.c \ + test-xalloc-die.c test-xstrtol.c test-xstrtoul.c \ + test-xstrtoumax.c +DIST_SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ + test-alloca-opt.c test-argmatch.c test-binary-io.c \ + test-bitrotate.c test-btowc.c test-c-ctype.c test-c-stack.c \ + test-c-strcasecmp.c test-c-strncasecmp.c test-dirname.c \ + test-dup2.c test-environ.c test-errno.c test-exclude.c \ + test-fcntl.c test-fcntl-h.c test-fnmatch.c test-freopen.c \ + test-freopen-safer.c test-getdtablesize.c test-getopt.c \ + test-gettimeofday.c test-hash.c test-iconv.c test-iconv-h.c \ + test-inttypes.c test-langinfo.c test-lstat.c test-malloca.c \ + test-mbrtowc.c test-mbscasecmp.c test-mbsinit.c \ + test-mbsrtowcs.c test-mbsstr1.c test-mbsstr2.c test-mbsstr3.c \ + test-memchr.c test-nl_langinfo.c test-open.c test-quotearg.c \ + test-setenv.c test-sigaction.c test-signal.c test-sleep.c \ + test-stat.c test-stat-time.c test-stdbool.c test-stddef.c \ + test-stdint.c test-stdio.c test-stdlib.c test-strerror.c \ + test-striconv.c test-string.c test-strings.c test-symlink.c \ + test-sys_stat.c test-sys_time.c test-sys_wait.c test-time.c \ + $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ + test-unistd.c test-unsetenv.c test-usleep.c test-version-etc.c \ + test-wchar.c test-wcrtomb.c test-wctype.c test-wcwidth.c \ + test-xalloc-die.c test-xstrtol.c test-xstrtoul.c \ + test-xstrtoumax.c +RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive +HEADERS = $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + check check-html recheck recheck-html distdir +ETAGS = etags +CTAGS = ctags +# If stdout is a non-dumb tty, use colors. If test -t is not supported, +# then this fails; a conservative approach. Of course do not redirect +# stdout here, just stderr. +am__tty_colors = \ +red=; grn=; lgn=; blu=; std=; \ +test "X$(AM_COLOR_TESTS)" != Xno \ +&& test "X$$TERM" != Xdumb \ +&& { test "X$(AM_COLOR_TESTS)" = Xalways || test -t 1 2>/dev/null; } \ +&& { \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + std=''; \ +} +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' +# Restructured Text title and section. +am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//' +am__rst_section = sed 'p;s/./=/g;p;g' +# Put stdin (possibly several lines separated by ". ") in a box. +am__text_box = $(AWK) '{ \ + n = split($$0, lines, "\\. "); max = 0; \ + for (i = 1; i <= n; ++i) \ + if (max < length(lines[i])) \ + max = length(lines[i]); \ + for (i = 0; i < max; ++i) line = line "="; \ + print line; \ + for (i = 1; i <= n; ++i) if (lines[i]) print lines[i];\ + print line; \ +}' +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL). This contradicts POSIX. Work around the problem +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# 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, and passes +# TESTS_ENVIRONMENT. Save and restore TERM around use of +# TESTS_ENVIRONMENT, in case that unsets it. +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +srcdir=$(srcdir); export srcdir; \ +rm -f $@-t; \ +am__trap='rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st'; \ +trap "st=129; $$am__trap" 1; trap "st=130; $$am__trap" 2; \ +trap "st=141; $$am__trap" 13; trap "st=143; $$am__trap" 15; \ +am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \ +test "x$$am__odir" = x. || $(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='$@'; __SAVED_TERM=$$TERM; \ +$(TESTS_ENVIRONMENT) +RECHECK_LOGS = $(TEST_LOGS) +TEST_SUITE_LOG = test-suite.log +TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t) +DIST_SUBDIRS = $(SUBDIRS) +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@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +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@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +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@ +FNMATCH_H = @FNMATCH_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +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_FFLUSH = @GNULIB_FFLUSH@ +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_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +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_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_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +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_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_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STAT = @GNULIB_STAT@ +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_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_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ +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_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WARN_CFLAGS = @GNULIB_WARN_CFLAGS@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +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_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +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_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_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +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_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +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_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LIBSIGSEGV = @HAVE_LIBSIGSEGV@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOCALTIME_R = @HAVE_LOCALTIME_R@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +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_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +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_SLEEP = @HAVE_SLEEP@ +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_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_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_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_TIMEGM = @HAVE_TIMEGM@ +HAVE_TTYNAME_R = @HAVE_TTYNAME_R@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +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_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HELP2MAN = @HELP2MAN@ +ICONV_H = @ICONV_H@ +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@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBDIFFUTILS_LIBDEPS = @LIBDIFFUTILS_LIBDEPS@ +LIBDIFFUTILS_LTLIBDEPS = @LIBDIFFUTILS_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSIGSEGV = @LIBSIGSEGV@ +LIBSIGSEGV_PREFIX = @LIBSIGSEGV_PREFIX@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +MAKEINFO = @MAKEINFO@ +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_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_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_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_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_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_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_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_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_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_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@ +OBJEXT = @OBJEXT@ +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@ +POSUB = @POSUB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PR_PROGRAM = @PR_PROGRAM@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +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_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +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_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_NANOSLEEP = @REPLACE_NANOSLEEP@ +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_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +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_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +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_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +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_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_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_aux_dir = @abs_aux_dir@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +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@ +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@ +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@ +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.5 foreign subdir-objects +SUBDIRS = . +TESTS_ENVIRONMENT = EXEEXT='@EXEEXT@' srcdir='$(srcdir)' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LIBSIGSEGV='@LIBSIGSEGV@' LOCALE_FR='@LOCALE_FR@' \ + LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + PATH='$(abs_aux_dir)'$(PATH_SEPARATOR)"$$PATH" \ + PATH='$(abs_aux_dir)'$(PATH_SEPARATOR)"$$PATH" \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' +noinst_HEADERS = +noinst_LIBRARIES = +check_LIBRARIES = libtests.a +EXTRA_DIST = test-alloca-opt.c $(top_srcdir)/build-aux/arg-nonnull.h \ + argmatch.c argmatch.h test-argmatch.c macros.h \ + test-binary-io.sh test-binary-io.c macros.h test-bitrotate.c \ + macros.h test-btowc1.sh test-btowc2.sh test-btowc.c \ + signature.h macros.h $(top_srcdir)/build-aux/c++defs.h \ + test-c-ctype.c macros.h test-c-stack.c test-c-stack.sh \ + test-c-stack2.sh macros.h test-c-strcase.sh \ + test-c-strcasecmp.c test-c-strncasecmp.c macros.h \ + test-dirname.c test-dup2.c signature.h macros.h test-environ.c \ + test-errno.c test-exclude.c test-exclude1.sh test-exclude2.sh \ + test-exclude3.sh test-exclude4.sh test-exclude5.sh \ + test-exclude6.sh test-exclude7.sh test-fcntl-h.c test-fcntl.c \ + signature.h macros.h test-fnmatch.c signature.h macros.h \ + test-freopen-safer.c macros.h test-freopen.c signature.h \ + macros.h test-getdtablesize.c signature.h macros.h macros.h \ + signature.h test-getopt.c test-getopt.h test-getopt_long.h \ + signature.h test-gettimeofday.c test-hash.c macros.h \ + test-iconv-h.c test-iconv.c signature.h macros.h \ + test-inttypes.c test-langinfo.c test-lstat.h test-lstat.c \ + signature.h macros.h test-malloca.c test-mbrtowc1.sh \ + test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh \ + test-mbrtowc.c signature.h macros.h test-mbscasecmp.sh \ + test-mbscasecmp.c macros.h test-mbsinit.sh test-mbsinit.c \ + signature.h macros.h test-mbsrtowcs1.sh test-mbsrtowcs2.sh \ + test-mbsrtowcs3.sh test-mbsrtowcs4.sh test-mbsrtowcs.c \ + signature.h macros.h test-mbsstr1.c test-mbsstr2.sh \ + test-mbsstr2.c test-mbsstr3.sh test-mbsstr3.c macros.h \ + test-memchr.c zerosize-ptr.h signature.h macros.h \ + test-nl_langinfo.sh test-nl_langinfo.c signature.h macros.h \ + test-open.h test-open.c signature.h macros.h pathmax.h \ + putenv.c test-quotearg.sh test-quotearg.c macros.h \ + locale/fr/LC_MESSAGES/test-quotearg.po \ + locale/fr/LC_MESSAGES/test-quotearg.mo same-inode.h setenv.c \ + test-setenv.c signature.h macros.h test-sigaction.c \ + signature.h macros.h test-signal.c sleep.c test-sleep.c \ + signature.h macros.h test-stat.h test-stat.c signature.h \ + macros.h test-stat-time.c macros.h test-stdbool.c \ + test-stddef.c test-stdint.c test-stdio.c test-stdlib.c \ + test-strerror.c signature.h macros.h test-striconv.c macros.h \ + test-string.c test-strings.c symlink.c test-symlink.h \ + test-symlink.c signature.h macros.h test-sys_stat.c \ + test-sys_time.c test-sys_wait.c test-time.c test-unistd.c \ + uniwidth/test-uc_width.c uniwidth/test-uc_width2.c \ + uniwidth/test-uc_width2.sh macros.h unsetenv.c test-unsetenv.c \ + signature.h macros.h test-update-copyright.sh usleep.c \ + test-usleep.c signature.h macros.h test-vc-list-files-git.sh \ + test-vc-list-files-cvs.sh init.sh test-version-etc.c \ + test-version-etc.sh $(top_srcdir)/build-aux/warn-on-use.h \ + test-wchar.c test-wcrtomb.sh test-wcrtomb.c signature.h \ + macros.h wctob.c test-wctype.c macros.h test-wcwidth.c \ + signature.h macros.h test-xalloc-die.c test-xalloc-die.sh \ + init.sh init.sh test-xstrtol.c test-xstrtoul.c test-xstrtol.sh \ + init.sh test-xstrtoumax.c test-xstrtoumax.sh + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. +BUILT_SOURCES = arg-nonnull.h c++defs.h warn-on-use.h +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump arg-nonnull.h arg-nonnull.h-t \ + c++defs.h c++defs.h-t t-c-stack.tmp t-c-stack2.tmp \ + warn-on-use.h warn-on-use.h-t +MOSTLYCLEANDIRS = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = +AM_CPPFLAGS = \ + -D@gltests_WITNESS@=1 \ + -I. -I$(srcdir) \ + -I.. -I$(srcdir)/.. \ + -I../lib -I$(srcdir)/../lib + +LDADD = libtests.a ../lib/libdiffutils.a libtests.a $(LIBTESTS_LIBDEPS) +libtests_a_SOURCES = binary-io.h hash-pjw.h hash-pjw.c +libtests_a_LIBADD = $(gltests_LIBOBJS) +libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) +EXTRA_libtests_a_SOURCES = argmatch.c putenv.c setenv.c sleep.c \ + symlink.c unsetenv.c usleep.c wctob.c +AM_LIBTOOLFLAGS = --preserve-dup-deps +ARG_NONNULL_H = arg-nonnull.h +test_argmatch_LDADD = $(LDADD) @LIBINTL@ +CXXDEFS_H = c++defs.h +test_c_stack_LDADD = $(LDADD) $(LIBCSTACK) @LIBINTL@ +test_dirname_LDADD = $(LDADD) @LIBINTL@ +test_exclude_LDADD = $(LDADD) @LIBINTL@ +test_getopt_LDADD = $(LDADD) $(LIBINTL) +test_hash_LDADD = $(LDADD) @LIBINTL@ +test_iconv_LDADD = $(LDADD) @LIBICONV@ +test_quotearg_LDADD = $(LDADD) @LIBINTL@ +test_striconv_LDADD = $(LDADD) @LIBICONV@ +test_uc_width_SOURCES = uniwidth/test-uc_width.c +test_uc_width2_SOURCES = uniwidth/test-uc_width2.c +test_version_etc_LDADD = $(LDADD) @LIBINTL@ +WARN_ON_USE_H = warn-on-use.h +test_xalloc_die_LDADD = $(LDADD) @LIBINTL@ +test_xstrtol_LDADD = $(LDADD) @LIBINTL@ +test_xstrtoul_LDADD = $(LDADD) @LIBINTL@ +test_xstrtoumax_LDADD = $(LDADD) @LIBINTL@ +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .html .log .o .obj .test .test$(EXEEXT) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/gnulib.mk $(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) --foreign gnulib-tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign gnulib-tests/Makefile +.PRECIOUS: 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-checkLIBRARIES: + -test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES) + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libtests.a: $(libtests_a_OBJECTS) $(libtests_a_DEPENDENCIES) + $(AM_V_at)-rm -f libtests.a + $(AM_V_AR)$(libtests_a_AR) libtests.a $(libtests_a_OBJECTS) $(libtests_a_LIBADD) + $(AM_V_at)$(RANLIB) libtests.a + +clean-checkPROGRAMS: + -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) + +clean-noinstPROGRAMS: + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +test-alloca-opt$(EXEEXT): $(test_alloca_opt_OBJECTS) $(test_alloca_opt_DEPENDENCIES) + @rm -f test-alloca-opt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_alloca_opt_OBJECTS) $(test_alloca_opt_LDADD) $(LIBS) +test-argmatch$(EXEEXT): $(test_argmatch_OBJECTS) $(test_argmatch_DEPENDENCIES) + @rm -f test-argmatch$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_argmatch_OBJECTS) $(test_argmatch_LDADD) $(LIBS) +test-binary-io$(EXEEXT): $(test_binary_io_OBJECTS) $(test_binary_io_DEPENDENCIES) + @rm -f test-binary-io$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_binary_io_OBJECTS) $(test_binary_io_LDADD) $(LIBS) +test-bitrotate$(EXEEXT): $(test_bitrotate_OBJECTS) $(test_bitrotate_DEPENDENCIES) + @rm -f test-bitrotate$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_bitrotate_OBJECTS) $(test_bitrotate_LDADD) $(LIBS) +test-btowc$(EXEEXT): $(test_btowc_OBJECTS) $(test_btowc_DEPENDENCIES) + @rm -f test-btowc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_btowc_OBJECTS) $(test_btowc_LDADD) $(LIBS) +test-c-ctype$(EXEEXT): $(test_c_ctype_OBJECTS) $(test_c_ctype_DEPENDENCIES) + @rm -f test-c-ctype$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c_ctype_OBJECTS) $(test_c_ctype_LDADD) $(LIBS) +test-c-stack$(EXEEXT): $(test_c_stack_OBJECTS) $(test_c_stack_DEPENDENCIES) + @rm -f test-c-stack$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c_stack_OBJECTS) $(test_c_stack_LDADD) $(LIBS) +test-c-strcasecmp$(EXEEXT): $(test_c_strcasecmp_OBJECTS) $(test_c_strcasecmp_DEPENDENCIES) + @rm -f test-c-strcasecmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c_strcasecmp_OBJECTS) $(test_c_strcasecmp_LDADD) $(LIBS) +test-c-strncasecmp$(EXEEXT): $(test_c_strncasecmp_OBJECTS) $(test_c_strncasecmp_DEPENDENCIES) + @rm -f test-c-strncasecmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c_strncasecmp_OBJECTS) $(test_c_strncasecmp_LDADD) $(LIBS) +test-dirname$(EXEEXT): $(test_dirname_OBJECTS) $(test_dirname_DEPENDENCIES) + @rm -f test-dirname$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_dirname_OBJECTS) $(test_dirname_LDADD) $(LIBS) +test-dup2$(EXEEXT): $(test_dup2_OBJECTS) $(test_dup2_DEPENDENCIES) + @rm -f test-dup2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_dup2_OBJECTS) $(test_dup2_LDADD) $(LIBS) +test-environ$(EXEEXT): $(test_environ_OBJECTS) $(test_environ_DEPENDENCIES) + @rm -f test-environ$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_environ_OBJECTS) $(test_environ_LDADD) $(LIBS) +test-errno$(EXEEXT): $(test_errno_OBJECTS) $(test_errno_DEPENDENCIES) + @rm -f test-errno$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_errno_OBJECTS) $(test_errno_LDADD) $(LIBS) +test-exclude$(EXEEXT): $(test_exclude_OBJECTS) $(test_exclude_DEPENDENCIES) + @rm -f test-exclude$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_exclude_OBJECTS) $(test_exclude_LDADD) $(LIBS) +test-fcntl$(EXEEXT): $(test_fcntl_OBJECTS) $(test_fcntl_DEPENDENCIES) + @rm -f test-fcntl$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fcntl_OBJECTS) $(test_fcntl_LDADD) $(LIBS) +test-fcntl-h$(EXEEXT): $(test_fcntl_h_OBJECTS) $(test_fcntl_h_DEPENDENCIES) + @rm -f test-fcntl-h$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fcntl_h_OBJECTS) $(test_fcntl_h_LDADD) $(LIBS) +test-fnmatch$(EXEEXT): $(test_fnmatch_OBJECTS) $(test_fnmatch_DEPENDENCIES) + @rm -f test-fnmatch$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fnmatch_OBJECTS) $(test_fnmatch_LDADD) $(LIBS) +test-freopen$(EXEEXT): $(test_freopen_OBJECTS) $(test_freopen_DEPENDENCIES) + @rm -f test-freopen$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_freopen_OBJECTS) $(test_freopen_LDADD) $(LIBS) +test-freopen-safer$(EXEEXT): $(test_freopen_safer_OBJECTS) $(test_freopen_safer_DEPENDENCIES) + @rm -f test-freopen-safer$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_freopen_safer_OBJECTS) $(test_freopen_safer_LDADD) $(LIBS) +test-getdtablesize$(EXEEXT): $(test_getdtablesize_OBJECTS) $(test_getdtablesize_DEPENDENCIES) + @rm -f test-getdtablesize$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_getdtablesize_OBJECTS) $(test_getdtablesize_LDADD) $(LIBS) +test-getopt$(EXEEXT): $(test_getopt_OBJECTS) $(test_getopt_DEPENDENCIES) + @rm -f test-getopt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_getopt_OBJECTS) $(test_getopt_LDADD) $(LIBS) +test-gettimeofday$(EXEEXT): $(test_gettimeofday_OBJECTS) $(test_gettimeofday_DEPENDENCIES) + @rm -f test-gettimeofday$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_gettimeofday_OBJECTS) $(test_gettimeofday_LDADD) $(LIBS) +test-hash$(EXEEXT): $(test_hash_OBJECTS) $(test_hash_DEPENDENCIES) + @rm -f test-hash$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_hash_OBJECTS) $(test_hash_LDADD) $(LIBS) +test-iconv$(EXEEXT): $(test_iconv_OBJECTS) $(test_iconv_DEPENDENCIES) + @rm -f test-iconv$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_iconv_OBJECTS) $(test_iconv_LDADD) $(LIBS) +test-iconv-h$(EXEEXT): $(test_iconv_h_OBJECTS) $(test_iconv_h_DEPENDENCIES) + @rm -f test-iconv-h$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_iconv_h_OBJECTS) $(test_iconv_h_LDADD) $(LIBS) +test-inttypes$(EXEEXT): $(test_inttypes_OBJECTS) $(test_inttypes_DEPENDENCIES) + @rm -f test-inttypes$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_inttypes_OBJECTS) $(test_inttypes_LDADD) $(LIBS) +test-langinfo$(EXEEXT): $(test_langinfo_OBJECTS) $(test_langinfo_DEPENDENCIES) + @rm -f test-langinfo$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_langinfo_OBJECTS) $(test_langinfo_LDADD) $(LIBS) +test-lstat$(EXEEXT): $(test_lstat_OBJECTS) $(test_lstat_DEPENDENCIES) + @rm -f test-lstat$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_lstat_OBJECTS) $(test_lstat_LDADD) $(LIBS) +test-malloca$(EXEEXT): $(test_malloca_OBJECTS) $(test_malloca_DEPENDENCIES) + @rm -f test-malloca$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_malloca_OBJECTS) $(test_malloca_LDADD) $(LIBS) +test-mbrtowc$(EXEEXT): $(test_mbrtowc_OBJECTS) $(test_mbrtowc_DEPENDENCIES) + @rm -f test-mbrtowc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbrtowc_OBJECTS) $(test_mbrtowc_LDADD) $(LIBS) +test-mbscasecmp$(EXEEXT): $(test_mbscasecmp_OBJECTS) $(test_mbscasecmp_DEPENDENCIES) + @rm -f test-mbscasecmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbscasecmp_OBJECTS) $(test_mbscasecmp_LDADD) $(LIBS) +test-mbsinit$(EXEEXT): $(test_mbsinit_OBJECTS) $(test_mbsinit_DEPENDENCIES) + @rm -f test-mbsinit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbsinit_OBJECTS) $(test_mbsinit_LDADD) $(LIBS) +test-mbsrtowcs$(EXEEXT): $(test_mbsrtowcs_OBJECTS) $(test_mbsrtowcs_DEPENDENCIES) + @rm -f test-mbsrtowcs$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbsrtowcs_OBJECTS) $(test_mbsrtowcs_LDADD) $(LIBS) +test-mbsstr1$(EXEEXT): $(test_mbsstr1_OBJECTS) $(test_mbsstr1_DEPENDENCIES) + @rm -f test-mbsstr1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbsstr1_OBJECTS) $(test_mbsstr1_LDADD) $(LIBS) +test-mbsstr2$(EXEEXT): $(test_mbsstr2_OBJECTS) $(test_mbsstr2_DEPENDENCIES) + @rm -f test-mbsstr2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbsstr2_OBJECTS) $(test_mbsstr2_LDADD) $(LIBS) +test-mbsstr3$(EXEEXT): $(test_mbsstr3_OBJECTS) $(test_mbsstr3_DEPENDENCIES) + @rm -f test-mbsstr3$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbsstr3_OBJECTS) $(test_mbsstr3_LDADD) $(LIBS) +test-memchr$(EXEEXT): $(test_memchr_OBJECTS) $(test_memchr_DEPENDENCIES) + @rm -f test-memchr$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_memchr_OBJECTS) $(test_memchr_LDADD) $(LIBS) +test-nl_langinfo$(EXEEXT): $(test_nl_langinfo_OBJECTS) $(test_nl_langinfo_DEPENDENCIES) + @rm -f test-nl_langinfo$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_nl_langinfo_OBJECTS) $(test_nl_langinfo_LDADD) $(LIBS) +test-open$(EXEEXT): $(test_open_OBJECTS) $(test_open_DEPENDENCIES) + @rm -f test-open$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_open_OBJECTS) $(test_open_LDADD) $(LIBS) +test-quotearg$(EXEEXT): $(test_quotearg_OBJECTS) $(test_quotearg_DEPENDENCIES) + @rm -f test-quotearg$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_quotearg_OBJECTS) $(test_quotearg_LDADD) $(LIBS) +test-setenv$(EXEEXT): $(test_setenv_OBJECTS) $(test_setenv_DEPENDENCIES) + @rm -f test-setenv$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_setenv_OBJECTS) $(test_setenv_LDADD) $(LIBS) +test-sigaction$(EXEEXT): $(test_sigaction_OBJECTS) $(test_sigaction_DEPENDENCIES) + @rm -f test-sigaction$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sigaction_OBJECTS) $(test_sigaction_LDADD) $(LIBS) +test-signal$(EXEEXT): $(test_signal_OBJECTS) $(test_signal_DEPENDENCIES) + @rm -f test-signal$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_signal_OBJECTS) $(test_signal_LDADD) $(LIBS) +test-sleep$(EXEEXT): $(test_sleep_OBJECTS) $(test_sleep_DEPENDENCIES) + @rm -f test-sleep$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sleep_OBJECTS) $(test_sleep_LDADD) $(LIBS) +test-stat$(EXEEXT): $(test_stat_OBJECTS) $(test_stat_DEPENDENCIES) + @rm -f test-stat$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stat_OBJECTS) $(test_stat_LDADD) $(LIBS) +test-stat-time$(EXEEXT): $(test_stat_time_OBJECTS) $(test_stat_time_DEPENDENCIES) + @rm -f test-stat-time$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stat_time_OBJECTS) $(test_stat_time_LDADD) $(LIBS) +test-stdbool$(EXEEXT): $(test_stdbool_OBJECTS) $(test_stdbool_DEPENDENCIES) + @rm -f test-stdbool$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdbool_OBJECTS) $(test_stdbool_LDADD) $(LIBS) +test-stddef$(EXEEXT): $(test_stddef_OBJECTS) $(test_stddef_DEPENDENCIES) + @rm -f test-stddef$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stddef_OBJECTS) $(test_stddef_LDADD) $(LIBS) +test-stdint$(EXEEXT): $(test_stdint_OBJECTS) $(test_stdint_DEPENDENCIES) + @rm -f test-stdint$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdint_OBJECTS) $(test_stdint_LDADD) $(LIBS) +test-stdio$(EXEEXT): $(test_stdio_OBJECTS) $(test_stdio_DEPENDENCIES) + @rm -f test-stdio$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdio_OBJECTS) $(test_stdio_LDADD) $(LIBS) +test-stdlib$(EXEEXT): $(test_stdlib_OBJECTS) $(test_stdlib_DEPENDENCIES) + @rm -f test-stdlib$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdlib_OBJECTS) $(test_stdlib_LDADD) $(LIBS) +test-strerror$(EXEEXT): $(test_strerror_OBJECTS) $(test_strerror_DEPENDENCIES) + @rm -f test-strerror$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strerror_OBJECTS) $(test_strerror_LDADD) $(LIBS) +test-striconv$(EXEEXT): $(test_striconv_OBJECTS) $(test_striconv_DEPENDENCIES) + @rm -f test-striconv$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_striconv_OBJECTS) $(test_striconv_LDADD) $(LIBS) +test-string$(EXEEXT): $(test_string_OBJECTS) $(test_string_DEPENDENCIES) + @rm -f test-string$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_string_OBJECTS) $(test_string_LDADD) $(LIBS) +test-strings$(EXEEXT): $(test_strings_OBJECTS) $(test_strings_DEPENDENCIES) + @rm -f test-strings$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strings_OBJECTS) $(test_strings_LDADD) $(LIBS) +test-symlink$(EXEEXT): $(test_symlink_OBJECTS) $(test_symlink_DEPENDENCIES) + @rm -f test-symlink$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_symlink_OBJECTS) $(test_symlink_LDADD) $(LIBS) +test-sys_stat$(EXEEXT): $(test_sys_stat_OBJECTS) $(test_sys_stat_DEPENDENCIES) + @rm -f test-sys_stat$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sys_stat_OBJECTS) $(test_sys_stat_LDADD) $(LIBS) +test-sys_time$(EXEEXT): $(test_sys_time_OBJECTS) $(test_sys_time_DEPENDENCIES) + @rm -f test-sys_time$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sys_time_OBJECTS) $(test_sys_time_LDADD) $(LIBS) +test-sys_wait$(EXEEXT): $(test_sys_wait_OBJECTS) $(test_sys_wait_DEPENDENCIES) + @rm -f test-sys_wait$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sys_wait_OBJECTS) $(test_sys_wait_LDADD) $(LIBS) +test-time$(EXEEXT): $(test_time_OBJECTS) $(test_time_DEPENDENCIES) + @rm -f test-time$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_time_OBJECTS) $(test_time_LDADD) $(LIBS) +uniwidth/$(am__dirstamp): + @$(MKDIR_P) uniwidth + @: > uniwidth/$(am__dirstamp) +uniwidth/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) uniwidth/$(DEPDIR) + @: > uniwidth/$(DEPDIR)/$(am__dirstamp) +uniwidth/test-uc_width.$(OBJEXT): uniwidth/$(am__dirstamp) \ + uniwidth/$(DEPDIR)/$(am__dirstamp) +test-uc_width$(EXEEXT): $(test_uc_width_OBJECTS) $(test_uc_width_DEPENDENCIES) + @rm -f test-uc_width$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_uc_width_OBJECTS) $(test_uc_width_LDADD) $(LIBS) +uniwidth/test-uc_width2.$(OBJEXT): uniwidth/$(am__dirstamp) \ + uniwidth/$(DEPDIR)/$(am__dirstamp) +test-uc_width2$(EXEEXT): $(test_uc_width2_OBJECTS) $(test_uc_width2_DEPENDENCIES) + @rm -f test-uc_width2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_uc_width2_OBJECTS) $(test_uc_width2_LDADD) $(LIBS) +test-unistd$(EXEEXT): $(test_unistd_OBJECTS) $(test_unistd_DEPENDENCIES) + @rm -f test-unistd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_unistd_OBJECTS) $(test_unistd_LDADD) $(LIBS) +test-unsetenv$(EXEEXT): $(test_unsetenv_OBJECTS) $(test_unsetenv_DEPENDENCIES) + @rm -f test-unsetenv$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_unsetenv_OBJECTS) $(test_unsetenv_LDADD) $(LIBS) +test-usleep$(EXEEXT): $(test_usleep_OBJECTS) $(test_usleep_DEPENDENCIES) + @rm -f test-usleep$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_usleep_OBJECTS) $(test_usleep_LDADD) $(LIBS) +test-version-etc$(EXEEXT): $(test_version_etc_OBJECTS) $(test_version_etc_DEPENDENCIES) + @rm -f test-version-etc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_version_etc_OBJECTS) $(test_version_etc_LDADD) $(LIBS) +test-wchar$(EXEEXT): $(test_wchar_OBJECTS) $(test_wchar_DEPENDENCIES) + @rm -f test-wchar$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wchar_OBJECTS) $(test_wchar_LDADD) $(LIBS) +test-wcrtomb$(EXEEXT): $(test_wcrtomb_OBJECTS) $(test_wcrtomb_DEPENDENCIES) + @rm -f test-wcrtomb$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wcrtomb_OBJECTS) $(test_wcrtomb_LDADD) $(LIBS) +test-wctype$(EXEEXT): $(test_wctype_OBJECTS) $(test_wctype_DEPENDENCIES) + @rm -f test-wctype$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wctype_OBJECTS) $(test_wctype_LDADD) $(LIBS) +test-wcwidth$(EXEEXT): $(test_wcwidth_OBJECTS) $(test_wcwidth_DEPENDENCIES) + @rm -f test-wcwidth$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wcwidth_OBJECTS) $(test_wcwidth_LDADD) $(LIBS) +test-xalloc-die$(EXEEXT): $(test_xalloc_die_OBJECTS) $(test_xalloc_die_DEPENDENCIES) + @rm -f test-xalloc-die$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_xalloc_die_OBJECTS) $(test_xalloc_die_LDADD) $(LIBS) +test-xstrtol$(EXEEXT): $(test_xstrtol_OBJECTS) $(test_xstrtol_DEPENDENCIES) + @rm -f test-xstrtol$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_xstrtol_OBJECTS) $(test_xstrtol_LDADD) $(LIBS) +test-xstrtoul$(EXEEXT): $(test_xstrtoul_OBJECTS) $(test_xstrtoul_DEPENDENCIES) + @rm -f test-xstrtoul$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_xstrtoul_OBJECTS) $(test_xstrtoul_LDADD) $(LIBS) +test-xstrtoumax$(EXEEXT): $(test_xstrtoumax_OBJECTS) $(test_xstrtoumax_DEPENDENCIES) + @rm -f test-xstrtoumax$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_xstrtoumax_OBJECTS) $(test_xstrtoumax_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f uniwidth/test-uc_width.$(OBJEXT) + -rm -f uniwidth/test-uc_width2.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argmatch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash-pjw.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/putenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sleep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-alloca-opt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-argmatch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-binary-io.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-bitrotate.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-btowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-ctype.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-stack.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strcasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strncasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dirname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dup2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-environ.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-errno.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-exclude.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fcntl-h.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fcntl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fnmatch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-freopen-safer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-freopen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getdtablesize.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-hash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iconv-h.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-inttypes.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-langinfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-lstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-malloca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbscasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsrtowcs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsstr1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsstr2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsstr3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-memchr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-nl_langinfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-quotearg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sigaction.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-signal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sleep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stat-time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdbool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stddef.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdint.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdlib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strerror.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-striconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-string.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strings.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-symlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_wait.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unistd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unsetenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-usleep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-version-etc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wchar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wcrtomb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wctype.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wcwidth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-xalloc-die.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-xstrtol.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-xstrtoul.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-xstrtoumax.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usleep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctob.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-uc_width.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-uc_width2.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) '$<'` + +# 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. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; 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" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done +cscopelist-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + 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; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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 +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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 $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP)'; \ + 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 + +# To be appended to the command running the test. Handle the stdout +# and stderr redirection, and catch the exit status. +am__check_post = \ +>$@-t 2>&1; \ +estatus=$$?; \ +if test -n '$(DISABLE_HARD_ERRORS)' \ + && test $$estatus -eq 99; then \ + estatus=1; \ +fi; \ +TERM=$$__SAVED_TERM; export TERM; \ +$(am__tty_colors); \ +xfailed=PASS; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + xfailed=XFAIL;; \ +esac; \ +case $$estatus:$$xfailed in \ + 0:XFAIL) col=$$red; res=XPASS;; \ + 0:*) col=$$grn; res=PASS ;; \ + 77:*) col=$$blu; res=SKIP ;; \ + 99:*) col=$$red; res=FAIL ;; \ + *:XFAIL) col=$$lgn; res=XFAIL;; \ + *:*) col=$$red; res=FAIL ;; \ +esac; \ +echo "$${col}$$res$${std}: $$f"; \ +echo "$$res: $$f (exit: $$estatus)" | \ + $(am__rst_section) >$@; \ +cat $@-t >>$@; \ +rm -f $@-t + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__sh_e_setup); \ + list='$(TEST_LOGS)'; \ + results=`for f in $$list; do \ + read line < $$f && echo "$$line" || echo FAIL; \ + done`; \ + all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \ + fail=`echo "$$results" | grep -c '^FAIL'`; \ + pass=`echo "$$results" | grep -c '^PASS'`; \ + skip=`echo "$$results" | grep -c '^SKIP'`; \ + xfail=`echo "$$results" | grep -c '^XFAIL'`; \ + xpass=`echo "$$results" | grep -c '^XPASS'`; \ + failures=`expr $$fail + $$xpass`; \ + all=`expr $$all - $$skip`; \ + if test "$$all" -eq 1; then tests=test; All=; \ + else tests=tests; All="All "; fi; \ + case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \ + fail=0:xpass=0:xfail=0) \ + msg="$$All$$all $$tests passed. "; \ + exit=true;; \ + fail=0:xpass=0:xfail=*) \ + msg="$$All$$all $$tests behaved as expected"; \ + if test "$$xfail" -eq 1; then xfailures=failure; \ + else xfailures=failures; fi; \ + msg="$$msg ($$xfail expected $$xfailures). "; \ + exit=true;; \ + fail=*:xpass=0:xfail=*) \ + msg="$$fail of $$all $$tests failed. "; \ + exit=false;; \ + fail=*:xpass=*:xfail=*) \ + msg="$$failures of $$all $$tests did not behave as expected"; \ + if test "$$xpass" -eq 1; then xpasses=pass; \ + else xpasses=passes; fi; \ + msg="$$msg ($$xpass unexpected $$xpasses). "; \ + exit=false;; \ + *) \ + echo >&2 "incorrect case"; exit 4;; \ + esac; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + msg="$$msg($$skip test was not run). "; \ + else \ + msg="$$msg($$skip tests were not run). "; \ + fi; \ + fi; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + echo "$$msg"; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for f in $$list; do \ + read line < $$f; \ + case $$line in \ + PASS:*|XFAIL:*);; \ + *) echo; cat $$f;; \ + esac; \ + done; \ + } >$(TEST_SUITE_LOG).tmp; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if test "$$failures" -ne 0; then \ + msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \ + fi; \ + fi; \ + test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \ + $(am__tty_colors); \ + if $$exit; then \ + echo $(ECHO_N) "$$grn$(ECHO_C)"; \ + else \ + echo $(ECHO_N) "$$red$(ECHO_C)"; \ + fi; \ + echo "$$msg" | $(am__text_box); \ + echo $(ECHO_N) "$$std$(ECHO_C)"; \ + $$exit + +# Run all the tests. +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @list='$(TEST_LOGS)'; \ + list=`for f in $$list; do \ + test .log = $$f || echo $$f; \ + done | tr '\012\015' ' '`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$list" + +.log.html: + @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ + for r2h in $$list; do \ + if ($$r2h --version) >/dev/null 2>&1; then \ + R2H=$$r2h; \ + fi; \ + done; \ + if test -z "$$R2H"; then \ + echo >&2 "cannot find rst2html, cannot create $@"; \ + exit 2; \ + fi; \ + $$R2H $< >$@.tmp + @mv $@.tmp $@ + +# Be sure to run check first, and then to convert the result. +# Beware of concurrent executions. Run "check" not "check-TESTS", as +# check-SCRIPTS and other dependencies are rebuilt by the former only. +# And expect check to fail. +check-html: + @if $(MAKE) $(AM_MAKEFLAGS) check; then \ + rv=0; else rv=$$?; \ + fi; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) || exit 4; \ + exit $$rv +recheck recheck-html: + @target=`echo $@ | sed 's,^re,,'`; \ + list='$(TEST_LOGS)'; \ + list=`for f in $$list; do \ + test -f $$f || continue; \ + if read line < $$f; then \ + case $$line in FAIL*|XPASS*) echo $$f;; esac; \ + else echo $$f; fi; \ + done | tr '\012\015' ' '`; \ + $(MAKE) $(AM_MAKEFLAGS) $$target AM_MAKEFLAGS='$(AM_MAKEFLAGS) TEST_LOGS="'"$$list"'"' +test-alloca-opt.log: test-alloca-opt$(EXEEXT) + @p='test-alloca-opt$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-argmatch.log: test-argmatch$(EXEEXT) + @p='test-argmatch$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-binary-io.sh.log: test-binary-io.sh + @p='test-binary-io.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-bitrotate.log: test-bitrotate$(EXEEXT) + @p='test-bitrotate$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-btowc1.sh.log: test-btowc1.sh + @p='test-btowc1.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-btowc2.sh.log: test-btowc2.sh + @p='test-btowc2.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-c-ctype.log: test-c-ctype$(EXEEXT) + @p='test-c-ctype$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-c-stack.sh.log: test-c-stack.sh + @p='test-c-stack.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-c-stack2.sh.log: test-c-stack2.sh + @p='test-c-stack2.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-c-strcase.sh.log: test-c-strcase.sh + @p='test-c-strcase.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-dirname.log: test-dirname$(EXEEXT) + @p='test-dirname$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-dup2.log: test-dup2$(EXEEXT) + @p='test-dup2$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-environ.log: test-environ$(EXEEXT) + @p='test-environ$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-errno.log: test-errno$(EXEEXT) + @p='test-errno$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-exclude1.sh.log: test-exclude1.sh + @p='test-exclude1.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-exclude2.sh.log: test-exclude2.sh + @p='test-exclude2.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-exclude3.sh.log: test-exclude3.sh + @p='test-exclude3.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-exclude4.sh.log: test-exclude4.sh + @p='test-exclude4.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-exclude5.sh.log: test-exclude5.sh + @p='test-exclude5.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-exclude6.sh.log: test-exclude6.sh + @p='test-exclude6.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-exclude7.sh.log: test-exclude7.sh + @p='test-exclude7.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-fcntl-h.log: test-fcntl-h$(EXEEXT) + @p='test-fcntl-h$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-fcntl.log: test-fcntl$(EXEEXT) + @p='test-fcntl$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-fnmatch.log: test-fnmatch$(EXEEXT) + @p='test-fnmatch$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-freopen-safer.log: test-freopen-safer$(EXEEXT) + @p='test-freopen-safer$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-freopen.log: test-freopen$(EXEEXT) + @p='test-freopen$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-getdtablesize.log: test-getdtablesize$(EXEEXT) + @p='test-getdtablesize$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-getopt.log: test-getopt$(EXEEXT) + @p='test-getopt$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-gettimeofday.log: test-gettimeofday$(EXEEXT) + @p='test-gettimeofday$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-hash.log: test-hash$(EXEEXT) + @p='test-hash$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-iconv-h.log: test-iconv-h$(EXEEXT) + @p='test-iconv-h$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-iconv.log: test-iconv$(EXEEXT) + @p='test-iconv$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-inttypes.log: test-inttypes$(EXEEXT) + @p='test-inttypes$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-langinfo.log: test-langinfo$(EXEEXT) + @p='test-langinfo$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-lstat.log: test-lstat$(EXEEXT) + @p='test-lstat$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-malloca.log: test-malloca$(EXEEXT) + @p='test-malloca$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbrtowc1.sh.log: test-mbrtowc1.sh + @p='test-mbrtowc1.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbrtowc2.sh.log: test-mbrtowc2.sh + @p='test-mbrtowc2.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbrtowc3.sh.log: test-mbrtowc3.sh + @p='test-mbrtowc3.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbrtowc4.sh.log: test-mbrtowc4.sh + @p='test-mbrtowc4.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbscasecmp.sh.log: test-mbscasecmp.sh + @p='test-mbscasecmp.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbsinit.sh.log: test-mbsinit.sh + @p='test-mbsinit.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbsrtowcs1.sh.log: test-mbsrtowcs1.sh + @p='test-mbsrtowcs1.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbsrtowcs2.sh.log: test-mbsrtowcs2.sh + @p='test-mbsrtowcs2.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbsrtowcs3.sh.log: test-mbsrtowcs3.sh + @p='test-mbsrtowcs3.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbsrtowcs4.sh.log: test-mbsrtowcs4.sh + @p='test-mbsrtowcs4.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbsstr1.log: test-mbsstr1$(EXEEXT) + @p='test-mbsstr1$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbsstr2.sh.log: test-mbsstr2.sh + @p='test-mbsstr2.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-mbsstr3.sh.log: test-mbsstr3.sh + @p='test-mbsstr3.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-memchr.log: test-memchr$(EXEEXT) + @p='test-memchr$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-nl_langinfo.sh.log: test-nl_langinfo.sh + @p='test-nl_langinfo.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-open.log: test-open$(EXEEXT) + @p='test-open$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-quotearg.sh.log: test-quotearg.sh + @p='test-quotearg.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-setenv.log: test-setenv$(EXEEXT) + @p='test-setenv$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-sigaction.log: test-sigaction$(EXEEXT) + @p='test-sigaction$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-signal.log: test-signal$(EXEEXT) + @p='test-signal$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-sleep.log: test-sleep$(EXEEXT) + @p='test-sleep$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-stat.log: test-stat$(EXEEXT) + @p='test-stat$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-stat-time.log: test-stat-time$(EXEEXT) + @p='test-stat-time$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-stdbool.log: test-stdbool$(EXEEXT) + @p='test-stdbool$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-stddef.log: test-stddef$(EXEEXT) + @p='test-stddef$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-stdint.log: test-stdint$(EXEEXT) + @p='test-stdint$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-stdio.log: test-stdio$(EXEEXT) + @p='test-stdio$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-stdlib.log: test-stdlib$(EXEEXT) + @p='test-stdlib$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-strerror.log: test-strerror$(EXEEXT) + @p='test-strerror$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-striconv.log: test-striconv$(EXEEXT) + @p='test-striconv$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-string.log: test-string$(EXEEXT) + @p='test-string$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-strings.log: test-strings$(EXEEXT) + @p='test-strings$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-symlink.log: test-symlink$(EXEEXT) + @p='test-symlink$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-sys_stat.log: test-sys_stat$(EXEEXT) + @p='test-sys_stat$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-sys_time.log: test-sys_time$(EXEEXT) + @p='test-sys_time$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-sys_wait.log: test-sys_wait$(EXEEXT) + @p='test-sys_wait$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-time.log: test-time$(EXEEXT) + @p='test-time$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-unistd.log: test-unistd$(EXEEXT) + @p='test-unistd$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-uc_width.log: test-uc_width$(EXEEXT) + @p='test-uc_width$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +uniwidth/test-uc_width2.sh.log: uniwidth/test-uc_width2.sh + @p='uniwidth/test-uc_width2.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-unsetenv.log: test-unsetenv$(EXEEXT) + @p='test-unsetenv$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-update-copyright.sh.log: test-update-copyright.sh + @p='test-update-copyright.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-usleep.log: test-usleep$(EXEEXT) + @p='test-usleep$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-vc-list-files-git.sh.log: test-vc-list-files-git.sh + @p='test-vc-list-files-git.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-vc-list-files-cvs.sh.log: test-vc-list-files-cvs.sh + @p='test-vc-list-files-cvs.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-version-etc.sh.log: test-version-etc.sh + @p='test-version-etc.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-wchar.log: test-wchar$(EXEEXT) + @p='test-wchar$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-wcrtomb.sh.log: test-wcrtomb.sh + @p='test-wcrtomb.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-wctype.log: test-wctype$(EXEEXT) + @p='test-wctype$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-wcwidth.log: test-wcwidth$(EXEEXT) + @p='test-wcwidth$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-xalloc-die.sh.log: test-xalloc-die.sh + @p='test-xalloc-die.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-xstrtol.sh.log: test-xstrtol.sh + @p='test-xstrtol.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +test-xstrtoumax.sh.log: test-xstrtoumax.sh + @p='test-xstrtoumax.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +.test.log: + @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) + +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 \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + 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_LIBRARIES) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP) + -test -z "$(TEST_SUITE_HTML)" || rm -f $(TEST_SUITE_HTML) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +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 uniwidth/$(DEPDIR)/$(am__dirstamp) + -rm -f uniwidth/$(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." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \ + clean-local clean-noinstLIBRARIES clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) uniwidth/$(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) uniwidth/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-local + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + check-am check-html cscopelist-recursive ctags-recursive \ + install install-am install-strip recheck recheck-html \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-TESTS check-am check-html clean \ + clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \ + clean-local clean-noinstLIBRARIES clean-noinstPROGRAMS \ + cscopelist cscopelist-recursive ctags ctags-recursive \ + distclean distclean-compile distclean-generic 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-local pdf pdf-am ps ps-am recheck recheck-html \ + tags tags-recursive uninstall uninstall-am + +# The arg-nonnull.h that gets inserted into generated .h files is the same as +# build-aux/arg-nonnull.h, except that it has the copyright header cut off. +arg-nonnull.h: $(top_srcdir)/build-aux/arg-nonnull.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/GL_ARG_NONNULL/,$$p' \ + < $(top_srcdir)/build-aux/arg-nonnull.h \ + > $@-t && \ + mv $@-t $@ +# The c++defs.h that gets inserted into generated .h files is the same as +# build-aux/c++defs.h, except that it has the copyright header cut off. +c++defs.h: $(top_srcdir)/build-aux/c++defs.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/_GL_CXXDEFS/,$$p' \ + < $(top_srcdir)/build-aux/c++defs.h \ + > $@-t && \ + mv $@-t $@ +# The warn-on-use.h that gets inserted into generated .h files is the same as +# build-aux/warn-on-use.h, except that it has the copyright header cut off. +warn-on-use.h: $(top_srcdir)/build-aux/warn-on-use.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/^.ifndef/,$$p' \ + < $(top_srcdir)/build-aux/warn-on-use.h \ + > $@-t && \ + mv $@-t $@ + +# Clean up after Solaris cc. +clean-local: + rm -rf SunWS_cache + +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/gnulib-tests/argmatch.c b/gnulib-tests/argmatch.c new file mode 100644 index 0000000..5a176f8 --- /dev/null +++ b/gnulib-tests/argmatch.c @@ -0,0 +1,279 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* argmatch.c -- find a match for a string in an array + + Copyright (C) 1990, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007, + 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by David MacKenzie <djm@ai.mit.edu> + Modified by Akim Demaille <demaille@inf.enst.fr> */ + +#include <config.h> + +/* Specification. */ +#include "argmatch.h" + +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +#include "error.h" +#include "quotearg.h" +#include "quote.h" + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +/* When reporting an invalid argument, show nonprinting characters + by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use + literal_quoting_style. */ +#ifndef ARGMATCH_QUOTING_STYLE +# define ARGMATCH_QUOTING_STYLE locale_quoting_style +#endif + +/* Non failing version of argmatch call this function after failing. */ +#ifndef ARGMATCH_DIE +# include "exitfail.h" +# define ARGMATCH_DIE exit (exit_failure) +#endif + +#ifdef ARGMATCH_DIE_DECL +ARGMATCH_DIE_DECL; +#endif + +static void +__argmatch_die (void) +{ + ARGMATCH_DIE; +} + +/* Used by XARGMATCH and XARGCASEMATCH. See description in argmatch.h. + Default to __argmatch_die, but allow caller to change this at run-time. */ +argmatch_exit_fn argmatch_die = __argmatch_die; + + +/* If ARG is an unambiguous match for an element of the + NULL-terminated array ARGLIST, return the index in ARGLIST + of the matched element, else -1 if it does not match any element + or -2 if it is ambiguous (is a prefix of more than one element). + + If VALLIST is none null, use it to resolve ambiguities limited to + synonyms, i.e., for + "yes", "yop" -> 0 + "no", "nope" -> 1 + "y" is a valid argument, for `0', and "n" for `1'. */ + +ptrdiff_t +argmatch (const char *arg, const char *const *arglist, + const char *vallist, size_t valsize) +{ + size_t i; /* Temporary index in ARGLIST. */ + size_t arglen; /* Length of ARG. */ + ptrdiff_t matchind = -1; /* Index of first nonexact match. */ + bool ambiguous = false; /* If true, multiple nonexact match(es). */ + + arglen = strlen (arg); + + /* Test all elements for either exact match or abbreviated matches. */ + for (i = 0; arglist[i]; i++) + { + if (!strncmp (arglist[i], arg, arglen)) + { + if (strlen (arglist[i]) == arglen) + /* Exact match found. */ + return i; + else if (matchind == -1) + /* First nonexact match found. */ + matchind = i; + else + { + /* Second nonexact match found. */ + if (vallist == NULL + || memcmp (vallist + valsize * matchind, + vallist + valsize * i, valsize)) + { + /* There is a real ambiguity, or we could not + disambiguate. */ + ambiguous = true; + } + } + } + } + if (ambiguous) + return -2; + else + return matchind; +} + +/* Error reporting for argmatch. + CONTEXT is a description of the type of entity that was being matched. + VALUE is the invalid value that was given. + PROBLEM is the return value from argmatch. */ + +void +argmatch_invalid (const char *context, const char *value, ptrdiff_t problem) +{ + char const *format = (problem == -1 + ? _("invalid argument %s for %s") + : _("ambiguous argument %s for %s")); + + error (0, 0, format, quotearg_n_style (0, ARGMATCH_QUOTING_STYLE, value), + quote_n (1, context)); +} + +/* List the valid arguments for argmatch. + ARGLIST is the same as in argmatch. + VALLIST is a pointer to an array of values. + VALSIZE is the size of the elements of VALLIST */ +void +argmatch_valid (const char *const *arglist, + const char *vallist, size_t valsize) +{ + size_t i; + const char *last_val = NULL; + + /* We try to put synonyms on the same line. The assumption is that + synonyms follow each other */ + fprintf (stderr, _("Valid arguments are:")); + for (i = 0; arglist[i]; i++) + if ((i == 0) + || memcmp (last_val, vallist + valsize * i, valsize)) + { + fprintf (stderr, "\n - `%s'", arglist[i]); + last_val = vallist + valsize * i; + } + else + { + fprintf (stderr, ", `%s'", arglist[i]); + } + putc ('\n', stderr); +} + +/* Never failing versions of the previous functions. + + CONTEXT is the context for which argmatch is called (e.g., + "--version-control", or "$VERSION_CONTROL" etc.). Upon failure, + calls the (supposed never to return) function EXIT_FN. */ + +ptrdiff_t +__xargmatch_internal (const char *context, + const char *arg, const char *const *arglist, + const char *vallist, size_t valsize, + argmatch_exit_fn exit_fn) +{ + ptrdiff_t res = argmatch (arg, arglist, vallist, valsize); + if (res >= 0) + /* Success. */ + return res; + + /* We failed. Explain why. */ + argmatch_invalid (context, arg, res); + argmatch_valid (arglist, vallist, valsize); + (*exit_fn) (); + + return -1; /* To please the compilers. */ +} + +/* Look for VALUE in VALLIST, an array of objects of size VALSIZE and + return the first corresponding argument in ARGLIST */ +const char * +argmatch_to_argument (const char *value, + const char *const *arglist, + const char *vallist, size_t valsize) +{ + size_t i; + + for (i = 0; arglist[i]; i++) + if (!memcmp (value, vallist + valsize * i, valsize)) + return arglist[i]; + return NULL; +} + +#ifdef TEST +/* + * Based on "getversion.c" by David MacKenzie <djm@gnu.ai.mit.edu> + */ +char *program_name; + +/* When to make backup files. */ +enum backup_type +{ + /* Never make backups. */ + no_backups, + + /* Make simple backups of every file. */ + simple_backups, + + /* Make numbered backups of files that already have numbered backups, + and simple backups of the others. */ + numbered_existing_backups, + + /* Make numbered backups of every file. */ + numbered_backups +}; + +/* Two tables describing arguments (keys) and their corresponding + values */ +static const char *const backup_args[] = +{ + "no", "none", "off", + "simple", "never", + "existing", "nil", + "numbered", "t", + 0 +}; + +static const enum backup_type backup_vals[] = +{ + no_backups, no_backups, no_backups, + simple_backups, simple_backups, + numbered_existing_backups, numbered_existing_backups, + numbered_backups, numbered_backups +}; + +int +main (int argc, const char *const *argv) +{ + const char *cp; + enum backup_type backup_type = no_backups; + + program_name = (char *) argv[0]; + + if (argc > 2) + { + fprintf (stderr, "Usage: %s [VERSION_CONTROL]\n", program_name); + exit (1); + } + + if ((cp = getenv ("VERSION_CONTROL"))) + backup_type = XARGMATCH ("$VERSION_CONTROL", cp, + backup_args, backup_vals); + + if (argc == 2) + backup_type = XARGMATCH (program_name, argv[1], + backup_args, backup_vals); + + printf ("The version control is `%s'\n", + ARGMATCH_TO_ARGUMENT (backup_type, backup_args, backup_vals)); + + return 0; +} +#endif diff --git a/gnulib-tests/argmatch.h b/gnulib-tests/argmatch.h new file mode 100644 index 0000000..15eb04d --- /dev/null +++ b/gnulib-tests/argmatch.h @@ -0,0 +1,104 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* argmatch.h -- definitions and prototypes for argmatch.c + + Copyright (C) 1990, 1998, 1999, 2001, 2002, 2004, 2005, 2009, 2010 Free + Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by David MacKenzie <djm@ai.mit.edu> + Modified by Akim Demaille <demaille@inf.enst.fr> */ + +#ifndef ARGMATCH_H_ +# define ARGMATCH_H_ 1 + +# include <stddef.h> + +# include "verify.h" + +# define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) + +/* Assert there are as many real arguments as there are values + (argument list ends with a NULL guard). */ + +# define ARGMATCH_VERIFY(Arglist, Vallist) \ + verify (ARRAY_CARDINALITY (Arglist) == ARRAY_CARDINALITY (Vallist) + 1) + +/* Return the index of the element of ARGLIST (NULL terminated) that + matches with ARG. If VALLIST is not NULL, then use it to resolve + false ambiguities (i.e., different matches of ARG but corresponding + to the same values in VALLIST). */ + +ptrdiff_t argmatch (char const *arg, char const *const *arglist, + char const *vallist, size_t valsize); + +# define ARGMATCH(Arg, Arglist, Vallist) \ + argmatch (Arg, Arglist, (char const *) (Vallist), sizeof *(Vallist)) + +/* xargmatch calls this function when it fails. This function should not + return. By default, this is a function that calls ARGMATCH_DIE which + in turn defaults to `exit (exit_failure)'. */ +typedef void (*argmatch_exit_fn) (void); +extern argmatch_exit_fn argmatch_die; + +/* Report on stderr why argmatch failed. Report correct values. */ + +void argmatch_invalid (char const *context, char const *value, + ptrdiff_t problem); + +/* Left for compatibility with the old name invalid_arg */ + +# define invalid_arg(Context, Value, Problem) \ + argmatch_invalid (Context, Value, Problem) + + + +/* Report on stderr the list of possible arguments. */ + +void argmatch_valid (char const *const *arglist, + char const *vallist, size_t valsize); + +# define ARGMATCH_VALID(Arglist, Vallist) \ + argmatch_valid (Arglist, (char const *) (Vallist), sizeof *(Vallist)) + + + +/* Same as argmatch, but upon failure, reports a explanation on the + failure, and exits using the function EXIT_FN. */ + +ptrdiff_t __xargmatch_internal (char const *context, + char const *arg, char const *const *arglist, + char const *vallist, size_t valsize, + argmatch_exit_fn exit_fn); + +/* Programmer friendly interface to __xargmatch_internal. */ + +# define XARGMATCH(Context, Arg, Arglist, Vallist) \ + ((Vallist) [__xargmatch_internal (Context, Arg, Arglist, \ + (char const *) (Vallist), \ + sizeof *(Vallist), \ + argmatch_die)]) + +/* Convert a value into a corresponding argument. */ + +char const *argmatch_to_argument (char const *value, + char const *const *arglist, + char const *vallist, size_t valsize); + +# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \ + argmatch_to_argument (Value, Arglist, \ + (char const *) (Vallist), sizeof *(Vallist)) + +#endif /* ARGMATCH_H_ */ diff --git a/gnulib-tests/binary-io.h b/gnulib-tests/binary-io.h new file mode 100644 index 0000000..6d4440e --- /dev/null +++ b/gnulib-tests/binary-io.h @@ -0,0 +1,68 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Binary mode I/O. + Copyright (C) 2001, 2003, 2005, 2008, 2009, 2010 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 _BINARY_H +#define _BINARY_H + +/* For systems that distinguish between text and binary I/O. + O_BINARY is usually declared in <fcntl.h>. */ +#include <fcntl.h> + +/* The MSVC7 <stdio.h> doesn't like to be included after '#define fileno ...', + so we include it here first. */ +#include <stdio.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 + +/* SET_BINARY (fd); + changes the file descriptor fd to perform binary I/O. */ +#if O_BINARY +# if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__ +# include <io.h> /* declares setmode() */ +# else +# define setmode _setmode +# undef fileno +# define fileno _fileno +# endif +# ifdef __DJGPP__ +# include <unistd.h> /* declares isatty() */ + /* Avoid putting stdin/stdout in binary mode if it is connected to + the console, because that would make it impossible for the user + to interrupt the program through Ctrl-C or Ctrl-Break. */ +# define SET_BINARY(fd) ((void) (!isatty (fd) ? (setmode (fd, O_BINARY), 0) : 0)) +# else +# define SET_BINARY(fd) ((void) setmode (fd, O_BINARY)) +# endif +#else + /* On reasonable systems, binary I/O is the default. */ +# undef O_BINARY +# define O_BINARY 0 +# define SET_BINARY(fd) /* do nothing */ ((void) 0) +#endif + +#endif /* _BINARY_H */ diff --git a/gnulib-tests/gnulib.mk b/gnulib-tests/gnulib.mk new file mode 100644 index 0000000..87f0dec --- /dev/null +++ b/gnulib-tests/gnulib.mk @@ -0,0 +1,861 @@ +## DO NOT EDIT! GENERATED AUTOMATICALLY! +## Process this file with automake to produce Makefile.in. +# Copyright (C) 2002-2010 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. 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. + +AUTOMAKE_OPTIONS = 1.5 foreign subdir-objects + +SUBDIRS = . +TESTS = +XFAIL_TESTS = +TESTS_ENVIRONMENT = +noinst_PROGRAMS = +check_PROGRAMS = +noinst_HEADERS = +noinst_LIBRARIES = +check_LIBRARIES = libtests.a +EXTRA_DIST = +BUILT_SOURCES = +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump +MOSTLYCLEANDIRS = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = + +AM_CPPFLAGS = \ + -D@gltests_WITNESS@=1 \ + -I. -I$(srcdir) \ + -I.. -I$(srcdir)/.. \ + -I../lib -I$(srcdir)/../lib + +LDADD = libtests.a ../lib/libdiffutils.a libtests.a $(LIBTESTS_LIBDEPS) + +libtests_a_SOURCES = +libtests_a_LIBADD = $(gltests_LIBOBJS) +libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) +EXTRA_libtests_a_SOURCES = +AM_LIBTOOLFLAGS = --preserve-dup-deps + +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)' + +## begin gnulib module alloca-opt-tests + +TESTS += test-alloca-opt +check_PROGRAMS += test-alloca-opt + +EXTRA_DIST += test-alloca-opt.c + +## end gnulib module alloca-opt-tests + +## begin gnulib module arg-nonnull + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. + +BUILT_SOURCES += arg-nonnull.h +# The arg-nonnull.h that gets inserted into generated .h files is the same as +# build-aux/arg-nonnull.h, except that it has the copyright header cut off. +arg-nonnull.h: $(top_srcdir)/build-aux/arg-nonnull.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/GL_ARG_NONNULL/,$$p' \ + < $(top_srcdir)/build-aux/arg-nonnull.h \ + > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t + +ARG_NONNULL_H=arg-nonnull.h + +EXTRA_DIST += $(top_srcdir)/build-aux/arg-nonnull.h + +## end gnulib module arg-nonnull + +## begin gnulib module argmatch + + +EXTRA_DIST += argmatch.c argmatch.h + +EXTRA_libtests_a_SOURCES += argmatch.c + +## end gnulib module argmatch + +## begin gnulib module argmatch-tests + +TESTS += test-argmatch +check_PROGRAMS += test-argmatch +test_argmatch_LDADD = $(LDADD) @LIBINTL@ + +EXTRA_DIST += test-argmatch.c macros.h + +## end gnulib module argmatch-tests + +## begin gnulib module binary-io + +libtests_a_SOURCES += binary-io.h + +## end gnulib module binary-io + +## begin gnulib module binary-io-tests + +TESTS += test-binary-io.sh +check_PROGRAMS += test-binary-io + +EXTRA_DIST += test-binary-io.sh test-binary-io.c macros.h + +## end gnulib module binary-io-tests + +## begin gnulib module bitrotate-tests + +TESTS += test-bitrotate +check_PROGRAMS += test-bitrotate +EXTRA_DIST += test-bitrotate.c macros.h + +## end gnulib module bitrotate-tests + +## begin gnulib module btowc-tests + +TESTS += test-btowc1.sh test-btowc2.sh +TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-btowc + +EXTRA_DIST += test-btowc1.sh test-btowc2.sh test-btowc.c signature.h macros.h + +## end gnulib module btowc-tests + +## begin gnulib module c++defs + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. + +BUILT_SOURCES += c++defs.h +# The c++defs.h that gets inserted into generated .h files is the same as +# build-aux/c++defs.h, except that it has the copyright header cut off. +c++defs.h: $(top_srcdir)/build-aux/c++defs.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/_GL_CXXDEFS/,$$p' \ + < $(top_srcdir)/build-aux/c++defs.h \ + > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += c++defs.h c++defs.h-t + +CXXDEFS_H=c++defs.h + +EXTRA_DIST += $(top_srcdir)/build-aux/c++defs.h + +## end gnulib module c++defs + +## begin gnulib module c-ctype-tests + +TESTS += test-c-ctype +check_PROGRAMS += test-c-ctype + +EXTRA_DIST += test-c-ctype.c macros.h + +## end gnulib module c-ctype-tests + +## begin gnulib module c-stack-tests + +TESTS += test-c-stack.sh test-c-stack2.sh +TESTS_ENVIRONMENT += LIBSIGSEGV='@LIBSIGSEGV@' +check_PROGRAMS += test-c-stack +test_c_stack_LDADD = $(LDADD) $(LIBCSTACK) @LIBINTL@ +MOSTLYCLEANFILES += t-c-stack.tmp t-c-stack2.tmp +EXTRA_DIST += test-c-stack.c test-c-stack.sh test-c-stack2.sh macros.h + +## end gnulib module c-stack-tests + +## begin gnulib module c-strcase-tests + +TESTS += test-c-strcase.sh +TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' +check_PROGRAMS += test-c-strcasecmp test-c-strncasecmp +EXTRA_DIST += test-c-strcase.sh test-c-strcasecmp.c test-c-strncasecmp.c macros.h + +## end gnulib module c-strcase-tests + +## begin gnulib module dirname-tests + +TESTS += test-dirname +check_PROGRAMS += test-dirname +test_dirname_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-dirname.c + +## end gnulib module dirname-tests + +## begin gnulib module dup2-tests + +TESTS += test-dup2 +check_PROGRAMS += test-dup2 +EXTRA_DIST += test-dup2.c signature.h macros.h + +## end gnulib module dup2-tests + +## begin gnulib module environ-tests + +TESTS += test-environ +check_PROGRAMS += test-environ + +EXTRA_DIST += test-environ.c + +## end gnulib module environ-tests + +## begin gnulib module errno-tests + +TESTS += test-errno +check_PROGRAMS += test-errno + +EXTRA_DIST += test-errno.c + +## end gnulib module errno-tests + +## begin gnulib module exclude-tests + +TESTS += \ + test-exclude1.sh\ + test-exclude2.sh\ + test-exclude3.sh\ + test-exclude4.sh\ + test-exclude5.sh\ + test-exclude6.sh\ + test-exclude7.sh + +check_PROGRAMS += test-exclude +test_exclude_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-exclude.c test-exclude1.sh test-exclude2.sh test-exclude3.sh test-exclude4.sh test-exclude5.sh test-exclude6.sh test-exclude7.sh + +## end gnulib module exclude-tests + +## begin gnulib module fcntl-h-tests + +TESTS += test-fcntl-h +check_PROGRAMS += test-fcntl-h +EXTRA_DIST += test-fcntl-h.c + +## end gnulib module fcntl-h-tests + +## begin gnulib module fcntl-tests + +TESTS += test-fcntl +check_PROGRAMS += test-fcntl +EXTRA_DIST += test-fcntl.c signature.h macros.h + +## end gnulib module fcntl-tests + +## begin gnulib module fnmatch-tests + +TESTS += test-fnmatch +check_PROGRAMS += test-fnmatch +EXTRA_DIST += test-fnmatch.c signature.h macros.h + +## end gnulib module fnmatch-tests + +## begin gnulib module freopen-safer-tests + +TESTS += test-freopen-safer +check_PROGRAMS += test-freopen-safer +EXTRA_DIST += test-freopen-safer.c macros.h + +## end gnulib module freopen-safer-tests + +## begin gnulib module freopen-tests + +TESTS += test-freopen +check_PROGRAMS += test-freopen + +EXTRA_DIST += test-freopen.c signature.h macros.h + +## end gnulib module freopen-tests + +## begin gnulib module getdtablesize-tests + +TESTS += test-getdtablesize +check_PROGRAMS += test-getdtablesize +EXTRA_DIST += test-getdtablesize.c signature.h macros.h + +## end gnulib module getdtablesize-tests + +## begin gnulib module getopt-posix-tests + +TESTS += test-getopt +check_PROGRAMS += test-getopt +test_getopt_LDADD = $(LDADD) $(LIBINTL) +EXTRA_DIST += macros.h signature.h test-getopt.c test-getopt.h test-getopt_long.h + +## end gnulib module getopt-posix-tests + +## begin gnulib module gettimeofday-tests + +TESTS += test-gettimeofday +check_PROGRAMS += test-gettimeofday + +EXTRA_DIST += signature.h test-gettimeofday.c + +## end gnulib module gettimeofday-tests + +## begin gnulib module hash-pjw + +libtests_a_SOURCES += hash-pjw.h hash-pjw.c + +## end gnulib module hash-pjw + +## begin gnulib module hash-tests + +TESTS += test-hash +check_PROGRAMS += test-hash +test_hash_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-hash.c macros.h + +## end gnulib module hash-tests + +## begin gnulib module iconv-h-tests + +TESTS += test-iconv-h +check_PROGRAMS += test-iconv-h +EXTRA_DIST += test-iconv-h.c + +## end gnulib module iconv-h-tests + +## begin gnulib module iconv-tests + +TESTS += test-iconv +check_PROGRAMS += test-iconv +test_iconv_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += test-iconv.c signature.h macros.h + +## end gnulib module iconv-tests + +## begin gnulib module inttypes-tests + +TESTS += test-inttypes +check_PROGRAMS += test-inttypes +EXTRA_DIST += test-inttypes.c + +## end gnulib module inttypes-tests + +## begin gnulib module langinfo-tests + +TESTS += test-langinfo +check_PROGRAMS += test-langinfo +EXTRA_DIST += test-langinfo.c + +## end gnulib module langinfo-tests + +## begin gnulib module lstat-tests + +TESTS += test-lstat +check_PROGRAMS += test-lstat +EXTRA_DIST += test-lstat.h test-lstat.c signature.h macros.h + +## end gnulib module lstat-tests + +## begin gnulib module malloca-tests + +TESTS += test-malloca +check_PROGRAMS += test-malloca + +EXTRA_DIST += test-malloca.c + +## end gnulib module malloca-tests + +## begin gnulib module mbrtowc-tests + +TESTS += test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-mbrtowc + +EXTRA_DIST += test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh test-mbrtowc.c signature.h macros.h + +## end gnulib module mbrtowc-tests + +## begin gnulib module mbscasecmp-tests + +TESTS += test-mbscasecmp.sh +TESTS_ENVIRONMENT += LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' +check_PROGRAMS += test-mbscasecmp + +EXTRA_DIST += test-mbscasecmp.sh test-mbscasecmp.c macros.h + +## end gnulib module mbscasecmp-tests + +## begin gnulib module mbsinit-tests + +TESTS += test-mbsinit.sh +TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-mbsinit + +EXTRA_DIST += test-mbsinit.sh test-mbsinit.c signature.h macros.h + +## end gnulib module mbsinit-tests + +## begin gnulib module mbsrtowcs-tests + +TESTS += test-mbsrtowcs1.sh test-mbsrtowcs2.sh test-mbsrtowcs3.sh test-mbsrtowcs4.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-mbsrtowcs + +EXTRA_DIST += test-mbsrtowcs1.sh test-mbsrtowcs2.sh test-mbsrtowcs3.sh test-mbsrtowcs4.sh test-mbsrtowcs.c signature.h macros.h + +## end gnulib module mbsrtowcs-tests + +## begin gnulib module mbsstr-tests + +TESTS += test-mbsstr1 test-mbsstr2.sh test-mbsstr3.sh +TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-mbsstr1 test-mbsstr2 test-mbsstr3 + +EXTRA_DIST += test-mbsstr1.c test-mbsstr2.sh test-mbsstr2.c test-mbsstr3.sh test-mbsstr3.c macros.h + +## end gnulib module mbsstr-tests + +## begin gnulib module memchr-tests + +TESTS += test-memchr +check_PROGRAMS += test-memchr +EXTRA_DIST += test-memchr.c zerosize-ptr.h signature.h macros.h + +## end gnulib module memchr-tests + +## begin gnulib module nl_langinfo-tests + +TESTS += test-nl_langinfo.sh +TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-nl_langinfo +EXTRA_DIST += test-nl_langinfo.sh test-nl_langinfo.c signature.h macros.h + +## end gnulib module nl_langinfo-tests + +## begin gnulib module open-tests + +TESTS += test-open +check_PROGRAMS += test-open +EXTRA_DIST += test-open.h test-open.c signature.h macros.h + +## end gnulib module open-tests + +## begin gnulib module pathmax + + +EXTRA_DIST += pathmax.h + +## end gnulib module pathmax + +## begin gnulib module putenv + + +EXTRA_DIST += putenv.c + +EXTRA_libtests_a_SOURCES += putenv.c + +## end gnulib module putenv + +## begin gnulib module quotearg-tests + +TESTS += test-quotearg.sh +TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-quotearg +test_quotearg_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-quotearg.sh test-quotearg.c macros.h locale/fr/LC_MESSAGES/test-quotearg.po locale/fr/LC_MESSAGES/test-quotearg.mo + +## end gnulib module quotearg-tests + +## begin gnulib module same-inode + + +EXTRA_DIST += same-inode.h + +## end gnulib module same-inode + +## begin gnulib module setenv + + +EXTRA_DIST += setenv.c + +EXTRA_libtests_a_SOURCES += setenv.c + +## end gnulib module setenv + +## begin gnulib module setenv-tests + +TESTS += test-setenv +check_PROGRAMS += test-setenv +EXTRA_DIST += test-setenv.c signature.h macros.h + +## end gnulib module setenv-tests + +## begin gnulib module sigaction-tests + +TESTS += test-sigaction +check_PROGRAMS += test-sigaction +EXTRA_DIST += test-sigaction.c signature.h macros.h + +## end gnulib module sigaction-tests + +## begin gnulib module signal-tests + +TESTS += test-signal +check_PROGRAMS += test-signal +EXTRA_DIST += test-signal.c + +## end gnulib module signal-tests + +## begin gnulib module sleep + + +EXTRA_DIST += sleep.c + +EXTRA_libtests_a_SOURCES += sleep.c + +## end gnulib module sleep + +## begin gnulib module sleep-tests + +TESTS += test-sleep +check_PROGRAMS += test-sleep +EXTRA_DIST += test-sleep.c signature.h macros.h + +## end gnulib module sleep-tests + +## begin gnulib module stat-tests + +TESTS += test-stat +check_PROGRAMS += test-stat +EXTRA_DIST += test-stat.h test-stat.c signature.h macros.h + +## end gnulib module stat-tests + +## begin gnulib module stat-time-tests + +TESTS += test-stat-time +check_PROGRAMS += test-stat-time +EXTRA_DIST += test-stat-time.c macros.h + +## end gnulib module stat-time-tests + +## begin gnulib module stdbool-tests + +TESTS += test-stdbool +check_PROGRAMS += test-stdbool +EXTRA_DIST += test-stdbool.c + +## end gnulib module stdbool-tests + +## begin gnulib module stddef-tests + +TESTS += test-stddef +check_PROGRAMS += test-stddef +EXTRA_DIST += test-stddef.c + +## end gnulib module stddef-tests + +## begin gnulib module stdint-tests + +TESTS += test-stdint +check_PROGRAMS += test-stdint +EXTRA_DIST += test-stdint.c + +## end gnulib module stdint-tests + +## begin gnulib module stdio-tests + +TESTS += test-stdio +check_PROGRAMS += test-stdio +EXTRA_DIST += test-stdio.c + +## end gnulib module stdio-tests + +## begin gnulib module stdlib-tests + +TESTS += test-stdlib +check_PROGRAMS += test-stdlib +EXTRA_DIST += test-stdlib.c + +## end gnulib module stdlib-tests + +## begin gnulib module strerror-tests + +TESTS += test-strerror +check_PROGRAMS += test-strerror +EXTRA_DIST += test-strerror.c signature.h macros.h + +## end gnulib module strerror-tests + +## begin gnulib module striconv-tests + +TESTS += test-striconv +check_PROGRAMS += test-striconv +test_striconv_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += test-striconv.c macros.h + +## end gnulib module striconv-tests + +## begin gnulib module string-tests + +TESTS += test-string +check_PROGRAMS += test-string +EXTRA_DIST += test-string.c + +## end gnulib module string-tests + +## begin gnulib module strings-tests + +TESTS += test-strings +check_PROGRAMS += test-strings +EXTRA_DIST += test-strings.c + +## end gnulib module strings-tests + +## begin gnulib module symlink + + +EXTRA_DIST += symlink.c + +EXTRA_libtests_a_SOURCES += symlink.c + +## end gnulib module symlink + +## begin gnulib module symlink-tests + +TESTS += test-symlink +check_PROGRAMS += test-symlink +EXTRA_DIST += test-symlink.h test-symlink.c signature.h macros.h + +## end gnulib module symlink-tests + +## begin gnulib module sys_stat-tests + +TESTS += test-sys_stat +check_PROGRAMS += test-sys_stat +EXTRA_DIST += test-sys_stat.c + +## end gnulib module sys_stat-tests + +## begin gnulib module sys_time-tests + +TESTS += test-sys_time +check_PROGRAMS += test-sys_time +EXTRA_DIST += test-sys_time.c + +## end gnulib module sys_time-tests + +## begin gnulib module sys_wait-tests + +TESTS += test-sys_wait +check_PROGRAMS += test-sys_wait +EXTRA_DIST += test-sys_wait.c + +## end gnulib module sys_wait-tests + +## begin gnulib module time-tests + +TESTS += test-time +check_PROGRAMS += test-time +EXTRA_DIST += test-time.c + +## end gnulib module time-tests + +## begin gnulib module unistd-tests + +TESTS += test-unistd +check_PROGRAMS += test-unistd +EXTRA_DIST += test-unistd.c + +## end gnulib module unistd-tests + +## begin gnulib module uniwidth/width-tests + +TESTS += test-uc_width uniwidth/test-uc_width2.sh +check_PROGRAMS += test-uc_width test-uc_width2 +test_uc_width_SOURCES = uniwidth/test-uc_width.c +test_uc_width2_SOURCES = uniwidth/test-uc_width2.c + +EXTRA_DIST += uniwidth/test-uc_width.c uniwidth/test-uc_width2.c uniwidth/test-uc_width2.sh macros.h + +## end gnulib module uniwidth/width-tests + +## begin gnulib module unsetenv + + +EXTRA_DIST += unsetenv.c + +EXTRA_libtests_a_SOURCES += unsetenv.c + +## end gnulib module unsetenv + +## begin gnulib module unsetenv-tests + +TESTS += test-unsetenv +check_PROGRAMS += test-unsetenv +EXTRA_DIST += test-unsetenv.c signature.h macros.h + +## end gnulib module unsetenv-tests + +## begin gnulib module update-copyright-tests + +TESTS += test-update-copyright.sh +TESTS_ENVIRONMENT += PATH='$(abs_aux_dir)'$(PATH_SEPARATOR)"$$PATH" +EXTRA_DIST += test-update-copyright.sh + +## end gnulib module update-copyright-tests + +## begin gnulib module usleep + + +EXTRA_DIST += usleep.c + +EXTRA_libtests_a_SOURCES += usleep.c + +## end gnulib module usleep + +## begin gnulib module usleep-tests + +TESTS += test-usleep +check_PROGRAMS += test-usleep +EXTRA_DIST += test-usleep.c signature.h macros.h + +## end gnulib module usleep-tests + +## begin gnulib module vc-list-files-tests + +TESTS += test-vc-list-files-git.sh +TESTS += test-vc-list-files-cvs.sh +TESTS_ENVIRONMENT += PATH='$(abs_aux_dir)'$(PATH_SEPARATOR)"$$PATH" +EXTRA_DIST += test-vc-list-files-git.sh test-vc-list-files-cvs.sh init.sh + +## end gnulib module vc-list-files-tests + +## begin gnulib module version-etc-tests + +TESTS += test-version-etc.sh +check_PROGRAMS += test-version-etc +test_version_etc_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-version-etc.c test-version-etc.sh + +## end gnulib module version-etc-tests + +## begin gnulib module warn-on-use + +BUILT_SOURCES += warn-on-use.h +# The warn-on-use.h that gets inserted into generated .h files is the same as +# build-aux/warn-on-use.h, except that it has the copyright header cut off. +warn-on-use.h: $(top_srcdir)/build-aux/warn-on-use.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/^.ifndef/,$$p' \ + < $(top_srcdir)/build-aux/warn-on-use.h \ + > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t + +WARN_ON_USE_H=warn-on-use.h + +EXTRA_DIST += $(top_srcdir)/build-aux/warn-on-use.h + +## end gnulib module warn-on-use + +## begin gnulib module wchar-tests + +TESTS += test-wchar +check_PROGRAMS += test-wchar +EXTRA_DIST += test-wchar.c + +## end gnulib module wchar-tests + +## begin gnulib module wcrtomb-tests + +TESTS += test-wcrtomb.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-wcrtomb + +EXTRA_DIST += test-wcrtomb.sh test-wcrtomb.c signature.h macros.h + +## end gnulib module wcrtomb-tests + +## begin gnulib module wctob + + +EXTRA_DIST += wctob.c + +EXTRA_libtests_a_SOURCES += wctob.c + +## end gnulib module wctob + +## begin gnulib module wctype-tests + +TESTS += test-wctype +check_PROGRAMS += test-wctype +EXTRA_DIST += test-wctype.c macros.h + +## end gnulib module wctype-tests + +## begin gnulib module wcwidth-tests + +TESTS += test-wcwidth +check_PROGRAMS += test-wcwidth + +EXTRA_DIST += test-wcwidth.c signature.h macros.h + +## end gnulib module wcwidth-tests + +## begin gnulib module xalloc-die-tests + +TESTS += test-xalloc-die.sh +check_PROGRAMS += test-xalloc-die +test_xalloc_die_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-xalloc-die.c test-xalloc-die.sh init.sh + +## end gnulib module xalloc-die-tests + +## begin gnulib module xstrtol-tests + +TESTS += test-xstrtol.sh +check_PROGRAMS += test-xstrtol test-xstrtoul +test_xstrtol_LDADD = $(LDADD) @LIBINTL@ +test_xstrtoul_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += init.sh test-xstrtol.c test-xstrtoul.c test-xstrtol.sh + +## end gnulib module xstrtol-tests + +## begin gnulib module xstrtoumax-tests + +TESTS += test-xstrtoumax.sh +check_PROGRAMS += test-xstrtoumax +test_xstrtoumax_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += init.sh test-xstrtoumax.c test-xstrtoumax.sh + +## end gnulib module xstrtoumax-tests + +# Clean up after Solaris cc. +clean-local: + rm -rf SunWS_cache + +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/gnulib-tests/hash-pjw.c b/gnulib-tests/hash-pjw.c new file mode 100644 index 0000000..eac00c6 --- /dev/null +++ b/gnulib-tests/hash-pjw.c @@ -0,0 +1,42 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* hash-pjw.c -- compute a hash value from a NUL-terminated string. + + Copyright (C) 2001, 2003, 2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "hash-pjw.h" + +#include <limits.h> + +#define SIZE_BITS (sizeof (size_t) * CHAR_BIT) + +/* A hash function for NUL-terminated char* strings using + the method described by Bruno Haible. + See http://www.haible.de/bruno/hashfunc.html. */ + +size_t +hash_pjw (const void *x, size_t tablesize) +{ + const char *s; + size_t h = 0; + + for (s = x; *s; s++) + h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); + + return h % tablesize; +} diff --git a/gnulib-tests/hash-pjw.h b/gnulib-tests/hash-pjw.h new file mode 100644 index 0000000..5f674d5 --- /dev/null +++ b/gnulib-tests/hash-pjw.h @@ -0,0 +1,25 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* hash-pjw.h -- declaration for a simple hash function + Copyright (C) 2001, 2003, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 <stddef.h> + +/* Compute a hash code for a NUL-terminated string starting at X, + and return the hash code modulo TABLESIZE. + The result is platform dependent: it depends on the size of the 'size_t' + type and on the signedness of the 'char' type. */ +extern size_t hash_pjw (void const *x, size_t tablesize); diff --git a/gnulib-tests/init.sh b/gnulib-tests/init.sh new file mode 100644 index 0000000..512e876 --- /dev/null +++ b/gnulib-tests/init.sh @@ -0,0 +1,357 @@ +# source this file; set up for tests + +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +# Using this file in a test +# ========================= +# +# The typical skeleton of a test looks like this: +# +# #!/bin/sh +# : ${srcdir=.} +# . "$srcdir/init.sh"; path_prepend_ . +# Execute some commands. +# Note that these commands are executed in a subdirectory, therefore you +# need to prepend "../" to relative filenames in the build directory. +# Set the exit code 0 for success, 77 for skipped, or 1 or other for failure. +# Use the skip_ and fail_ functions to print a diagnostic and then exit +# with the corresponding exit code. +# Exit $? + +# Executing a test that uses this file +# ==================================== +# +# Running a single test: +# $ make check TESTS=test-foo.sh +# +# Running a single test, with verbose output: +# $ make check TESTS=test-foo.sh VERBOSE=yes +# +# Running a single test, with single-stepping: +# 1. Go into a sub-shell: +# $ bash +# 2. Set relevant environment variables from TESTS_ENVIRONMENT in the +# Makefile: +# $ export srcdir=../../tests # this is an example +# 3. Execute the commands from the test, copy&pasting them one by one: +# $ . "$srcdir/init.sh"; path_prepend_ . +# ... +# 4. Finally +# $ exit + +# We require $(...) support unconditionally. +# We require a few additional shell features only when $EXEEXT is nonempty, +# in order to support automatic $EXEEXT emulation: +# - hyphen-containing alias names +# - we prefer to use ${var#...} substitution, rather than having +# to work around lack of support for that feature. +# The following code attempts to find a shell with support for these features +# and re-exec's it. If not, it skips the current test. + +gl_shell_test_script_=' +test $(echo y) = y || exit 1 +test -z "$EXEEXT" && exit 0 +shopt -s expand_aliases +alias a-b="echo zoo" +v=abx + test ${v%x} = ab \ + && test ${v#a} = bx \ + && test $(a-b) = zoo +' + +if test "x$1" = "x--no-reexec"; then + shift +else + for re_shell_ in "${CONFIG_SHELL:-no_shell}" /bin/sh bash dash zsh pdksh fail + do + test "$re_shell_" = no_shell && continue + test "$re_shell_" = fail && skip_ failed to find an adequate shell + if "$re_shell_" -c "$gl_shell_test_script_" 2>/dev/null; then + exec "$re_shell_" "$0" --no-reexec "$@" + echo "$ME_: exec failed" 1>&2 + exit 127 + fi + done +fi + +test -n "$EXEEXT" && shopt -s expand_aliases + +# We use a trap below for cleanup. This requires us to go through +# hoops to get the right exit status transported through the handler. +# So use `Exit STATUS' instead of `exit STATUS' inside of the tests. +# Turn off errexit here so that we don't trip the bug with OSF1/Tru64 +# sh inside this function. +Exit () { set +e; (exit $1); exit $1; } + +# Print warnings (e.g., about skipped and failed tests) to this file number. +# Override by defining to say, 9, in init.cfg, and putting say, +# "export ...ENVVAR_SETTINGS...; exec 9>&2; $(SHELL)" in the definition +# of TESTS_ENVIRONMENT in your tests/Makefile.am file. +# This is useful when using automake's parallel tests mode, to print +# the reason for skip/failure to console, rather than to the .log files. +: ${stderr_fileno_=2} + +warn_() { echo "$@" 1>&$stderr_fileno_; } +fail_() { warn_ "$ME_: failed test: $@"; Exit 1; } +skip_() { warn_ "$ME_: skipped test: $@"; Exit 77; } +framework_failure_() { warn_ "$ME_: set-up failure: $@"; Exit 1; } + +# This is a stub function that is run upon trap (upon regular exit and +# interrupt). Override it with a per-test function, e.g., to unmount +# a partition, or to undo any other global state changes. +cleanup_() { :; } + +if ( diff --version < /dev/null 2>&1 | grep GNU ) 2>&1 > /dev/null; then + compare() { diff -u "$@"; } +elif ( cmp --version < /dev/null 2>&1 | grep GNU ) 2>&1 > /dev/null; then + compare() { cmp -s "$@"; } +else + compare() { cmp "$@"; } +fi + +# An arbitrary prefix to help distinguish test directories. +testdir_prefix_() { printf gt; } + +# Run the user-overridable cleanup_ function, remove the temporary +# directory and exit with the incoming value of $?. +remove_tmp_() +{ + __st=$? + cleanup_ + # cd out of the directory we're about to remove + cd "$initial_cwd_" || cd / || cd /tmp + chmod -R u+rwx "$test_dir_" + # If removal fails and exit status was to be 0, then change it to 1. + rm -rf "$test_dir_" || { test $__st = 0 && __st=1; } + exit $__st +} + +# Given a directory name, DIR, if every entry in it that matches *.exe +# contains only the specified bytes (see the case stmt below), then print +# a space-separated list of those names and return 0. Otherwise, don't +# print anything and return 1. Naming constraints apply also to DIR. +find_exe_basenames_() +{ + feb_dir_=$1 + feb_fail_=0 + feb_result_= + feb_sp_= + for feb_file_ in $feb_dir_/*.exe; do + case $feb_file_ in + *[!-a-zA-Z/0-9_.+]*) feb_fail_=1; break;; + *) # Remove leading file name components as well as the .exe suffix. + feb_file_=${feb_file_##*/} + feb_file_=${feb_file_%.exe} + feb_result_="$feb_result_$feb_sp_$feb_file_";; + esac + feb_sp_=' ' + done + test $feb_fail_ = 0 && printf %s "$feb_result_" + return $feb_fail_ +} + +# Consider the files in directory, $1. +# For each file name of the form PROG.exe, create an alias named +# PROG that simply invokes PROG.exe, then return 0. If any selected +# file name or the directory name, $1, contains an unexpected character, +# define no function and return 1. +create_exe_shims_() +{ + case $EXEEXT in + '') return 0 ;; + .exe) ;; + *) echo "$0: unexpected \$EXEEXT value: $EXEEXT" 1>&2; return 1 ;; + esac + + base_names_=`find_exe_basenames_ $1` \ + || { echo "$0 (exe_shim): skipping directory: $1" 1>&2; return 1; } + + if test -n "$base_names_"; then + for base_ in $base_names_; do + alias "$base_"="$base_$EXEEXT" + done + fi + + return 0 +} + +# Use this function to prepend to PATH an absolute name for each +# specified, possibly-$initial_cwd_-relative, directory. +path_prepend_() +{ + while test $# != 0; do + path_dir_=$1 + case $path_dir_ in + '') fail_ "invalid path dir: '$1'";; + /*) abs_path_dir_=$path_dir_;; + *) abs_path_dir_=`cd "$initial_cwd_/$path_dir_" && echo "$PWD"` \ + || fail_ "invalid path dir: $path_dir_";; + esac + case $abs_path_dir_ in + *:*) fail_ "invalid path dir: '$abs_path_dir_'";; + esac + PATH="$abs_path_dir_:$PATH" + + # Create an alias, FOO, for each FOO.exe in this directory. + create_exe_shims_ "$abs_path_dir_" \ + || fail_ "something failed (above): $abs_path_dir_" + shift + done + export PATH +} + +setup_() +{ + test "$VERBOSE" = yes && set -x + + initial_cwd_=$PWD + ME_=`expr "./$0" : '.*/\(.*\)$'` + + pfx_=`testdir_prefix_` + test_dir_=`mktempd_ "$initial_cwd_" "$pfx_-$ME_.XXXX"` \ + || fail_ "failed to create temporary directory in $initial_cwd_" + cd "$test_dir_" + + # These trap statements ensure that the temporary directory, $test_dir_, + # is removed upon exit as well as upon receipt of any of the listed signals. + trap remove_tmp_ 0 + for sig_ in 1 2 3 13 15; do + eval "trap 'Exit $(expr $sig_ + 128)' $sig_" + done +} + +# Create a temporary directory, much like mktemp -d does. +# Written by Jim Meyering. +# +# Usage: mktempd_ /tmp phoey.XXXXXXXXXX +# +# First, try to use the mktemp program. +# Failing that, we'll roll our own mktemp-like function: +# - try to get random bytes from /dev/urandom +# - failing that, generate output from a combination of quickly-varying +# sources and gzip. Ignore non-varying gzip header, and extract +# "random" bits from there. +# - given those bits, map to file-name bytes using tr, and try to create +# the desired directory. +# - make only $MAX_TRIES_ attempts + +# Helper function. Print $N pseudo-random bytes from a-zA-Z0-9. +rand_bytes_() +{ + n_=$1 + + # Maybe try openssl rand -base64 $n_prime_|tr '+/=\012' abcd first? + # But if they have openssl, they probably have mktemp, too. + + chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 + dev_rand_=/dev/urandom + if test -r "$dev_rand_"; then + # Note: 256-length($chars_) == 194; 3 copies of $chars_ is 186 + 8 = 194. + dd ibs=$n_ count=1 if=$dev_rand_ 2>/dev/null \ + | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_ + return + fi + + n_plus_50_=`expr $n_ + 50` + cmds_='date; date +%N; free; who -a; w; ps auxww; ps ef; netstat -n' + data_=` (eval "$cmds_") 2>&1 | gzip ` + + # Ensure that $data_ has length at least 50+$n_ + while :; do + len_=`echo "$data_"|wc -c` + test $n_plus_50_ -le $len_ && break; + data_=` (echo "$data_"; eval "$cmds_") 2>&1 | gzip ` + done + + echo "$data_" \ + | dd bs=1 skip=50 count=$n_ 2>/dev/null \ + | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_ +} + +mktempd_() +{ + case $# in + 2);; + *) fail_ "Usage: $ME DIR TEMPLATE";; + esac + + destdir_=$1 + template_=$2 + + MAX_TRIES_=4 + + # Disallow any trailing slash on specified destdir: + # it would subvert the post-mktemp "case"-based destdir test. + case $destdir_ in + /) ;; + */) fail_ "invalid destination dir: remove trailing slash(es)";; + esac + + case $template_ in + *XXXX) ;; + *) fail_ "invalid template: $template_ (must have a suffix of at least 4 X's)";; + esac + + fail=0 + + # First, try to use mktemp. + d=`unset TMPDIR; mktemp -d -t -p "$destdir_" "$template_" 2>/dev/null` \ + || fail=1 + + # The resulting name must be in the specified directory. + case $d in "$destdir_"*);; *) fail=1;; esac + + # It must have created the directory. + test -d "$d" || fail=1 + + # It must have 0700 permissions. Handle sticky "S" bits. + perms=`ls -dgo "$d" 2>/dev/null|tr S -` || fail=1 + case $perms in drwx------*) ;; *) fail=1;; esac + + test $fail = 0 && { + echo "$d" + return + } + + # If we reach this point, we'll have to create a directory manually. + + # Get a copy of the template without its suffix of X's. + base_template_=`echo "$template_"|sed 's/XX*$//'` + + # Calculate how many X's we've just removed. + template_length_=`echo "$template_" | wc -c` + nx_=`echo "$base_template_" | wc -c` + nx_=`expr $template_length_ - $nx_` + + err_= + i_=1 + while :; do + X_=`rand_bytes_ $nx_` + candidate_dir_="$destdir_/$base_template_$X_" + err_=`mkdir -m 0700 "$candidate_dir_" 2>&1` \ + && { echo "$candidate_dir_"; return; } + test $MAX_TRIES_ -le $i_ && break; + i_=`expr $i_ + 1` + done + fail_ "$err_" +} + +# If you want to override the testdir_prefix_ function, +# or to add more utility functions, use this file. +test -f "$srcdir/init.cfg" \ + && . "$srcdir/init.cfg" + +setup_ "$@" diff --git a/gnulib-tests/locale/fr/LC_MESSAGES/test-quotearg.mo b/gnulib-tests/locale/fr/LC_MESSAGES/test-quotearg.mo new file mode 100644 index 0000000000000000000000000000000000000000..87e97e1e1f043b3af31ec13f49e9bda812b124e3 GIT binary patch literal 90 zcmca7#4?ou2$+Ca28eZlm=%a^fS3`81E6#ekOrv<fzshX8U#RMFaT1o&XB-xXg9;5 G)eHdqk_OxW literal 0 HcmV?d00001 diff --git a/gnulib-tests/locale/fr/LC_MESSAGES/test-quotearg.po b/gnulib-tests/locale/fr/LC_MESSAGES/test-quotearg.po new file mode 100644 index 0000000..1ea251f --- /dev/null +++ b/gnulib-tests/locale/fr/LC_MESSAGES/test-quotearg.po @@ -0,0 +1,20 @@ +# Message catalog that maps the ASCII replacements for single-quote characters +# to real single-quote characters. +# The header entry is commented out on purpose, so that gettext() performs no +# no character set conversion from the PO file's encoding to the locale +# encoding. This allows us to use the same PO file in various locales. +#msgid "" +#msgstr "" +#"Project-Id-Version: GNU gnulib\n" +#"PO-Revision-Date: 2009-01-26 01:02+01:00\n" +#"Last-Translator: Eric Blake <ebb9@byu.net>\n" +#"Language-Team: Undetermined <und@li.org>\n" +#"MIME-Version: 1.0\n" +#"Content-Type: text/plain; charset=UTF-8\n" +#"Content-Transfer-Encoding: 8bit\n" + +msgid "`" +msgstr "\302\253" + +msgid "'" +msgstr "\302\273" diff --git a/gnulib-tests/macros.h b/gnulib-tests/macros.h new file mode 100644 index 0000000..3c81633 --- /dev/null +++ b/gnulib-tests/macros.h @@ -0,0 +1,66 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Common macros used by gnulib tests. + Copyright (C) 2006-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + + +/* This file contains macros that are used by many gnulib tests. + Put here only frequently used macros, say, used by 10 tests or more. */ + +#include <stdio.h> +#include <stdlib.h> + +/* Define ASSERT_STREAM before including this file if ASSERT must + target a stream other than stderr. */ +#ifndef ASSERT_STREAM +# define ASSERT_STREAM stderr +#endif + +/* ASSERT (condition); + verifies that the specified condition is fulfilled. If not, a message + is printed to ASSERT_STREAM if defined (defaulting to stderr if + undefined) and the program is terminated with an error code. + + This macro has the following properties: + - The programmer specifies the expected condition, not the failure + condition. This simplifies thinking. + - The condition is tested always, regardless of compilation flags. + (Unlike the macro from <assert.h>.) + - On Unix platforms, the tester can debug the test program with a + debugger (provided core dumps are enabled: "ulimit -c unlimited"). + - For the sake of platforms where no debugger is available (such as + some mingw systems), an error message is printed on the error + stream that includes the source location of the ASSERT invocation. + */ +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (ASSERT_STREAM, "%s:%d: assertion failed\n", \ + __FILE__, __LINE__); \ + fflush (ASSERT_STREAM); \ + abort (); \ + } \ + } \ + while (0) + +/* SIZEOF (array) + returns the number of elements of an array. It works for arrays that are + declared outside functions and for local variables of array type. It does + *not* work for function parameters of array type, because they are actually + parameters of pointer type. */ +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) diff --git a/gnulib-tests/pathmax.h b/gnulib-tests/pathmax.h new file mode 100644 index 0000000..5c00060 --- /dev/null +++ b/gnulib-tests/pathmax.h @@ -0,0 +1,50 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Define PATH_MAX somehow. Requires sys/types.h. + Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2010 Free Software + Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _PATHMAX_H +# define _PATHMAX_H + +# include <unistd.h> + +# include <limits.h> + +# ifndef _POSIX_PATH_MAX +# define _POSIX_PATH_MAX 256 +# endif + +# if !defined PATH_MAX && defined _PC_PATH_MAX && defined HAVE_PATHCONF +# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 \ + : pathconf ("/", _PC_PATH_MAX)) +# 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 + +# ifndef PATH_MAX +# define PATH_MAX _POSIX_PATH_MAX +# endif + +#endif /* _PATHMAX_H */ diff --git a/gnulib-tests/putenv.c b/gnulib-tests/putenv.c new file mode 100644 index 0000000..5a40197 --- /dev/null +++ b/gnulib-tests/putenv.c @@ -0,0 +1,134 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2010 Free Software + Foundation, Inc. + + 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <stdlib.h> + +#include <stddef.h> + +/* Include errno.h *after* sys/types.h to work around header problems + on AIX 3.2.5. */ +#include <errno.h> +#ifndef __set_errno +# define __set_errno(ev) ((errno) = (ev)) +#endif + +#include <string.h> +#include <unistd.h> + +#if HAVE_GNU_LD +# define environ __environ +#else +extern char **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 + +static 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; +} + + +/* Put STRING, which is of the form "NAME=VALUE", in the environment. + If STRING contains no `=', then remove STRING from the environment. */ +int +putenv (char *string) +{ + const char *const name_end = strchr (string, '='); + register size_t size; + register char **ep; + + if (name_end == NULL) + { + /* Remove the variable from the environment. */ + return _unsetenv (string); + } + + size = 0; + for (ep = environ; *ep != NULL; ++ep) + if (!strncmp (*ep, string, name_end - string) && + (*ep)[name_end - string] == '=') + break; + else + ++size; + + if (*ep == NULL) + { + static char **last_environ = NULL; + char **new_environ = (char **) malloc ((size + 2) * sizeof (char *)); + if (new_environ == NULL) + return -1; + (void) memcpy ((void *) new_environ, (void *) environ, + size * sizeof (char *)); + new_environ[size] = (char *) string; + new_environ[size + 1] = NULL; + free (last_environ); + last_environ = new_environ; + environ = new_environ; + } + else + *ep = string; + + return 0; +} diff --git a/gnulib-tests/same-inode.h b/gnulib-tests/same-inode.h new file mode 100644 index 0000000..3db599a --- /dev/null +++ b/gnulib-tests/same-inode.h @@ -0,0 +1,27 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Determine whether two stat buffers refer to the same file. + + Copyright (C) 2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 SAME_INODE_H +# define SAME_INODE_H 1 + +# define SAME_INODE(Stat_buf_1, Stat_buf_2) \ + ((Stat_buf_1).st_ino == (Stat_buf_2).st_ino \ + && (Stat_buf_1).st_dev == (Stat_buf_2).st_dev) + +#endif diff --git a/gnulib-tests/setenv.c b/gnulib-tests/setenv.c new file mode 100644 index 0000000..addfed5 --- /dev/null +++ b/gnulib-tests/setenv.c @@ -0,0 +1,385 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 1992, 1995-2003, 2005-2010 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 <http://www.gnu.org/licenses/>. */ + +#if !_LIBC +# include <config.h> +#endif + +/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc + optimizes away the name == NULL test below. */ +#define _GL_ARG_NONNULL(params) + +#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) + { + 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 +# 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/gnulib-tests/signature.h b/gnulib-tests/signature.h new file mode 100644 index 0000000..8ee486b --- /dev/null +++ b/gnulib-tests/signature.h @@ -0,0 +1,50 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Macro for checking that a function declaration is compliant. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 SIGNATURE_CHECK + +/* Check that the function FN takes the specified arguments ARGS with + a return type of RET. This header is designed to be included after + <config.h> and the one system header that is supposed to contain + the function being checked, but prior to any other system headers + that are necessary for the unit test. Therefore, this file does + not include any system headers, nor reference anything outside of + the macro arguments. For an example, if foo.h should provide: + + extern int foo (char, float); + + then the unit test named test-foo.c would start out with: + + #include <config.h> + #include <foo.h> + #include "signature.h" + SIGNATURE_CHECK (foo, int, (char, float)); + #include <other.h> + ... +*/ +# define SIGNATURE_CHECK(fn, ret, args) \ + SIGNATURE_CHECK1 (fn, ret, args, __LINE__) + +/* Necessary to allow multiple SIGNATURE_CHECK lines in a unit test. + Note that the checks must not occupy the same line. */ +# define SIGNATURE_CHECK1(fn, ret, args, id) \ + SIGNATURE_CHECK2 (fn, ret, args, id) /* macroexpand line */ +# define SIGNATURE_CHECK2(fn, ret, args, id) \ + static ret (* _GL_UNUSED signature_check ## id) args = fn + +#endif /* SIGNATURE_CHECK */ diff --git a/gnulib-tests/sleep.c b/gnulib-tests/sleep.c new file mode 100644 index 0000000..4303d47 --- /dev/null +++ b/gnulib-tests/sleep.c @@ -0,0 +1,77 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Pausing execution of the current thread. + Copyright (C) 2007, 2009, 2010 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <unistd.h> + +#include <limits.h> + +#include "verify.h" + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> + +unsigned int +sleep (unsigned int seconds) +{ + unsigned int remaining; + + /* Sleep for 1 second many times, because + 1. Sleep is not interruptiple by Ctrl-C, + 2. we want to avoid arithmetic overflow while multiplying with 1000. */ + for (remaining = seconds; remaining > 0; remaining--) + Sleep (1000); + + return remaining; +} + +#elif HAVE_SLEEP + +# undef sleep + +/* Guarantee unlimited sleep and a reasonable return value. Cygwin + 1.5.x rejects attempts to sleep more than 49.7 days (2**32 + milliseconds), but uses uninitialized memory which results in a + garbage answer. */ +unsigned int +rpl_sleep (unsigned int seconds) +{ + /* This requires int larger than 16 bits. */ + verify (UINT_MAX / 49 / 24 / 60 / 60); + const unsigned int limit = 49 * 24 * 60 * 60; + while (limit < seconds) + { + unsigned int result; + seconds -= limit; + result = sleep (limit); + if (result) + return seconds + result; + } + return sleep (seconds); +} + +#else /* !HAVE_SLEEP */ + + #error "Please port gnulib sleep.c to your platform, possibly using usleep() or select(), then report this to bug-gnulib." + +#endif diff --git a/gnulib-tests/symlink.c b/gnulib-tests/symlink.c new file mode 100644 index 0000000..ecf646f --- /dev/null +++ b/gnulib-tests/symlink.c @@ -0,0 +1,59 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Stub for symlink(). + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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> + +/* Specification. */ +#include <unistd.h> + +#include <errno.h> +#include <string.h> +#include <sys/stat.h> + + +#if HAVE_SYMLINK + +# undef symlink + +/* Create a symlink, but reject trailing slash. */ +int +rpl_symlink (char const *contents, char const *name) +{ + size_t len = strlen (name); + if (len && name[len - 1] == '/') + { + struct stat st; + if (lstat (name, &st) == 0) + errno = EEXIST; + return -1; + } + return symlink (contents, name); +} + +#else /* !HAVE_SYMLINK */ + +/* The system does not support symlinks. */ +int +symlink (char const *contents _GL_UNUSED, + char const *name _GL_UNUSED) +{ + errno = ENOSYS; + return -1; +} + +#endif /* !HAVE_SYMLINK */ diff --git a/gnulib-tests/test-alloca-opt.c b/gnulib-tests/test-alloca-opt.c new file mode 100644 index 0000000..f2107fe --- /dev/null +++ b/gnulib-tests/test-alloca-opt.c @@ -0,0 +1,64 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of optional automatic memory allocation. + Copyright (C) 2005, 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <alloca.h> + +#if HAVE_ALLOCA + +static void +do_allocation (int n) +{ + void *ptr = alloca (n); + (void) ptr; +} + +void (*func) (int) = do_allocation; + +#endif + +int +main () +{ +#if HAVE_ALLOCA + int i; + + /* Repeat a lot of times, to make sure there's no memory leak. */ + for (i = 0; i < 100000; i++) + { + /* Try various values. + n = 0 gave a crash on Alpha with gcc-2.5.8. + Some versions of MacOS X have a stack size limit of 512 KB. */ + func (34); + func (134); + func (399); + func (510823); + func (129321); + func (0); + func (4070); + func (4095); + func (1); + func (16582); + } +#endif + + return 0; +} diff --git a/gnulib-tests/test-argmatch.c b/gnulib-tests/test-argmatch.c new file mode 100644 index 0000000..7ee3709 --- /dev/null +++ b/gnulib-tests/test-argmatch.c @@ -0,0 +1,100 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of exact or abbreviated match search. + Copyright (C) 1990, 1998-1999, 2001-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007, based on test code + by David MacKenzie <djm@gnu.ai.mit.edu>. */ + +#include <config.h> + +#include "argmatch.h" + +#include <stdlib.h> + +#include "progname.h" +#include "macros.h" + +/* Some packages define ARGMATCH_DIE and ARGMATCH_DIE_DECL in <config.h>, and + thus must link with a definition of that function. Provide it here. */ +#ifdef ARGMATCH_DIE_DECL +ARGMATCH_DIE_DECL { exit (1); } +#endif + +enum backup_type +{ + no_backups, + simple_backups, + numbered_existing_backups, + numbered_backups +}; + +static const char *const backup_args[] = +{ + "no", "none", "off", + "simple", "never", "single", + "existing", "nil", "numbered-existing", + "numbered", "t", "newstyle", + NULL +}; + +static const enum backup_type backup_vals[] = +{ + no_backups, no_backups, no_backups, + simple_backups, simple_backups, simple_backups, + numbered_existing_backups, numbered_existing_backups, numbered_existing_backups, + numbered_backups, numbered_backups, numbered_backups +}; + +int +main (int argc, char *argv[]) +{ + set_program_name (argv[0]); + + /* Not found. */ + ASSERT (ARGMATCH ("klingon", backup_args, backup_vals) == -1); + + /* Exact match. */ + ASSERT (ARGMATCH ("none", backup_args, backup_vals) == 1); + ASSERT (ARGMATCH ("nil", backup_args, backup_vals) == 7); + + /* Too long. */ + ASSERT (ARGMATCH ("nilpotent", backup_args, backup_vals) == -1); + + /* Abbreviated. */ + ASSERT (ARGMATCH ("simpl", backup_args, backup_vals) == 3); + ASSERT (ARGMATCH ("simp", backup_args, backup_vals) == 3); + ASSERT (ARGMATCH ("sim", backup_args, backup_vals) == 3); + + /* Exact match and abbreviated. */ + ASSERT (ARGMATCH ("numbered", backup_args, backup_vals) == 9); + ASSERT (ARGMATCH ("numbere", backup_args, backup_vals) == -2); + ASSERT (ARGMATCH ("number", backup_args, backup_vals) == -2); + ASSERT (ARGMATCH ("numbe", backup_args, backup_vals) == -2); + ASSERT (ARGMATCH ("numb", backup_args, backup_vals) == -2); + ASSERT (ARGMATCH ("num", backup_args, backup_vals) == -2); + ASSERT (ARGMATCH ("nu", backup_args, backup_vals) == -2); + ASSERT (ARGMATCH ("n", backup_args, backup_vals) == -2); + + /* Ambiguous abbreviated. */ + ASSERT (ARGMATCH ("ne", backup_args, backup_vals) == -2); + + /* Ambiguous abbreviated, but same value. */ + ASSERT (ARGMATCH ("si", backup_args, backup_vals) == 3); + ASSERT (ARGMATCH ("s", backup_args, backup_vals) == 3); + + return 0; +} diff --git a/gnulib-tests/test-binary-io.c b/gnulib-tests/test-binary-io.c new file mode 100644 index 0000000..e7b68c4 --- /dev/null +++ b/gnulib-tests/test-binary-io.c @@ -0,0 +1,66 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of binary mode I/O. + Copyright (C) 2005, 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. */ + +#include <config.h> + +#include "binary-io.h" + +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#include "macros.h" + +int +main () +{ + /* Test the O_BINARY macro. */ + { + int fd = + open ("t-bin-out2.tmp", O_CREAT | O_TRUNC | O_RDWR | O_BINARY, 0600); + if (write (fd, "Hello\n", 6) < 0) + exit (1); + close (fd); + } + { + struct stat statbuf; + if (stat ("t-bin-out2.tmp", &statbuf) < 0) + exit (1); + ASSERT (statbuf.st_size == 6); + } + unlink ("t-bin-out2.tmp"); + + /* Test the SET_BINARY macro. */ + SET_BINARY (1); + fputs ("Hello\n", stdout); + fclose (stdout); + fclose (stderr); + { + struct stat statbuf; + if (stat ("t-bin-out1.tmp", &statbuf) < 0) + exit (1); + ASSERT (statbuf.st_size == 6); + } + + return 0; +} diff --git a/gnulib-tests/test-binary-io.sh b/gnulib-tests/test-binary-io.sh new file mode 100755 index 0000000..33e128c --- /dev/null +++ b/gnulib-tests/test-binary-io.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +tmpfiles="" +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="$tmpfiles t-bin-out1.tmp t-bin-out2.tmp" +./test-binary-io${EXEEXT} > t-bin-out1.tmp || exit 1 + +rm -fr $tmpfiles + +exit 0 diff --git a/gnulib-tests/test-bitrotate.c b/gnulib-tests/test-bitrotate.c new file mode 100644 index 0000000..a3afeda --- /dev/null +++ b/gnulib-tests/test-bitrotate.c @@ -0,0 +1,281 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <bitrotate.h> substitute. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Simon Josefsson <simon@josefsson.org>, 2008. */ + +#include <config.h> + +#include "bitrotate.h" + +#include "macros.h" + +int +main (void) +{ + ASSERT (rotl8 (42, 0) == 42); + ASSERT (rotl8 (42, 1) == 84); + ASSERT (rotl8 (42, 2) == 168); + ASSERT (rotl8 (42, 3) == 81); + ASSERT (rotl8 (42, 4) == 162); + ASSERT (rotl8 (42, 5) == 69); + ASSERT (rotl8 (42, 6) == 138); + ASSERT (rotl8 (42, 7) == 21); + ASSERT (rotl8 (42, 8) == 42); + + ASSERT (rotr8 (42, 0) == 42); + ASSERT (rotr8 (42, 1) == 21); + ASSERT (rotr8 (42, 2) == 138); + ASSERT (rotr8 (42, 3) == 69); + ASSERT (rotr8 (42, 4) == 162); + ASSERT (rotr8 (42, 5) == 81); + ASSERT (rotr8 (42, 6) == 168); + ASSERT (rotr8 (42, 7) == 84); + ASSERT (rotr8 (42, 8) == 42); + + ASSERT (rotl16 (43981, 0) == 43981); + ASSERT (rotl16 (43981, 1) == 22427); + ASSERT (rotl16 (43981, 2) == 44854); + ASSERT (rotl16 (43981, 3) == 24173); + ASSERT (rotl16 (43981, 4) == 48346); + ASSERT (rotl16 (43981, 5) == 31157); + ASSERT (rotl16 (43981, 6) == 62314); + ASSERT (rotl16 (43981, 7) == 59093); + ASSERT (rotl16 (43981, 8) == 52651); + ASSERT (rotl16 (43981, 9) == 39767); + ASSERT (rotl16 (43981, 10) == 13999); + ASSERT (rotl16 (43981, 11) == 27998); + ASSERT (rotl16 (43981, 12) == 55996); + ASSERT (rotl16 (43981, 13) == 46457); + ASSERT (rotl16 (43981, 14) == 27379); + ASSERT (rotl16 (43981, 15) == 54758); + ASSERT (rotl16 (43981, 16) == 43981); + + ASSERT (rotr16 (43981, 0) == 43981); + ASSERT (rotr16 (43981, 1) == 54758); + ASSERT (rotr16 (43981, 2) == 27379); + ASSERT (rotr16 (43981, 3) == 46457); + ASSERT (rotr16 (43981, 4) == 55996); + ASSERT (rotr16 (43981, 5) == 27998); + ASSERT (rotr16 (43981, 6) == 13999); + ASSERT (rotr16 (43981, 7) == 39767); + ASSERT (rotr16 (43981, 8) == 52651); + ASSERT (rotr16 (43981, 9) == 59093); + ASSERT (rotr16 (43981, 10) == 62314); + ASSERT (rotr16 (43981, 11) == 31157); + ASSERT (rotr16 (43981, 12) == 48346); + ASSERT (rotr16 (43981, 13) == 24173); + ASSERT (rotr16 (43981, 14) == 44854); + ASSERT (rotr16 (43981, 15) == 22427); + ASSERT (rotr16 (43981, 16) == 43981); + + ASSERT (rotl32 (2309737967U, 1) == 324508639U); + ASSERT (rotl32 (2309737967U, 2) == 649017278U); + ASSERT (rotl32 (2309737967U, 3) == 1298034556U); + ASSERT (rotl32 (2309737967U, 4) == 2596069112U); + ASSERT (rotl32 (2309737967U, 5) == 897170929U); + ASSERT (rotl32 (2309737967U, 6) == 1794341858U); + ASSERT (rotl32 (2309737967U, 7) == 3588683716U); + ASSERT (rotl32 (2309737967U, 8) == 2882400137U); + ASSERT (rotl32 (2309737967U, 9) == 1469832979U); + ASSERT (rotl32 (2309737967U, 10) == 2939665958U); + ASSERT (rotl32 (2309737967U, 11) == 1584364621U); + ASSERT (rotl32 (2309737967U, 12) == 3168729242U); + ASSERT (rotl32 (2309737967U, 13) == 2042491189U); + ASSERT (rotl32 (2309737967U, 14) == 4084982378U); + ASSERT (rotl32 (2309737967U, 15) == 3874997461U); + ASSERT (rotl32 (2309737967U, 16) == 3455027627U); + ASSERT (rotl32 (2309737967U, 17) == 2615087959U); + ASSERT (rotl32 (2309737967U, 18) == 935208623U); + ASSERT (rotl32 (2309737967U, 19) == 1870417246U); + ASSERT (rotl32 (2309737967U, 20) == 3740834492U); + ASSERT (rotl32 (2309737967U, 21) == 3186701689U); + ASSERT (rotl32 (2309737967U, 22) == 2078436083U); + ASSERT (rotl32 (2309737967U, 23) == 4156872166U); + ASSERT (rotl32 (2309737967U, 24) == 4018777037U); + ASSERT (rotl32 (2309737967U, 25) == 3742586779U); + ASSERT (rotl32 (2309737967U, 26) == 3190206263U); + ASSERT (rotl32 (2309737967U, 27) == 2085445231U); + ASSERT (rotl32 (2309737967U, 28) == 4170890462U); + ASSERT (rotl32 (2309737967U, 29) == 4046813629U); + ASSERT (rotl32 (2309737967U, 30) == 3798659963U); + ASSERT (rotl32 (2309737967U, 31) == 3302352631U); + + ASSERT (rotr32 (2309737967U, 1) == 3302352631lU); + ASSERT (rotr32 (2309737967U, 2) == 3798659963lU); + ASSERT (rotr32 (2309737967U, 3) == 4046813629lU); + ASSERT (rotr32 (2309737967U, 4) == 4170890462lU); + ASSERT (rotr32 (2309737967U, 5) == 2085445231lU); + ASSERT (rotr32 (2309737967U, 6) == 3190206263lU); + ASSERT (rotr32 (2309737967U, 7) == 3742586779lU); + ASSERT (rotr32 (2309737967U, 8) == 4018777037lU); + ASSERT (rotr32 (2309737967U, 9) == 4156872166lU); + ASSERT (rotr32 (2309737967U, 10) == 2078436083lU); + ASSERT (rotr32 (2309737967U, 11) == 3186701689lU); + ASSERT (rotr32 (2309737967U, 12) == 3740834492lU); + ASSERT (rotr32 (2309737967U, 13) == 1870417246lU); + ASSERT (rotr32 (2309737967U, 14) == 935208623lU); + ASSERT (rotr32 (2309737967U, 15) == 2615087959lU); + ASSERT (rotr32 (2309737967U, 16) == 3455027627lU); + ASSERT (rotr32 (2309737967U, 17) == 3874997461lU); + ASSERT (rotr32 (2309737967U, 18) == 4084982378lU); + ASSERT (rotr32 (2309737967U, 19) == 2042491189lU); + ASSERT (rotr32 (2309737967U, 20) == 3168729242lU); + ASSERT (rotr32 (2309737967U, 21) == 1584364621lU); + ASSERT (rotr32 (2309737967U, 22) == 2939665958lU); + ASSERT (rotr32 (2309737967U, 23) == 1469832979lU); + ASSERT (rotr32 (2309737967U, 24) == 2882400137lU); + ASSERT (rotr32 (2309737967U, 25) == 3588683716lU); + ASSERT (rotr32 (2309737967U, 26) == 1794341858lU); + ASSERT (rotr32 (2309737967U, 27) == 897170929lU); + ASSERT (rotr32 (2309737967U, 28) == 2596069112lU); + ASSERT (rotr32 (2309737967U, 29) == 1298034556lU); + ASSERT (rotr32 (2309737967U, 30) == 649017278lU); + ASSERT (rotr32 (2309737967U, 31) == 324508639lU); + +#ifdef UINT64_MAX + ASSERT (rotl64 (16045690984503098046ULL, 1) == 13644637895296644477ULL); + ASSERT (rotl64 (16045690984503098046ULL, 2) == 8842531716883737339ULL); + ASSERT (rotl64 (16045690984503098046ULL, 3) == 17685063433767474678ULL); + ASSERT (rotl64 (16045690984503098046ULL, 4) == 16923382793825397741ULL); + ASSERT (rotl64 (16045690984503098046ULL, 5) == 15400021513941243867ULL); + ASSERT (rotl64 (16045690984503098046ULL, 6) == 12353298954172936119ULL); + ASSERT (rotl64 (16045690984503098046ULL, 7) == 6259853834636320623ULL); + ASSERT (rotl64 (16045690984503098046ULL, 8) == 12519707669272641246ULL); + ASSERT (rotl64 (16045690984503098046ULL, 9) == 6592671264835730877ULL); + ASSERT (rotl64 (16045690984503098046ULL, 10) == 13185342529671461754ULL); + ASSERT (rotl64 (16045690984503098046ULL, 11) == 7923940985633371893ULL); + ASSERT (rotl64 (16045690984503098046ULL, 12) == 15847881971266743786ULL); + ASSERT (rotl64 (16045690984503098046ULL, 13) == 13249019868823935957ULL); + ASSERT (rotl64 (16045690984503098046ULL, 14) == 8051295663938320299ULL); + ASSERT (rotl64 (16045690984503098046ULL, 15) == 16102591327876640598ULL); + ASSERT (rotl64 (16045690984503098046ULL, 16) == 13758438582043729581ULL); + ASSERT (rotl64 (16045690984503098046ULL, 17) == 9070133090377907547ULL); + ASSERT (rotl64 (16045690984503098046ULL, 18) == 18140266180755815094ULL); + ASSERT (rotl64 (16045690984503098046ULL, 19) == 17833788287802078573ULL); + ASSERT (rotl64 (16045690984503098046ULL, 20) == 17220832501894605531ULL); + ASSERT (rotl64 (16045690984503098046ULL, 21) == 15994920930079659447ULL); + ASSERT (rotl64 (16045690984503098046ULL, 22) == 13543097786449767279ULL); + ASSERT (rotl64 (16045690984503098046ULL, 23) == 8639451499189982943ULL); + ASSERT (rotl64 (16045690984503098046ULL, 24) == 17278902998379965886ULL); + ASSERT (rotl64 (16045690984503098046ULL, 25) == 16111061923050380157ULL); + ASSERT (rotl64 (16045690984503098046ULL, 26) == 13775379772391208699ULL); + ASSERT (rotl64 (16045690984503098046ULL, 27) == 9104015471072865783ULL); + ASSERT (rotl64 (16045690984503098046ULL, 28) == 18208030942145731566ULL); + ASSERT (rotl64 (16045690984503098046ULL, 29) == 17969317810581911517ULL); + ASSERT (rotl64 (16045690984503098046ULL, 30) == 17491891547454271419ULL); + ASSERT (rotl64 (16045690984503098046ULL, 31) == 16537039021198991223ULL); + ASSERT (rotl64 (16045690984503098046ULL, 32) == 14627333968688430831ULL); + ASSERT (rotl64 (16045690984503098046ULL, 33) == 10807923863667310047ULL); + ASSERT (rotl64 (16045690984503098046ULL, 34) == 3169103653625068479ULL); + ASSERT (rotl64 (16045690984503098046ULL, 35) == 6338207307250136958ULL); + ASSERT (rotl64 (16045690984503098046ULL, 36) == 12676414614500273916ULL); + ASSERT (rotl64 (16045690984503098046ULL, 37) == 6906085155290996217ULL); + ASSERT (rotl64 (16045690984503098046ULL, 38) == 13812170310581992434ULL); + ASSERT (rotl64 (16045690984503098046ULL, 39) == 9177596547454433253ULL); + ASSERT (rotl64 (16045690984503098046ULL, 40) == 18355193094908866506ULL); + ASSERT (rotl64 (16045690984503098046ULL, 41) == 18263642116108181397ULL); + ASSERT (rotl64 (16045690984503098046ULL, 42) == 18080540158506811179ULL); + ASSERT (rotl64 (16045690984503098046ULL, 43) == 17714336243304070743ULL); + ASSERT (rotl64 (16045690984503098046ULL, 44) == 16981928412898589871ULL); + ASSERT (rotl64 (16045690984503098046ULL, 45) == 15517112752087628127ULL); + ASSERT (rotl64 (16045690984503098046ULL, 46) == 12587481430465704639ULL); + ASSERT (rotl64 (16045690984503098046ULL, 47) == 6728218787221857663ULL); + ASSERT (rotl64 (16045690984503098046ULL, 48) == 13456437574443715326ULL); + ASSERT (rotl64 (16045690984503098046ULL, 49) == 8466131075177879037ULL); + ASSERT (rotl64 (16045690984503098046ULL, 50) == 16932262150355758074ULL); + ASSERT (rotl64 (16045690984503098046ULL, 51) == 15417780227001964533ULL); + ASSERT (rotl64 (16045690984503098046ULL, 52) == 12388816380294377451ULL); + ASSERT (rotl64 (16045690984503098046ULL, 53) == 6330888686879203287ULL); + ASSERT (rotl64 (16045690984503098046ULL, 54) == 12661777373758406574ULL); + ASSERT (rotl64 (16045690984503098046ULL, 55) == 6876810673807261533ULL); + ASSERT (rotl64 (16045690984503098046ULL, 56) == 13753621347614523066ULL); + ASSERT (rotl64 (16045690984503098046ULL, 57) == 9060498621519494517ULL); + ASSERT (rotl64 (16045690984503098046ULL, 58) == 18120997243038989034ULL); + ASSERT (rotl64 (16045690984503098046ULL, 59) == 17795250412368426453ULL); + ASSERT (rotl64 (16045690984503098046ULL, 60) == 17143756751027301291ULL); + ASSERT (rotl64 (16045690984503098046ULL, 61) == 15840769428345050967ULL); + ASSERT (rotl64 (16045690984503098046ULL, 62) == 13234794782980550319ULL); + ASSERT (rotl64 (16045690984503098046ULL, 63) == 8022845492251549023ULL); + + ASSERT (rotr64 (16045690984503098046ULL, 1) == 8022845492251549023ULL); + ASSERT (rotr64 (16045690984503098046ULL, 2) == 13234794782980550319ULL); + ASSERT (rotr64 (16045690984503098046ULL, 3) == 15840769428345050967ULL); + ASSERT (rotr64 (16045690984503098046ULL, 4) == 17143756751027301291ULL); + ASSERT (rotr64 (16045690984503098046ULL, 5) == 17795250412368426453ULL); + ASSERT (rotr64 (16045690984503098046ULL, 6) == 18120997243038989034ULL); + ASSERT (rotr64 (16045690984503098046ULL, 7) == 9060498621519494517ULL); + ASSERT (rotr64 (16045690984503098046ULL, 8) == 13753621347614523066ULL); + ASSERT (rotr64 (16045690984503098046ULL, 9) == 6876810673807261533ULL); + ASSERT (rotr64 (16045690984503098046ULL, 10) == 12661777373758406574ULL); + ASSERT (rotr64 (16045690984503098046ULL, 11) == 6330888686879203287ULL); + ASSERT (rotr64 (16045690984503098046ULL, 12) == 12388816380294377451ULL); + ASSERT (rotr64 (16045690984503098046ULL, 13) == 15417780227001964533ULL); + ASSERT (rotr64 (16045690984503098046ULL, 14) == 16932262150355758074ULL); + ASSERT (rotr64 (16045690984503098046ULL, 15) == 8466131075177879037ULL); + ASSERT (rotr64 (16045690984503098046ULL, 16) == 13456437574443715326ULL); + ASSERT (rotr64 (16045690984503098046ULL, 17) == 6728218787221857663ULL); + ASSERT (rotr64 (16045690984503098046ULL, 18) == 12587481430465704639ULL); + ASSERT (rotr64 (16045690984503098046ULL, 19) == 15517112752087628127ULL); + ASSERT (rotr64 (16045690984503098046ULL, 20) == 16981928412898589871ULL); + ASSERT (rotr64 (16045690984503098046ULL, 21) == 17714336243304070743ULL); + ASSERT (rotr64 (16045690984503098046ULL, 22) == 18080540158506811179ULL); + ASSERT (rotr64 (16045690984503098046ULL, 23) == 18263642116108181397ULL); + ASSERT (rotr64 (16045690984503098046ULL, 24) == 18355193094908866506ULL); + ASSERT (rotr64 (16045690984503098046ULL, 25) == 9177596547454433253ULL); + ASSERT (rotr64 (16045690984503098046ULL, 26) == 13812170310581992434ULL); + ASSERT (rotr64 (16045690984503098046ULL, 27) == 6906085155290996217ULL); + ASSERT (rotr64 (16045690984503098046ULL, 28) == 12676414614500273916ULL); + ASSERT (rotr64 (16045690984503098046ULL, 29) == 6338207307250136958ULL); + ASSERT (rotr64 (16045690984503098046ULL, 30) == 3169103653625068479ULL); + ASSERT (rotr64 (16045690984503098046ULL, 31) == 10807923863667310047ULL); + ASSERT (rotr64 (16045690984503098046ULL, 32) == 14627333968688430831ULL); + ASSERT (rotr64 (16045690984503098046ULL, 33) == 16537039021198991223ULL); + ASSERT (rotr64 (16045690984503098046ULL, 34) == 17491891547454271419ULL); + ASSERT (rotr64 (16045690984503098046ULL, 35) == 17969317810581911517ULL); + ASSERT (rotr64 (16045690984503098046ULL, 36) == 18208030942145731566ULL); + ASSERT (rotr64 (16045690984503098046ULL, 37) == 9104015471072865783ULL); + ASSERT (rotr64 (16045690984503098046ULL, 38) == 13775379772391208699ULL); + ASSERT (rotr64 (16045690984503098046ULL, 39) == 16111061923050380157ULL); + ASSERT (rotr64 (16045690984503098046ULL, 40) == 17278902998379965886ULL); + ASSERT (rotr64 (16045690984503098046ULL, 41) == 8639451499189982943ULL); + ASSERT (rotr64 (16045690984503098046ULL, 42) == 13543097786449767279ULL); + ASSERT (rotr64 (16045690984503098046ULL, 43) == 15994920930079659447ULL); + ASSERT (rotr64 (16045690984503098046ULL, 44) == 17220832501894605531ULL); + ASSERT (rotr64 (16045690984503098046ULL, 45) == 17833788287802078573ULL); + ASSERT (rotr64 (16045690984503098046ULL, 46) == 18140266180755815094ULL); + ASSERT (rotr64 (16045690984503098046ULL, 47) == 9070133090377907547ULL); + ASSERT (rotr64 (16045690984503098046ULL, 48) == 13758438582043729581ULL); + ASSERT (rotr64 (16045690984503098046ULL, 49) == 16102591327876640598ULL); + ASSERT (rotr64 (16045690984503098046ULL, 50) == 8051295663938320299ULL); + ASSERT (rotr64 (16045690984503098046ULL, 51) == 13249019868823935957ULL); + ASSERT (rotr64 (16045690984503098046ULL, 52) == 15847881971266743786ULL); + ASSERT (rotr64 (16045690984503098046ULL, 53) == 7923940985633371893ULL); + ASSERT (rotr64 (16045690984503098046ULL, 54) == 13185342529671461754ULL); + ASSERT (rotr64 (16045690984503098046ULL, 55) == 6592671264835730877ULL); + ASSERT (rotr64 (16045690984503098046ULL, 56) == 12519707669272641246ULL); + ASSERT (rotr64 (16045690984503098046ULL, 57) == 6259853834636320623ULL); + ASSERT (rotr64 (16045690984503098046ULL, 58) == 12353298954172936119ULL); + ASSERT (rotr64 (16045690984503098046ULL, 59) == 15400021513941243867ULL); + ASSERT (rotr64 (16045690984503098046ULL, 60) == 16923382793825397741ULL); + ASSERT (rotr64 (16045690984503098046ULL, 61) == 17685063433767474678ULL); + ASSERT (rotr64 (16045690984503098046ULL, 62) == 8842531716883737339ULL); + ASSERT (rotr64 (16045690984503098046ULL, 63) == 13644637895296644477ULL); +#endif /* UINT64_MAX */ + + return 0; +} diff --git a/gnulib-tests/test-btowc.c b/gnulib-tests/test-btowc.c new file mode 100644 index 0000000..e8d1d04 --- /dev/null +++ b/gnulib-tests/test-btowc.c @@ -0,0 +1,65 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of conversion of unibyte character to wide character. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include <config.h> + +#include <wchar.h> + +#include "signature.h" +SIGNATURE_CHECK (btowc, wint_t, (int)); + +#include <locale.h> +#include <stdio.h> + +#include "macros.h" + +int +main (int argc, char *argv[]) +{ + int c; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + ASSERT (btowc (EOF) == WEOF); + + if (argc > 1) + switch (argv[1][0]) + { + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + for (c = 0; c < 0x80; c++) + ASSERT (btowc (c) == c); + for (c = 0xA0; c < 0x100; c++) + ASSERT (btowc (c) != WEOF); + return 0; + + case '2': + /* Locale encoding is UTF-8. */ + for (c = 0; c < 0x80; c++) + ASSERT (btowc (c) == c); + for (c = 0x80; c < 0x100; c++) + ASSERT (btowc (c) == WEOF); + return 0; + } + + return 1; +} diff --git a/gnulib-tests/test-btowc1.sh b/gnulib-tests/test-btowc1.sh new file mode 100755 index 0000000..aaef48d --- /dev/null +++ b/gnulib-tests/test-btowc1.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR \ +./test-btowc${EXEEXT} 1 diff --git a/gnulib-tests/test-btowc2.sh b/gnulib-tests/test-btowc2.sh new file mode 100755 index 0000000..2e06038 --- /dev/null +++ b/gnulib-tests/test-btowc2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +./test-btowc${EXEEXT} 2 diff --git a/gnulib-tests/test-c-ctype.c b/gnulib-tests/test-c-ctype.c new file mode 100644 index 0000000..708c8db --- /dev/null +++ b/gnulib-tests/test-c-ctype.c @@ -0,0 +1,388 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of character handling in C locale. + Copyright (C) 2005, 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. */ + +#include <config.h> + +#include "c-ctype.h" + +#include <locale.h> + +#include "macros.h" + +static void +test_all (void) +{ + int c; + + for (c = -0x80; c < 0x100; c++) + { + ASSERT (c_isascii (c) == (c >= 0 && c < 0x80)); + + switch (c) + { + 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 '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 '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + ASSERT (c_isalnum (c) == 1); + break; + default: + ASSERT (c_isalnum (c) == 0); + break; + } + + switch (c) + { + 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 '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': + ASSERT (c_isalpha (c) == 1); + break; + default: + ASSERT (c_isalpha (c) == 0); + break; + } + + switch (c) + { + case '\t': case ' ': + ASSERT (c_isblank (c) == 1); + break; + default: + ASSERT (c_isblank (c) == 0); + break; + } + + ASSERT (c_iscntrl (c) == ((c >= 0 && c < 0x20) || c == 0x7f)); + + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + ASSERT (c_isdigit (c) == 1); + break; + default: + ASSERT (c_isdigit (c) == 0); + break; + } + + switch (c) + { + 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': + ASSERT (c_islower (c) == 1); + break; + default: + ASSERT (c_islower (c) == 0); + break; + } + + ASSERT (c_isgraph (c) == ((c >= 0x20 && c < 0x7f) && c != ' ')); + + ASSERT (c_isprint (c) == (c >= 0x20 && c < 0x7f)); + + ASSERT (c_ispunct (c) == (c_isgraph (c) && !c_isalnum (c))); + + switch (c) + { + case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': + ASSERT (c_isspace (c) == 1); + break; + default: + ASSERT (c_isspace (c) == 0); + break; + } + + switch (c) + { + 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': + ASSERT (c_isupper (c) == 1); + break; + default: + ASSERT (c_isupper (c) == 0); + break; + } + + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + ASSERT (c_isxdigit (c) == 1); + break; + default: + ASSERT (c_isxdigit (c) == 0); + break; + } + + switch (c) + { + case 'A': + ASSERT (c_tolower (c) == 'a'); + ASSERT (c_toupper (c) == c); + break; + case 'B': + ASSERT (c_tolower (c) == 'b'); + ASSERT (c_toupper (c) == c); + break; + case 'C': + ASSERT (c_tolower (c) == 'c'); + ASSERT (c_toupper (c) == c); + break; + case 'D': + ASSERT (c_tolower (c) == 'd'); + ASSERT (c_toupper (c) == c); + break; + case 'E': + ASSERT (c_tolower (c) == 'e'); + ASSERT (c_toupper (c) == c); + break; + case 'F': + ASSERT (c_tolower (c) == 'f'); + ASSERT (c_toupper (c) == c); + break; + case 'G': + ASSERT (c_tolower (c) == 'g'); + ASSERT (c_toupper (c) == c); + break; + case 'H': + ASSERT (c_tolower (c) == 'h'); + ASSERT (c_toupper (c) == c); + break; + case 'I': + ASSERT (c_tolower (c) == 'i'); + ASSERT (c_toupper (c) == c); + break; + case 'J': + ASSERT (c_tolower (c) == 'j'); + ASSERT (c_toupper (c) == c); + break; + case 'K': + ASSERT (c_tolower (c) == 'k'); + ASSERT (c_toupper (c) == c); + break; + case 'L': + ASSERT (c_tolower (c) == 'l'); + ASSERT (c_toupper (c) == c); + break; + case 'M': + ASSERT (c_tolower (c) == 'm'); + ASSERT (c_toupper (c) == c); + break; + case 'N': + ASSERT (c_tolower (c) == 'n'); + ASSERT (c_toupper (c) == c); + break; + case 'O': + ASSERT (c_tolower (c) == 'o'); + ASSERT (c_toupper (c) == c); + break; + case 'P': + ASSERT (c_tolower (c) == 'p'); + ASSERT (c_toupper (c) == c); + break; + case 'Q': + ASSERT (c_tolower (c) == 'q'); + ASSERT (c_toupper (c) == c); + break; + case 'R': + ASSERT (c_tolower (c) == 'r'); + ASSERT (c_toupper (c) == c); + break; + case 'S': + ASSERT (c_tolower (c) == 's'); + ASSERT (c_toupper (c) == c); + break; + case 'T': + ASSERT (c_tolower (c) == 't'); + ASSERT (c_toupper (c) == c); + break; + case 'U': + ASSERT (c_tolower (c) == 'u'); + ASSERT (c_toupper (c) == c); + break; + case 'V': + ASSERT (c_tolower (c) == 'v'); + ASSERT (c_toupper (c) == c); + break; + case 'W': + ASSERT (c_tolower (c) == 'w'); + ASSERT (c_toupper (c) == c); + break; + case 'X': + ASSERT (c_tolower (c) == 'x'); + ASSERT (c_toupper (c) == c); + break; + case 'Y': + ASSERT (c_tolower (c) == 'y'); + ASSERT (c_toupper (c) == c); + break; + case 'Z': + ASSERT (c_tolower (c) == 'z'); + ASSERT (c_toupper (c) == c); + break; + case 'a': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'A'); + break; + case 'b': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'B'); + break; + case 'c': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'C'); + break; + case 'd': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'D'); + break; + case 'e': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'E'); + break; + case 'f': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'F'); + break; + case 'g': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'G'); + break; + case 'h': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'H'); + break; + case 'i': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'I'); + break; + case 'j': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'J'); + break; + case 'k': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'K'); + break; + case 'l': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'L'); + break; + case 'm': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'M'); + break; + case 'n': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'N'); + break; + case 'o': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'O'); + break; + case 'p': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'P'); + break; + case 'q': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'Q'); + break; + case 'r': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'R'); + break; + case 's': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'S'); + break; + case 't': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'T'); + break; + case 'u': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'U'); + break; + case 'v': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'V'); + break; + case 'w': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'W'); + break; + case 'x': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'X'); + break; + case 'y': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'Y'); + break; + case 'z': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'Z'); + break; + default: + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == c); + break; + } + } +} + +int +main () +{ + test_all (); + + setlocale (LC_ALL, "de_DE"); + test_all (); + + setlocale (LC_ALL, "ja_JP.EUC-JP"); + test_all (); + + return 0; +} diff --git a/gnulib-tests/test-c-stack.c b/gnulib-tests/test-c-stack.c new file mode 100644 index 0000000..7040c60 --- /dev/null +++ b/gnulib-tests/test-c-stack.c @@ -0,0 +1,78 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of c-stack module. + Copyright (C) 2002, 2004, 2006, 2008-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "c-stack.h" + +#include "exitfail.h" +#include <stdio.h> +#if HAVE_SETRLIMIT +/* At least FreeBSD 5.0 needs extra headers before <sys/resource.h> + will compile. */ +# include <sys/types.h> +# include <sys/time.h> +# include <sys/resource.h> +#endif + +#include "macros.h" + +char *program_name; + +static volatile int * +recurse_1 (volatile int n, volatile int *p) +{ + if (n >= 0) + *recurse_1 (n + 1, p) += n; + return p; +} + +static int +recurse (volatile int n) +{ + int sum = 0; + return *recurse_1 (n, &sum); +} + +int +main (int argc, char **argv) +{ +#if HAVE_SETRLIMIT && defined RLIMIT_STACK + /* Before starting the endless recursion, try to be friendly to the + user's machine. On some Linux 2.2.x systems, there is no stack + limit for user processes at all. We don't want to kill such + systems. */ + struct rlimit rl; + rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ + setrlimit (RLIMIT_STACK, &rl); +#endif + + program_name = argv[0]; + if (c_stack_action (0) == 0) + { + if (1 < argc) + { + exit_failure = 77; + ++*argv[argc]; /* Intentionally dereference NULL. */ + } + return recurse (0); + } + fputs ("skipping test: ", stderr); + perror ("c_stack_action"); + return 77; +} diff --git a/gnulib-tests/test-c-stack.sh b/gnulib-tests/test-c-stack.sh new file mode 100755 index 0000000..f979065 --- /dev/null +++ b/gnulib-tests/test-c-stack.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +tmpfiles="" +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="t-c-stack.tmp" +./test-c-stack${EXEEXT} 2> t-c-stack.tmp +case $? in + 77) cat t-c-stack.tmp >&2; (exit 77); exit 77 ;; + 1) ;; + *) (exit 1); exit 1 ;; +esac +if grep 'stack overflow' t-c-stack.tmp >/dev/null ; then + : +else + (exit 1); exit 1 +fi + +rm -fr $tmpfiles + +exit 0 diff --git a/gnulib-tests/test-c-stack2.sh b/gnulib-tests/test-c-stack2.sh new file mode 100755 index 0000000..a80373d --- /dev/null +++ b/gnulib-tests/test-c-stack2.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +tmpfiles="" +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="t-c-stack2.tmp" + +# Sanitize exit status within a subshell, since some shells fail to +# redirect stderr on their message about death due to signal. +(./test-c-stack${EXEEXT} 1; exit $?) 2> t-c-stack2.tmp + +case $? in + 77) if grep 'stack overflow' t-c-stack2.tmp >/dev/null ; then + if test -z "$LIBSIGSEGV"; then + echo 'cannot tell stack overflow from crash; consider installing libsigsegv' >&2 + exit 77 + else + echo 'cannot tell stack overflow from crash, in spite of libsigsegv' >&2 + exit 1 + fi + else + cat t-c-stack2.tmp >&2 + exit 77 + fi + ;; + 0) (exit 1); exit 1 ;; +esac +if grep 'program error' t-c-stack2.tmp >/dev/null ; then + : +else + (exit 1); exit 1 +fi + +rm -fr $tmpfiles + +exit 0 diff --git a/gnulib-tests/test-c-strcase.sh b/gnulib-tests/test-c-strcase.sh new file mode 100755 index 0000000..5fcf906 --- /dev/null +++ b/gnulib-tests/test-c-strcase.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Test in the C locale. +./test-c-strcasecmp${EXEEXT} || exit 1 +./test-c-strncasecmp${EXEEXT} || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR ./test-c-strcasecmp${EXEEXT} locale || exit 1 + LC_ALL=$LOCALE_FR ./test-c-strncasecmp${EXEEXT} locale || exit 1 +fi + +# Test in a Turkish UTF-8 locale. +: ${LOCALE_TR_UTF8=tr_TR.UTF-8} +if test $LOCALE_TR_UTF8 != none; then + LC_ALL=$LOCALE_TR_UTF8 ./test-c-strcasecmp${EXEEXT} locale || exit 1 + LC_ALL=$LOCALE_TR_UTF8 ./test-c-strncasecmp${EXEEXT} locale || exit 1 +fi + +exit 0 diff --git a/gnulib-tests/test-c-strcasecmp.c b/gnulib-tests/test-c-strcasecmp.c new file mode 100644 index 0000000..b657548 --- /dev/null +++ b/gnulib-tests/test-c-strcasecmp.c @@ -0,0 +1,67 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of case-insensitive string comparison function. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include "c-strcase.h" + +#include <locale.h> +#include <string.h> + +#include "macros.h" + +int +main (int argc, char *argv[]) +{ + if (argc > 1) + { + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + } + + ASSERT (c_strcasecmp ("paragraph", "Paragraph") == 0); + + ASSERT (c_strcasecmp ("paragrapH", "parAgRaph") == 0); + + ASSERT (c_strcasecmp ("paragraph", "paraLyzed") < 0); + ASSERT (c_strcasecmp ("paraLyzed", "paragraph") > 0); + + ASSERT (c_strcasecmp ("para", "paragraph") < 0); + ASSERT (c_strcasecmp ("paragraph", "para") > 0); + + /* The following tests shows how c_strcasecmp() is different from + strcasecmp(). */ + + ASSERT (c_strcasecmp ("\311mile", "\351mile") < 0); + ASSERT (c_strcasecmp ("\351mile", "\311mile") > 0); + + /* The following tests shows how c_strcasecmp() is different from + mbscasecmp(). */ + + ASSERT (c_strcasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R") > 0); /* özgür */ + ASSERT (c_strcasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r") < 0); /* özgür */ + + /* This test shows how strings of different size cannot compare equal. */ + ASSERT (c_strcasecmp ("turkish", "TURK\304\260SH") < 0); + ASSERT (c_strcasecmp ("TURK\304\260SH", "turkish") > 0); + + return 0; +} diff --git a/gnulib-tests/test-c-strncasecmp.c b/gnulib-tests/test-c-strncasecmp.c new file mode 100644 index 0000000..dc94b0b --- /dev/null +++ b/gnulib-tests/test-c-strncasecmp.c @@ -0,0 +1,81 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of case-insensitive string comparison function. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include "c-strcase.h" + +#include <locale.h> +#include <string.h> + +#include "macros.h" + +int +main (int argc, char *argv[]) +{ + if (argc > 1) + { + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + } + + ASSERT (c_strncasecmp ("paragraph", "Paragraph", 1000000) == 0); + ASSERT (c_strncasecmp ("paragraph", "Paragraph", 9) == 0); + + ASSERT (c_strncasecmp ("paragrapH", "parAgRaph", 1000000) == 0); + ASSERT (c_strncasecmp ("paragrapH", "parAgRaph", 9) == 0); + + ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 10) < 0); + ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 9) < 0); + ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 5) < 0); + ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 4) == 0); + ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 10) > 0); + ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 9) > 0); + ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 5) > 0); + ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 4) == 0); + + ASSERT (c_strncasecmp ("para", "paragraph", 10) < 0); + ASSERT (c_strncasecmp ("para", "paragraph", 9) < 0); + ASSERT (c_strncasecmp ("para", "paragraph", 5) < 0); + ASSERT (c_strncasecmp ("para", "paragraph", 4) == 0); + ASSERT (c_strncasecmp ("paragraph", "para", 10) > 0); + ASSERT (c_strncasecmp ("paragraph", "para", 9) > 0); + ASSERT (c_strncasecmp ("paragraph", "para", 5) > 0); + ASSERT (c_strncasecmp ("paragraph", "para", 4) == 0); + + /* The following tests shows how c_strncasecmp() is different from + strncasecmp(). */ + + ASSERT (c_strncasecmp ("\311mily", "\351mile", 4) < 0); + ASSERT (c_strncasecmp ("\351mile", "\311mily", 4) > 0); + + /* The following tests shows how c_strncasecmp() is different from + mbsncasecmp(). */ + + ASSERT (c_strncasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R", 99) > 0); /* özgür */ + ASSERT (c_strncasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r", 99) < 0); /* özgür */ + + /* This test shows how strings of different size cannot compare equal. */ + ASSERT (c_strncasecmp ("turkish", "TURK\304\260SH", 7) < 0); + ASSERT (c_strncasecmp ("TURK\304\260SH", "turkish", 7) > 0); + + return 0; +} diff --git a/gnulib-tests/test-dirname.c b/gnulib-tests/test-dirname.c new file mode 100644 index 0000000..886bdc5 --- /dev/null +++ b/gnulib-tests/test-dirname.c @@ -0,0 +1,193 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the gnulib dirname module. + Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "dirname.h" + +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +struct test { + const char *name; /* Name under test. */ + const char *dir; /* dir_name (name). */ + const char *last; /* last_component (name). */ + const char *base; /* base_name (name). */ + const char *stripped; /* name after strip_trailing_slashes (name). */ + bool modified; /* result of strip_trailing_slashes (name). */ + bool absolute; /* IS_ABSOLUTE_FILE_NAME (name). */ +}; + +static struct test tests[] = { + {"d/f", "d", "f", "f", "d/f", false, false}, + {"/d/f", "/d", "f", "f", "/d/f", false, true}, + {"d/f/", "d", "f/", "f/", "d/f", true, false}, + {"d/f//", "d", "f//", "f/", "d/f", true, false}, + {"f", ".", "f", "f", "f", false, false}, + {"/", "/", "", "/", "/", false, true}, +#if DOUBLE_SLASH_IS_DISTINCT_ROOT + {"//", "//", "", "//", "//", false, true}, + {"//d", "//", "d", "d", "//d", false, true}, +#else + {"//", "/", "", "/", "/", true, true}, + {"//d", "/", "d", "d", "//d", false, true}, +#endif + {"///", "/", "", "/", "/", true, true}, + {"///a///", "/", "a///", "a/", "///a", true, true}, + /* POSIX requires dirname("") and basename("") to both return ".", + but dir_name and base_name are defined differently. */ + {"", ".", "", "", "", false, false}, + {".", ".", ".", ".", ".", false, false}, + {"..", ".", "..", "..", "..", false, false}, +#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR + {"a\\", ".", "a\\", "a\\", "a", true, false}, + {"a\\b", "a", "b", "b", "a\\b", false, false}, + {"\\", "\\", "", "\\", "\\", false, true}, + {"\\/\\", "\\", "", "\\", "\\", true, true}, + {"\\\\/", "\\", "", "\\", "\\", true, true}, + {"\\//", "\\", "", "\\", "\\", true, true}, + {"//\\", "/", "", "/", "/", true, true}, +#else + {"a\\", ".", "a\\", "a\\", "a\\", false, false}, + {"a\\b", ".", "a\\b", "a\\b", "a\\b", false, false}, + {"\\", ".", "\\", "\\", "\\", false, false}, + {"\\/\\", "\\", "\\", "\\", "\\/\\",false, false}, + {"\\\\/", ".", "\\\\/","\\\\/","\\\\", true, false}, + {"\\//", ".", "\\//", "\\/", "\\", true, false}, +# if DOUBLE_SLASH_IS_DISTINCT_ROOT + {"//\\", "//", "\\", "\\", "//\\", false, true}, +# else + {"//\\", "/", "\\", "\\", "//\\", false, true}, +# endif +#endif +#if FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX +# if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + {"c:", "c:", "", "c:", "c:", false, false}, + {"c:/", "c:/", "", "c:/", "c:/", false, true}, + {"c://", "c:/", "", "c:/", "c:/", true, true}, + {"c:/d", "c:/", "d", "d", "c:/d", false, true}, + {"c://d", "c:/", "d", "d", "c://d",false, true}, + {"c:/d/", "c:/", "d/", "d/", "c:/d", true, true}, + {"c:/d/f", "c:/d", "f", "f", "c:/d/f",false, true}, + {"c:d", "c:.", "d", "d", "c:d", false, false}, + {"c:d/", "c:.", "d/", "d/", "c:d", true, false}, + {"c:d/f", "c:d", "f", "f", "c:d/f",false, false}, + {"a:b:c", "a:.", "b:c", "./b:c","a:b:c",false, false}, + {"a/b:c", "a", "b:c", "./b:c","a/b:c",false, false}, + {"a/b:c/", "a", "b:c/", "./b:c/","a/b:c",true, false}, +# else /* ! FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE */ + {"c:", "c:", "", "c:", "c:", false, true}, + {"c:/", "c:", "", "c:", "c:", true, true}, + {"c://", "c:", "", "c:", "c:", true, true}, + {"c:/d", "c:", "d", "d", "c:/d", false, true}, + {"c://d", "c:", "d", "d", "c://d",false, true}, + {"c:/d/", "c:", "d/", "d/", "c:/d", true, true}, + {"c:/d/f", "c:/d", "f", "f", "c:/d/f",false, true}, + {"c:d", "c:", "d", "d", "c:d", false, true}, + {"c:d/", "c:", "d/", "d/", "c:d", true, true}, + {"c:d/f", "c:d", "f", "f", "c:d/f",false, true}, + {"a:b:c", "a:", "b:c", "./b:c","a:b:c",false, true}, + {"a/b:c", "a", "b:c", "./b:c","a/b:c",false, false}, + {"a/b:c/", "a", "b:c/", "./b:c/","a/b:c",true, false}, +# endif +#else /* ! FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX */ + {"c:", ".", "c:", "c:", "c:", false, false}, + {"c:/", ".", "c:/", "c:/", "c:", true, false}, + {"c://", ".", "c://", "c:/", "c:", true, false}, + {"c:/d", "c:", "d", "d", "c:/d", false, false}, + {"c://d", "c:", "d", "d", "c://d",false, false}, + {"c:/d/", "c:", "d/", "d/", "c:/d", true, false}, + {"c:/d/f", "c:/d", "f", "f", "c:/d/f",false, false}, + {"c:d", ".", "c:d", "c:d", "c:d", false, false}, + {"c:d/", ".", "c:d/", "c:d/", "c:d", true, false}, + {"c:d/f", "c:d", "f", "f", "c:d/f",false, false}, + {"a:b:c", ".", "a:b:c","a:b:c","a:b:c",false, false}, + {"a/b:c", "a", "b:c", "b:c", "a/b:c",false, false}, + {"a/b:c/", "a", "b:c/", "b:c/", "a/b:c",true, false}, +#endif + {"1:", ".", "1:", "1:", "1:", false, false}, + {"1:/", ".", "1:/", "1:/", "1:", true, false}, + {"/:", "/", ":", ":", "/:", false, true}, + {"/:/", "/", ":/", ":/", "/:", true, true}, + /* End sentinel. */ + {NULL, NULL, NULL, NULL, NULL, false, false} +}; + +int +main (void) +{ + struct test *t; + bool ok = true; + + for (t = tests; t->name; t++) + { + char *dir = dir_name (t->name); + int dirlen = dir_len (t->name); + char *last = last_component (t->name); + char *base = base_name (t->name); + int baselen = base_len (base); + char *stripped = strdup (t->name); + bool modified = strip_trailing_slashes (stripped); + bool absolute = IS_ABSOLUTE_FILE_NAME (t->name); + if (! (strcmp (dir, t->dir) == 0 + && (dirlen == strlen (dir) + || (dirlen + 1 == strlen (dir) && dir[dirlen] == '.')))) + { + ok = false; + printf ("dir_name `%s': got `%s' len %d, expected `%s' len %ld\n", + t->name, dir, dirlen, + t->dir, (unsigned long) strlen (t->dir)); + } + if (strcmp (last, t->last)) + { + ok = false; + printf ("last_component `%s': got `%s', expected `%s'\n", + t->name, last, t->last); + } + if (! (strcmp (base, t->base) == 0 + && (baselen == strlen (base) + || (baselen + 1 == strlen (base) + && ISSLASH (base[baselen]))))) + { + ok = false; + printf ("base_name `%s': got `%s' len %d, expected `%s' len %ld\n", + t->name, base, baselen, + t->base, (unsigned long) strlen (t->base)); + } + if (strcmp (stripped, t->stripped) || modified != t->modified) + { + ok = false; + printf ("strip_trailing_slashes `%s': got %s %s, expected %s %s\n", + t->name, stripped, modified ? "changed" : "unchanged", + t->stripped, t->modified ? "changed" : "unchanged"); + } + if (t->absolute != absolute) + { + ok = false; + printf ("`%s': got %s, expected %s\n", t->name, + absolute ? "absolute" : "relative", + t->absolute ? "absolute" : "relative"); + } + free (dir); + free (base); + free (stripped); + } + return ok ? 0 : 1; +} diff --git a/gnulib-tests/test-dup2.c b/gnulib-tests/test-dup2.c new file mode 100644 index 0000000..8d6fcd6 --- /dev/null +++ b/gnulib-tests/test-dup2.c @@ -0,0 +1,195 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test duplicating file descriptors. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +#include <config.h> + +#include <unistd.h> + +#include "signature.h" +SIGNATURE_CHECK (dup2, int, (int, int)); + +#include <errno.h> +#include <fcntl.h> + +#include "binary-io.h" + +#if GNULIB_TEST_CLOEXEC +# include "cloexec.h" +#endif + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* Get declarations of the Win32 API functions. */ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +#endif + +#include "macros.h" + +/* Return non-zero if FD is open. */ +static int +is_open (int fd) +{ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* On Win32, the initial state of unassigned standard file + descriptors is that they are open but point to an + INVALID_HANDLE_VALUE, and there is no fcntl. */ + 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 +} + +#if GNULIB_TEST_CLOEXEC +/* Return non-zero if FD is open and inheritable across exec/spawn. */ +static int +is_inheritable (int fd) +{ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* On Win32, the initial state of unassigned standard file + descriptors is that they are open but point to an + INVALID_HANDLE_VALUE, and there is no fcntl. */ + HANDLE h = (HANDLE) _get_osfhandle (fd); + DWORD flags; + if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) + return 0; + return (flags & HANDLE_FLAG_INHERIT) != 0; +# else +# ifndef F_GETFD +# error Please port fcntl to your platform +# endif + int i = fcntl (fd, F_GETFD); + return 0 <= i && (i & FD_CLOEXEC) == 0; +# endif +} +#endif /* GNULIB_TEST_CLOEXEC */ + +#if !O_BINARY +# define setmode(f,m) zero () +static int zero (void) { return 0; } +#endif + +/* Return non-zero if FD is open in the given MODE, which is either + O_TEXT or O_BINARY. */ +static int +is_mode (int fd, int mode) +{ + int value = setmode (fd, O_BINARY); + setmode (fd, value); + return mode == value; +} + +int +main (void) +{ + const char *file = "test-dup2.tmp"; + char buffer[1]; + int fd = open (file, O_CREAT | O_TRUNC | O_RDWR, 0600); + + /* Assume std descriptors were provided by invoker. */ + ASSERT (STDERR_FILENO < fd); + ASSERT (is_open (fd)); + /* Ignore any other fd's leaked into this process. */ + close (fd + 1); + close (fd + 2); + ASSERT (!is_open (fd + 1)); + ASSERT (!is_open (fd + 2)); + + /* Assigning to self must be a no-op. */ + ASSERT (dup2 (fd, fd) == fd); + ASSERT (is_open (fd)); + + /* The source must be valid. */ + errno = 0; + ASSERT (dup2 (-1, fd) == -1); + ASSERT (errno == EBADF); + errno = 0; + ASSERT (dup2 (AT_FDCWD, fd) == -1); + ASSERT (errno == EBADF); + ASSERT (is_open (fd)); + + /* If the source is not open, then the destination is unaffected. */ + errno = 0; + ASSERT (dup2 (fd + 1, fd + 1) == -1); + ASSERT (errno == EBADF); + ASSERT (!is_open (fd + 1)); + errno = 0; + ASSERT (dup2 (fd + 1, fd) == -1); + ASSERT (errno == EBADF); + ASSERT (is_open (fd)); + + /* The destination must be valid. */ + errno = 0; + ASSERT (dup2 (fd, -2) == -1); + ASSERT (errno == EBADF); + errno = 0; + ASSERT (dup2 (fd, 10000000) == -1); + ASSERT (errno == EBADF); + + /* Using dup2 can skip fds. */ + ASSERT (dup2 (fd, fd + 2) == fd + 2); + ASSERT (is_open (fd)); + ASSERT (!is_open (fd + 1)); + ASSERT (is_open (fd + 2)); + + /* Verify that dup2 closes the previous occupant of a fd. */ + ASSERT (open ("/dev/null", O_WRONLY, 0600) == fd + 1); + ASSERT (dup2 (fd + 1, fd) == fd); + ASSERT (close (fd + 1) == 0); + ASSERT (write (fd, "1", 1) == 1); + ASSERT (dup2 (fd + 2, fd) == fd); + ASSERT (lseek (fd, 0, SEEK_END) == 0); + ASSERT (write (fd + 2, "2", 1) == 1); + ASSERT (lseek (fd, 0, SEEK_SET) == 0); + ASSERT (read (fd, buffer, 1) == 1); + ASSERT (*buffer == '2'); + +#if GNULIB_TEST_CLOEXEC + /* Any new fd created by dup2 must not be cloexec. */ + ASSERT (close (fd + 2) == 0); + ASSERT (dup_cloexec (fd) == fd + 1); + ASSERT (!is_inheritable (fd + 1)); + ASSERT (dup2 (fd + 1, fd + 1) == fd + 1); + ASSERT (!is_inheritable (fd + 1)); + ASSERT (dup2 (fd + 1, fd + 2) == fd + 2); + ASSERT (is_inheritable (fd + 2)); +#endif + + /* On systems that distinguish between text and binary mode, dup2 + reuses the mode of the source. */ + setmode (fd, O_BINARY); + ASSERT (is_mode (fd, O_BINARY)); + ASSERT (dup2 (fd, fd + 1) == fd + 1); + ASSERT (is_mode (fd + 1, O_BINARY)); + setmode (fd, O_TEXT); + ASSERT (is_mode (fd, O_TEXT)); + ASSERT (dup2 (fd, fd + 1) == fd + 1); + ASSERT (is_mode (fd + 1, O_TEXT)); + + /* Clean up. */ + ASSERT (close (fd + 2) == 0); + ASSERT (close (fd + 1) == 0); + ASSERT (close (fd) == 0); + ASSERT (unlink (file) == 0); + + return 0; +} diff --git a/gnulib-tests/test-environ.c b/gnulib-tests/test-environ.c new file mode 100644 index 0000000..e6adc15 --- /dev/null +++ b/gnulib-tests/test-environ.c @@ -0,0 +1,46 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of environ variable. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include <config.h> + +#include <unistd.h> + +#include <string.h> + +int +main () +{ + /* The environment variables that are set even in the weirdest situations + are HOME and PATH. + POSIX says that HOME is initialized by the system, and that PATH may be + unset. But in practice it's more frequent to see HOME unset and PATH + set. So we test the presence of PATH. */ + char **remaining_variables = environ; + char *string; + + for (; (string = *remaining_variables) != NULL; remaining_variables++) + { + if (strncmp (string, "PATH=", 5) == 0) + /* Found the PATH environment variable. */ + return 0; + } + /* Failed to find the PATH environment variable. */ + return 1; +} diff --git a/gnulib-tests/test-errno.c b/gnulib-tests/test-errno.c new file mode 100644 index 0000000..4e3d903 --- /dev/null +++ b/gnulib-tests/test-errno.c @@ -0,0 +1,119 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <errno.h> substitute. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include <config.h> + +#include <errno.h> + +/* Verify that the POSIX mandated errno values exist and can be used as + initializers outside of a function. + The variable names happen to match the Linux/x86 error numbers. */ +int e1 = EPERM; +int e2 = ENOENT; +int e3 = ESRCH; +int e4 = EINTR; +int e5 = EIO; +int e6 = ENXIO; +int e7 = E2BIG; +int e8 = ENOEXEC; +int e9 = EBADF; +int e10 = ECHILD; +int e11 = EAGAIN; +int e11a = EWOULDBLOCK; +int e12 = ENOMEM; +int e13 = EACCES; +int e14 = EFAULT; +int e16 = EBUSY; +int e17 = EEXIST; +int e18 = EXDEV; +int e19 = ENODEV; +int e20 = ENOTDIR; +int e21 = EISDIR; +int e22 = EINVAL; +int e23 = ENFILE; +int e24 = EMFILE; +int e25 = ENOTTY; +int e26 = ETXTBSY; +int e27 = EFBIG; +int e28 = ENOSPC; +int e29 = ESPIPE; +int e30 = EROFS; +int e31 = EMLINK; +int e32 = EPIPE; +int e33 = EDOM; +int e34 = ERANGE; +int e35 = EDEADLK; +int e36 = ENAMETOOLONG; +int e37 = ENOLCK; +int e38 = ENOSYS; +int e39 = ENOTEMPTY; +int e40 = ELOOP; +int e42 = ENOMSG; +int e43 = EIDRM; +int e67 = ENOLINK; +int e71 = EPROTO; +int e72 = EMULTIHOP; +int e74 = EBADMSG; +int e75 = EOVERFLOW; +int e84 = EILSEQ; +int e88 = ENOTSOCK; +int e89 = EDESTADDRREQ; +int e90 = EMSGSIZE; +int e91 = EPROTOTYPE; +int e92 = ENOPROTOOPT; +int e93 = EPROTONOSUPPORT; +int e95 = EOPNOTSUPP; +int e95a = ENOTSUP; +int e97 = EAFNOSUPPORT; +int e98 = EADDRINUSE; +int e99 = EADDRNOTAVAIL; +int e100 = ENETDOWN; +int e101 = ENETUNREACH; +int e102 = ENETRESET; +int e103 = ECONNABORTED; +int e104 = ECONNRESET; +int e105 = ENOBUFS; +int e106 = EISCONN; +int e107 = ENOTCONN; +int e110 = ETIMEDOUT; +int e111 = ECONNREFUSED; +int e113 = EHOSTUNREACH; +int e114 = EALREADY; +int e115 = EINPROGRESS; +int e116 = ESTALE; +int e122 = EDQUOT; +int e125 = ECANCELED; + +/* Don't verify that these errno values are all different, except for possibly + EWOULDBLOCK == EAGAIN. Even Linux/x86 does not pass this check: it has + ENOTSUP == EOPNOTSUPP. */ + +int +main () +{ + /* Verify that errno can be assigned. */ + errno = EOVERFLOW; + + /* snprintf() callers want to distinguish EINVAL and EOVERFLOW. */ + if (errno == EINVAL) + return 1; + + return 0; +} diff --git a/gnulib-tests/test-exclude.c b/gnulib-tests/test-exclude.c new file mode 100644 index 0000000..23ff126 --- /dev/null +++ b/gnulib-tests/test-exclude.c @@ -0,0 +1,119 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test suite for exclude. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <string.h> +#include <stdbool.h> +#include <fnmatch.h> + +#include "exclude.h" +#include "progname.h" +#include "error.h" +#include "argmatch.h" + +#ifndef FNM_CASEFOLD +# define FNM_CASEFOLD 0 +#endif +#ifndef FNM_LEADING_DIR +# define FNM_LEADING_DIR 0 +#endif + +char const * const exclude_keywords[] = { + "noescape", + "pathname", + "period", + "leading_dir", + "casefold", + "anchored", + "include", + "wildcards", + NULL +}; + +int exclude_flags[] = { + FNM_NOESCAPE, + FNM_PATHNAME, + FNM_PERIOD, + FNM_LEADING_DIR, + FNM_CASEFOLD, + EXCLUDE_ANCHORED, + EXCLUDE_INCLUDE, + EXCLUDE_WILDCARDS +}; + +ARGMATCH_VERIFY (exclude_keywords, exclude_flags); + +/* Some packages define ARGMATCH_DIE and ARGMATCH_DIE_DECL in <config.h>, and + thus must link with a definition of that function. Provide it here. */ +#ifdef ARGMATCH_DIE_DECL +ARGMATCH_DIE_DECL { exit (1); } +#endif + +int +main (int argc, char **argv) +{ + int exclude_options = 0; + struct exclude *exclude = new_exclude (); + + set_program_name (argv[0]); + + if (argc == 1) + error (1, 0, "usage: %s file -- words...", argv[0]); + + while (--argc) + { + char *opt = *++argv; + if (opt[0] == '-') + { + int neg = 0; + int flag; + char *s = opt + 1; + + if (opt[1] == '-' && opt[2] == 0) + { + argc--; + break; + } + if (strlen (s) > 3 && memcmp (s, "no-", 3) == 0) + { + neg = 1; + s += 3; + } + flag = XARGMATCH (opt, s, exclude_keywords, exclude_flags); + if (neg) + exclude_options &= ~flag; + else + exclude_options |= flag; + } + else if (add_exclude_file (add_exclude, exclude, opt, + exclude_options, '\n') != 0) + error (1, errno, "error loading %s", opt); + } + + for (; argc; --argc) + { + char *word = *++argv; + + printf ("%s: %d\n", word, excluded_file_name (exclude, word)); + } + return 0; +} diff --git a/gnulib-tests/test-exclude1.sh b/gnulib-tests/test-exclude1.sh new file mode 100755 index 0000000..2fe72b9 --- /dev/null +++ b/gnulib-tests/test-exclude1.sh @@ -0,0 +1,45 @@ +#! /bin/sh +# Test suite for exclude. +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. + +TMP=excltmp.$$ +LIST=flist.$$ +ERR=0 + +# Test literal matches + +cat > $LIST <<EOT +foo* +bar +Baz +EOT + +cat > $TMP <<EOT +foo: 0 +foo*: 1 +bar: 1 +foobar: 0 +baz: 0 +bar/qux: 0 +EOT + +./test-exclude$EXEEXT $LIST -- foo 'foo*' bar foobar baz bar/qux | + tr -d '\015' | + diff -c $TMP - || ERR=1 + +rm -f $TMP $LIST +exit $ERR diff --git a/gnulib-tests/test-exclude2.sh b/gnulib-tests/test-exclude2.sh new file mode 100755 index 0000000..641a1cf --- /dev/null +++ b/gnulib-tests/test-exclude2.sh @@ -0,0 +1,45 @@ +#! /bin/sh +# Test suite for exclude. +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. + +TMP=excltmp.$$ +LIST=flist.$$ +ERR=0 + +cat > $LIST <<EOT +foo* +bar +Baz +EOT + +# Test case-insensitive literal matches + +cat > $TMP <<EOT +foo: 0 +foo*: 1 +bar: 1 +foobar: 0 +baz: 1 +bar/qux: 0 +EOT + +./test-exclude$EXEEXT -casefold $LIST -- foo 'foo*' bar foobar baz bar/qux | + tr -d '\015' | + diff -c $TMP - || ERR=1 + +rm -f $TMP $LIST +exit $ERR diff --git a/gnulib-tests/test-exclude3.sh b/gnulib-tests/test-exclude3.sh new file mode 100755 index 0000000..216ac52 --- /dev/null +++ b/gnulib-tests/test-exclude3.sh @@ -0,0 +1,45 @@ +#! /bin/sh +# Test suite for exclude. +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. + +TMP=excltmp.$$ +LIST=flist.$$ +ERR=0 + +# Test include + +cat > $LIST <<EOT +foo* +bar +Baz +EOT + +cat > $TMP <<EOT +foo: 1 +foo*: 0 +bar: 0 +foobar: 1 +baz: 1 +bar/qux: 1 +EOT + +./test-exclude$EXEEXT -include $LIST -- foo 'foo*' bar foobar baz bar/qux | + tr -d '\015' | + diff -c $TMP - || ERR=1 + +rm -f $TMP $LIST +exit $ERR diff --git a/gnulib-tests/test-exclude4.sh b/gnulib-tests/test-exclude4.sh new file mode 100755 index 0000000..e057614 --- /dev/null +++ b/gnulib-tests/test-exclude4.sh @@ -0,0 +1,40 @@ +#! /bin/sh +# Test suite for exclude. +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. + +TMP=excltmp.$$ +LIST=flist.$$ +ERR=0 + +# Test wildcard matching + +cat > $LIST <<EOT +foo* +bar +Baz +EOT + +cat > $TMP <<EOT +foobar: 1 +EOT + +./test-exclude$EXEEXT -wildcards $LIST -- foobar | + tr -d '\015' | + diff -c $TMP - || ERR=1 + +rm -f $TMP $LIST +exit $ERR diff --git a/gnulib-tests/test-exclude5.sh b/gnulib-tests/test-exclude5.sh new file mode 100755 index 0000000..b4698f9 --- /dev/null +++ b/gnulib-tests/test-exclude5.sh @@ -0,0 +1,43 @@ +#! /bin/sh +# Test suite for exclude. +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. + +TMP=excltmp.$$ +LIST=flist.$$ +ERR=0 + +# Test FNM_LEADING_DIR + +cat > $LIST <<EOT +foo* +bar +Baz +EOT + +cat > $TMP <<EOT +bar: 1 +bar/qux: 1 +barz: 0 +foo/bar: 1 +EOT + +./test-exclude$EXEEXT -leading_dir $LIST -- bar bar/qux barz foo/bar | + tr -d '\015' | + diff -c $TMP - || ERR=1 + +rm -f $TMP $LIST +exit $ERR diff --git a/gnulib-tests/test-exclude6.sh b/gnulib-tests/test-exclude6.sh new file mode 100755 index 0000000..a20f83c --- /dev/null +++ b/gnulib-tests/test-exclude6.sh @@ -0,0 +1,41 @@ +#! /bin/sh +# Test suite for exclude. +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. + +TMP=excltmp.$$ +LIST=flist.$$ +ERR=0 + +# Test anchored + +cat > $LIST <<EOT +foo* +bar +Baz +EOT + +cat > $TMP <<EOT +bar: 1 +foo/bar: 0 +EOT + +./test-exclude$EXEEXT -anchored $LIST -- bar foo/bar | + tr -d '\015' | + diff -c $TMP - || ERR=1 + +rm -f $TMP $LIST +exit $ERR diff --git a/gnulib-tests/test-exclude7.sh b/gnulib-tests/test-exclude7.sh new file mode 100755 index 0000000..b6076da --- /dev/null +++ b/gnulib-tests/test-exclude7.sh @@ -0,0 +1,44 @@ +#! /bin/sh +# Test suite for exclude. +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. + +TMP=excltmp.$$ +LIST=flist.$$ +ERR=0 + +# Test exclude precedence + +cat > $LIST <<EOT +foo* +bar +Baz +EOT + +cat > $TMP <<EOT +bar: 1 +bar: 0 +EOT + +./test-exclude$EXEEXT $LIST -include $LIST -- bar | + tr -d '\015' >$TMP.1 +./test-exclude$EXEEXT -include $LIST -no-include $LIST -- bar | + tr -d '\015' >>$TMP.1 + +diff -c $TMP $TMP.1 || ERR=1 + +rm -f $TMP $TMP.1 $LIST +exit $ERR diff --git a/gnulib-tests/test-fcntl-h.c b/gnulib-tests/test-fcntl-h.c new file mode 100644 index 0000000..a5e76ce --- /dev/null +++ b/gnulib-tests/test-fcntl-h.c @@ -0,0 +1,40 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <fcntl.h> substitute. + Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <fcntl.h> + +/* Check that the various O_* macros are defined. */ +int o = O_DIRECT | O_DIRECTORY | O_DSYNC | O_NDELAY | O_NOATIME | O_NONBLOCK + | O_NOCTTY | O_NOFOLLOW | O_NOLINKS | O_RSYNC | O_SYNC | O_TTY_INIT + | O_BINARY | O_TEXT; + +/* Check that the various SEEK_* macros are defined. */ +int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; + +/* Check that the FD_* macros are defined. */ +int fd = FD_CLOEXEC; + +int +main (void) +{ + return 0; +} diff --git a/gnulib-tests/test-fcntl.c b/gnulib-tests/test-fcntl.c new file mode 100644 index 0000000..fd28b05 --- /dev/null +++ b/gnulib-tests/test-fcntl.c @@ -0,0 +1,348 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of fcntl(2). + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +#include <config.h> + +/* Specification. */ +#include <fcntl.h> + +#include "signature.h" +SIGNATURE_CHECK (fcntl, int, (int, int, ...)); + +/* Helpers. */ +#include <errno.h> +#include <stdarg.h> +#include <stdbool.h> +#include <unistd.h> + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* Get declarations of the Win32 API functions. */ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +#endif + +#include "binary-io.h" +#include "macros.h" + +/* Use O_CLOEXEC if available, but test works without it. */ +#ifndef O_CLOEXEC +# define O_CLOEXEC 0 +#endif + +#if !O_BINARY +# define setmode(f,m) zero () +static int zero (void) { return 0; } +#endif + +/* Return true if FD is open. */ +static bool +is_open (int fd) +{ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* On Win32, the initial state of unassigned standard file + descriptors is that they are open but point to an + INVALID_HANDLE_VALUE, and there is no fcntl. */ + 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 +} + +/* Return true if FD is open and inheritable across exec/spawn. */ +static bool +is_inheritable (int fd) +{ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* On Win32, the initial state of unassigned standard file + descriptors is that they are open but point to an + INVALID_HANDLE_VALUE, and there is no fcntl. */ + HANDLE h = (HANDLE) _get_osfhandle (fd); + DWORD flags; + if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) + return false; + return (flags & HANDLE_FLAG_INHERIT) != 0; +#else +# ifndef F_GETFD +# error Please port fcntl to your platform +# endif + int i = fcntl (fd, F_GETFD); + return 0 <= i && (i & FD_CLOEXEC) == 0; +#endif +} + +/* Return non-zero if FD is open in the given MODE, which is either + O_TEXT or O_BINARY. */ +static bool +is_mode (int fd, int mode) +{ + int value = setmode (fd, O_BINARY); + setmode (fd, value); + return mode == value; +} + +/* Since native fcntl can have more supported operations than our + replacement is aware of, and since various operations assign + different types to the vararg argument, a wrapper around fcntl must + be able to pass a vararg of unknown type on through to the original + fcntl. Make sure that this works properly: func1 behaves like the + original fcntl interpreting the vararg as an int or a pointer to a + struct, and func2 behaves like rpl_fcntl that doesn't know what + type to forward. */ +struct dummy_struct +{ + long filler; + int value; +}; +static int +func1 (int a, ...) +{ + va_list arg; + int i; + va_start (arg, a); + if (a < 4) + i = va_arg (arg, int); + else + { + struct dummy_struct *s = va_arg (arg, struct dummy_struct *); + i = s->value; + } + va_end (arg); + return i; +} +static int +func2 (int a, ...) +{ + va_list arg; + void *p; + va_start (arg, a); + p = va_arg (arg, void *); + va_end (arg); + return func1 (a, p); +} + +/* Ensure that all supported fcntl actions are distinct, and + usable in preprocessor expressions. */ +static void +check_flags (void) +{ + switch (0) + { + case F_DUPFD: +#if F_DUPFD +#endif + + case F_DUPFD_CLOEXEC: +#if F_DUPFD_CLOEXEC +#endif + + case F_GETFD: +#if F_GETFD +#endif + +#ifdef F_SETFD + case F_SETFD: +# if F_SETFD +# endif +#endif + +#ifdef F_GETFL + case F_GETFL: +# if F_GETFL +# endif +#endif + +#ifdef F_SETFL + case F_SETFL: +# if F_SETFL +# endif +#endif + +#ifdef F_GETOWN + case F_GETOWN: +# if F_GETOWN +# endif +#endif + +#ifdef F_SETOWN + case F_SETOWN: +# if F_SETOWN +# endif +#endif + +#ifdef F_GETLK + case F_GETLK: +# if F_GETLK +# endif +#endif + +#ifdef F_SETLK + case F_SETLK: +# if F_SETLK +# endif +#endif + +#ifdef F_SETLKW + case F_SETLKW: +# if F_SETLKW +# endif +#endif + + ; + } +} + +int +main (void) +{ + const char *file = "test-fcntl.tmp"; + int fd; + + /* Sanity check that rpl_fcntl is likely to work. */ + ASSERT (func2 (1, 2) == 2); + ASSERT (func2 (2, -2) == -2); + ASSERT (func2 (3, 0x80000000) == 0x80000000); + { + struct dummy_struct s = { 0L, 4 }; + ASSERT (func2 (4, &s) == 4); + } + check_flags (); + + /* Assume std descriptors were provided by invoker, and ignore fds + that might have been inherited. */ + fd = creat (file, 0600); + ASSERT (STDERR_FILENO < fd); + close (fd + 1); + close (fd + 2); + + /* For F_DUPFD*, the source must be valid. */ + errno = 0; + ASSERT (fcntl (-1, F_DUPFD, 0) == -1); + ASSERT (errno == EBADF); + errno = 0; + ASSERT (fcntl (fd + 1, F_DUPFD, 0) == -1); + ASSERT (errno == EBADF); + errno = 0; + ASSERT (fcntl (10000000, F_DUPFD, 0) == -1); + ASSERT (errno == EBADF); + errno = 0; + ASSERT (fcntl (-1, F_DUPFD_CLOEXEC, 0) == -1); + ASSERT (errno == EBADF); + errno = 0; + ASSERT (fcntl (fd + 1, F_DUPFD_CLOEXEC, 0) == -1); + ASSERT (errno == EBADF); + errno = 0; + ASSERT (fcntl (10000000, F_DUPFD_CLOEXEC, 0) == -1); + ASSERT (errno == EBADF); + + /* For F_DUPFD*, the destination must be valid. */ + ASSERT (getdtablesize () < 10000000); + errno = 0; + ASSERT (fcntl (fd, F_DUPFD, -1) == -1); + ASSERT (errno == EINVAL); + errno = 0; + ASSERT (fcntl (fd, F_DUPFD, 10000000) == -1); + ASSERT (errno == EINVAL); + ASSERT (getdtablesize () < 10000000); + errno = 0; + ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, -1) == -1); + ASSERT (errno == EINVAL); + errno = 0; + ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, 10000000) == -1); + ASSERT (errno == EINVAL); + + /* For F_DUPFD*, check for correct inheritance, as well as + preservation of text vs. binary. */ + setmode (fd, O_BINARY); + ASSERT (is_open (fd)); + ASSERT (!is_open (fd + 1)); + ASSERT (!is_open (fd + 2)); + ASSERT (is_inheritable (fd)); + ASSERT (is_mode (fd, O_BINARY)); + + ASSERT (fcntl (fd, F_DUPFD, fd) == fd + 1); + ASSERT (is_open (fd)); + ASSERT (is_open (fd + 1)); + ASSERT (!is_open (fd + 2)); + ASSERT (is_inheritable (fd + 1)); + ASSERT (is_mode (fd, O_BINARY)); + ASSERT (is_mode (fd + 1, O_BINARY)); + ASSERT (close (fd + 1) == 0); + + ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, fd + 2) == fd + 2); + ASSERT (is_open (fd)); + ASSERT (!is_open (fd + 1)); + ASSERT (is_open (fd + 2)); + ASSERT (is_inheritable (fd)); + ASSERT (!is_inheritable (fd + 2)); + ASSERT (is_mode (fd, O_BINARY)); + ASSERT (is_mode (fd + 2, O_BINARY)); + ASSERT (close (fd) == 0); + + setmode (fd + 2, O_TEXT); + ASSERT (fcntl (fd + 2, F_DUPFD, fd + 1) == fd + 1); + ASSERT (!is_open (fd)); + ASSERT (is_open (fd + 1)); + ASSERT (is_open (fd + 2)); + ASSERT (is_inheritable (fd + 1)); + ASSERT (!is_inheritable (fd + 2)); + ASSERT (is_mode (fd + 1, O_TEXT)); + ASSERT (is_mode (fd + 2, O_TEXT)); + ASSERT (close (fd + 1) == 0); + + ASSERT (fcntl (fd + 2, F_DUPFD_CLOEXEC, 0) == fd); + ASSERT (is_open (fd)); + ASSERT (!is_open (fd + 1)); + ASSERT (is_open (fd + 2)); + ASSERT (!is_inheritable (fd)); + ASSERT (!is_inheritable (fd + 2)); + ASSERT (is_mode (fd, O_TEXT)); + ASSERT (is_mode (fd + 2, O_TEXT)); + ASSERT (close (fd + 2) == 0); + + /* Test F_GETFD. */ + errno = 0; + ASSERT (fcntl (-1, F_GETFD) == -1); + ASSERT (errno == EBADF); + errno = 0; + ASSERT (fcntl (fd + 1, F_GETFD) == -1); + ASSERT (errno == EBADF); + errno = 0; + ASSERT (fcntl (10000000, F_GETFD) == -1); + ASSERT (errno == EBADF); + { + int result = fcntl (fd, F_GETFD); + ASSERT (0 <= result); + ASSERT ((result & FD_CLOEXEC) == FD_CLOEXEC); + ASSERT (dup (fd) == fd + 1); + result = fcntl (fd + 1, F_GETFD); + ASSERT (0 <= result); + ASSERT ((result & FD_CLOEXEC) == 0); + ASSERT (close (fd + 1) == 0); + } + + /* Cleanup. */ + ASSERT (close (fd) == 0); + ASSERT (unlink (file) == 0); + + return 0; +} diff --git a/gnulib-tests/test-fnmatch.c b/gnulib-tests/test-fnmatch.c new file mode 100644 index 0000000..4d5596a --- /dev/null +++ b/gnulib-tests/test-fnmatch.c @@ -0,0 +1,52 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of fnmatch string matching function. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Simon Josefsson <simon@josefsson.org>, 2009. */ + +#include <config.h> + +#include <fnmatch.h> + +#include "signature.h" +SIGNATURE_CHECK (fnmatch, int, (char const *, char const *, int)); + +#include "macros.h" + +int +main () +{ + int res; + + ASSERT (res = fnmatch ("", "", 0) == 0); + + ASSERT (res = fnmatch ("*", "", 0) == 0); + ASSERT (res = fnmatch ("*", "foo", 0) == 0); + ASSERT (res = fnmatch ("*", "bar", 0) == 0); + ASSERT (res = fnmatch ("*", "*", 0) == 0); + ASSERT (res = fnmatch ("**", "f", 0) == 0); + ASSERT (res = fnmatch ("**", "foo.txt", 0) == 0); + ASSERT (res = fnmatch ("*.*", "foo.txt", 0) == 0); + + ASSERT (res = fnmatch ("foo*.txt", "foobar.txt", 0) == 0); + + ASSERT (res = fnmatch ("foo.txt", "foo.txt", 0) == 0); + ASSERT (res = fnmatch ("foo\\.txt", "foo.txt", 0) == 0); + ASSERT (res = fnmatch ("foo\\.txt", "foo.txt", FNM_NOESCAPE) == FNM_NOMATCH); + + return 0; +} diff --git a/gnulib-tests/test-freopen-safer.c b/gnulib-tests/test-freopen-safer.c new file mode 100644 index 0000000..5d42cc4 --- /dev/null +++ b/gnulib-tests/test-freopen-safer.c @@ -0,0 +1,99 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of reopening a stream. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +#include <config.h> + +/* Specification. */ +#include "stdio--.h" + +/* Helpers. */ +#include <unistd.h> + +/* This test intentionally closes stderr. So, we arrange to have fd 10 + (outside the range of interesting fd's during the test) set up to + duplicate the original stderr. */ + +#define BACKUP_STDERR_FILENO 10 +#define ASSERT_STREAM myerr +#include "macros.h" + +static FILE *myerr; + +int +main (void) +{ + FILE *fp; + + /* We close fd 2 later, so save it in fd 10. */ + if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO + || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) + return 2; + + { + FILE *tmp; + ASSERT (tmp = fopen ("/dev/null", "r")); + ASSERT (STDERR_FILENO < fileno (tmp)); + ASSERT (fp = fopen ("/dev/null", "w")); + ASSERT (fileno (tmp) < fileno (fp)); + ASSERT (fclose (tmp) == 0); + } + + /* Gap in fds. */ + ASSERT (freopen ("/dev/null", "r+", fp) == fp); + ASSERT (STDERR_FILENO < fileno (fp)); + + ASSERT (freopen ("/dev/null", "r", stdin) == stdin); + ASSERT (STDIN_FILENO == fileno (stdin)); + + ASSERT (freopen ("/dev/null", "w", stdout) == stdout); + ASSERT (STDOUT_FILENO == fileno (stdout)); + + ASSERT (freopen ("/dev/null", "w", stderr) == stderr); + ASSERT (STDERR_FILENO == fileno (stderr)); + + /* fd 0 closed. */ + ASSERT (close (STDIN_FILENO) == 0); + + ASSERT (freopen ("/dev/null", "w", stdout) == stdout); + ASSERT (STDOUT_FILENO == fileno (stdout)); + + ASSERT (freopen ("/dev/null", "w", stderr) == stderr); + ASSERT (STDERR_FILENO == fileno (stderr)); + + ASSERT (freopen ("/dev/null", "a", fp) == fp); + ASSERT (STDERR_FILENO < fileno (fp)); + + /* fd 1 closed. */ + ASSERT (close (STDOUT_FILENO) == 0); + + ASSERT (freopen ("/dev/null", "w", stderr) == stderr); + ASSERT (STDERR_FILENO == fileno (stderr)); + + ASSERT (freopen ("/dev/null", "a+", fp) == fp); + ASSERT (STDERR_FILENO < fileno (fp)); + + /* fd 2 closed. */ + ASSERT (close (STDERR_FILENO) == 0); + + ASSERT (freopen ("/dev/null", "w+", fp) == fp); + ASSERT (STDERR_FILENO < fileno (fp)); + + return 0; +} diff --git a/gnulib-tests/test-freopen.c b/gnulib-tests/test-freopen.c new file mode 100644 index 0000000..e92f47c --- /dev/null +++ b/gnulib-tests/test-freopen.c @@ -0,0 +1,36 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of opening a file stream. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <stdio.h> + +#include "signature.h" +SIGNATURE_CHECK (freopen, FILE *, (char const *, char const *, FILE *)); + +#include "macros.h" + +int +main () +{ + ASSERT (freopen ("/dev/null", "r", stdin) != NULL); + + return 0; +} diff --git a/gnulib-tests/test-getdtablesize.c b/gnulib-tests/test-getdtablesize.c new file mode 100644 index 0000000..31e243a --- /dev/null +++ b/gnulib-tests/test-getdtablesize.c @@ -0,0 +1,36 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of getdtablesize() function. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include <config.h> + +#include <unistd.h> + +#include "signature.h" +SIGNATURE_CHECK (getdtablesize, int, (void)); + +#include "macros.h" + +int +main (int argc, char *argv[]) +{ + ASSERT (getdtablesize () >= 3); + + return 0; +} diff --git a/gnulib-tests/test-getopt.c b/gnulib-tests/test-getopt.c new file mode 100644 index 0000000..ba37cea --- /dev/null +++ b/gnulib-tests/test-getopt.c @@ -0,0 +1,101 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of command line argument processing. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2009. */ + +#include <config.h> + +/* None of the files accessed by this test are large, so disable the + ftell link warning if we are not using the gnulib ftell module. */ +#define _GL_NO_LARGE_FILES + +#if GNULIB_TEST_GETOPT_GNU +# include <getopt.h> + +# ifndef __getopt_argv_const +# define __getopt_argv_const const +# endif +# include "signature.h" +SIGNATURE_CHECK (getopt_long, int, (int, char *__getopt_argv_const *, + char const *, struct option const *, + int *)); +SIGNATURE_CHECK (getopt_long_only, int, (int, char *__getopt_argv_const *, + char const *, struct option const *, + int *)); + +#endif + +#include <unistd.h> + +#include "signature.h" +SIGNATURE_CHECK (getopt, int, (int, char * const[], char const *)); + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +/* This test intentionally remaps stderr. So, we arrange to have fd 10 + (outside the range of interesting fd's during the test) set up to + duplicate the original stderr. */ + +#define BACKUP_STDERR_FILENO 10 +#define ASSERT_STREAM myerr +#include "macros.h" + +static FILE *myerr; + +#include "test-getopt.h" +#if GNULIB_TEST_GETOPT_GNU +# include "test-getopt_long.h" +#endif + +int +main (void) +{ + /* This test validates that stderr is used correctly, so move the + original into fd 10. */ + if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO + || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) + return 2; + + ASSERT (freopen ("test-getopt.tmp", "w", stderr) == stderr); + + /* These default values are required by POSIX. */ + ASSERT (optind == 1); + ASSERT (opterr != 0); + + setenv ("POSIXLY_CORRECT", "1", 1); + test_getopt (); + +#if GNULIB_TEST_GETOPT_GNU + test_getopt_long_posix (); +#endif + + unsetenv ("POSIXLY_CORRECT"); + test_getopt (); + +#if GNULIB_TEST_GETOPT_GNU + test_getopt_long (); + test_getopt_long_only (); +#endif + + ASSERT (fclose (stderr) == 0); + ASSERT (remove ("test-getopt.tmp") == 0); + + return 0; +} diff --git a/gnulib-tests/test-getopt.h b/gnulib-tests/test-getopt.h new file mode 100644 index 0000000..402db2c --- /dev/null +++ b/gnulib-tests/test-getopt.h @@ -0,0 +1,1371 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of command line argument processing. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2009. */ + +#include <stdbool.h> + +/* The glibc/gnulib implementation of getopt supports setting optind = + 0, but not all other implementations do. This matters for getopt. + But for getopt_long, we require GNU compatibility. */ +#if defined __GETOPT_PREFIX || (__GLIBC__ >= 2) +# define OPTIND_MIN 0 +#elif HAVE_DECL_OPTRESET +# define OPTIND_MIN (optreset = 1) +#else +# define OPTIND_MIN 1 +#endif + +static void +getopt_loop (int argc, const char **argv, + const char *options, + int *a_seen, int *b_seen, + const char **p_value, const char **q_value, + int *non_options_count, const char **non_options, + int *unrecognized, bool *message_issued) +{ + int c; + int pos = ftell (stderr); + + while ((c = getopt (argc, (char **) argv, options)) != -1) + { + switch (c) + { + case 'a': + (*a_seen)++; + break; + case 'b': + (*b_seen)++; + break; + case 'p': + *p_value = optarg; + break; + case 'q': + *q_value = optarg; + break; + case '\1': + /* Must only happen with option '-' at the beginning. */ + ASSERT (options[0] == '-'); + non_options[(*non_options_count)++] = optarg; + break; + case ':': + /* Must only happen with option ':' at the beginning. */ + ASSERT (options[0] == ':' + || ((options[0] == '-' || options[0] == '+') + && options[1] == ':')); + /* fall through */ + case '?': + *unrecognized = optopt; + break; + default: + *unrecognized = c; + break; + } + } + + *message_issued = pos < ftell (stderr); +} + +static void +test_getopt (void) +{ + int start; + bool posixly = !!getenv ("POSIXLY_CORRECT"); + /* See comment in getopt.c: + glibc gets a LSB-compliant getopt. + Standalone applications get a POSIX-compliant getopt. */ +#if defined __GETOPT_PREFIX || !(__GLIBC__ >= 2 || defined __MINGW32__) + /* Using getopt from gnulib or from a non-glibc system. */ + posixly = true; +#endif + + /* Test processing of boolean options. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-a"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "ab", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-b"; + argv[argc++] = "-a"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "ab", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 1); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 3); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-ba"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "ab", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 1); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-ab"; + argv[argc++] = "-a"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "ab", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 2); + ASSERT (b_seen == 1); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 3); + ASSERT (!output); + } + + /* Test processing of options with arguments. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-pfoo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "p:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "p:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 3); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-ab"; + argv[argc++] = "-q"; + argv[argc++] = "baz"; + argv[argc++] = "-pfoo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 1); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 5); + ASSERT (!output); + } + +#if GNULIB_TEST_GETOPT_GNU + /* Test processing of options with optional arguments. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-pfoo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "p::q::", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "p::q::", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "abp::q::", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 3); + ASSERT (!output); + } +#endif /* GNULIB_TEST_GETOPT_GNU */ + + /* Check that invalid options are recognized; and that both opterr + and leading ':' can silence output. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "-x"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 42; + getopt_loop (argc, argv, "abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 'x'); + ASSERT (optind == 5); + ASSERT (output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "-x"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 0; + getopt_loop (argc, argv, "abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 'x'); + ASSERT (optind == 5); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "-x"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, ":abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 'x'); + ASSERT (optind == 5); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "-:"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 42; + getopt_loop (argc, argv, "abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == ':'); + ASSERT (optind == 5); + ASSERT (output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "-:"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 0; + getopt_loop (argc, argv, "abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == ':'); + ASSERT (optind == 5); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "-:"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, ":abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == ':'); + ASSERT (optind == 5); + ASSERT (!output); + } + + /* Check for missing argument behavior. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-ap"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 'p'); + ASSERT (optind == 2); + ASSERT (output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-ap"; + argv[argc] = NULL; + optind = start; + opterr = 0; + getopt_loop (argc, argv, "abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 'p'); + ASSERT (optind == 2); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-ap"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, ":abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 'p'); + ASSERT (optind == 2); + ASSERT (!output); + } + + /* Check that by default, non-options arguments are moved to the end. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + if (posixly) + { + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 1); + ASSERT (!output); + } + else + { + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "-p") == 0); + ASSERT (strcmp (argv[2], "billy") == 0); + ASSERT (strcmp (argv[3], "-a") == 0); + ASSERT (strcmp (argv[4], "donald") == 0); + ASSERT (strcmp (argv[5], "duck") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 4); + ASSERT (!output); + } + } + + /* Check that '--' ends the argument processing. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[20]; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "--"; + argv[argc++] = "-b"; + argv[argc++] = "foo"; + argv[argc++] = "-q"; + argv[argc++] = "johnny"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + if (posixly) + { + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "--") == 0); + ASSERT (strcmp (argv[7], "-b") == 0); + ASSERT (strcmp (argv[8], "foo") == 0); + ASSERT (strcmp (argv[9], "-q") == 0); + ASSERT (strcmp (argv[10], "johnny") == 0); + ASSERT (strcmp (argv[11], "bar") == 0); + ASSERT (argv[12] == NULL); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 1); + ASSERT (!output); + } + else + { + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "-p") == 0); + ASSERT (strcmp (argv[2], "billy") == 0); + ASSERT (strcmp (argv[3], "-a") == 0); + ASSERT (strcmp (argv[4], "--") == 0); + ASSERT (strcmp (argv[5], "donald") == 0); + ASSERT (strcmp (argv[6], "duck") == 0); + ASSERT (strcmp (argv[7], "-b") == 0); + ASSERT (strcmp (argv[8], "foo") == 0); + ASSERT (strcmp (argv[9], "-q") == 0); + ASSERT (strcmp (argv[10], "johnny") == 0); + ASSERT (strcmp (argv[11], "bar") == 0); + ASSERT (argv[12] == NULL); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 5); + ASSERT (!output); + } + } + +#if GNULIB_TEST_GETOPT_GNU + /* Check that the '-' flag causes non-options to be returned in order. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "-abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 3); + ASSERT (strcmp (non_options[0], "donald") == 0); + ASSERT (strcmp (non_options[1], "duck") == 0); + ASSERT (strcmp (non_options[2], "bar") == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 7); + ASSERT (!output); + } + + /* Check that '--' ends the argument processing. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[20]; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "--"; + argv[argc++] = "-b"; + argv[argc++] = "foo"; + argv[argc++] = "-q"; + argv[argc++] = "johnny"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "-abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "--") == 0); + ASSERT (strcmp (argv[7], "-b") == 0); + ASSERT (strcmp (argv[8], "foo") == 0); + ASSERT (strcmp (argv[9], "-q") == 0); + ASSERT (strcmp (argv[10], "johnny") == 0); + ASSERT (strcmp (argv[11], "bar") == 0); + ASSERT (argv[12] == NULL); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); + ASSERT (q_value == NULL); + ASSERT (!output); + if (non_options_count == 2) + { + /* glibc behaviour. */ + ASSERT (non_options_count == 2); + ASSERT (strcmp (non_options[0], "donald") == 0); + ASSERT (strcmp (non_options[1], "duck") == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 7); + } + else + { + /* Another valid behaviour. */ + ASSERT (non_options_count == 7); + ASSERT (strcmp (non_options[0], "donald") == 0); + ASSERT (strcmp (non_options[1], "duck") == 0); + ASSERT (strcmp (non_options[2], "-b") == 0); + ASSERT (strcmp (non_options[3], "foo") == 0); + ASSERT (strcmp (non_options[4], "-q") == 0); + ASSERT (strcmp (non_options[5], "johnny") == 0); + ASSERT (strcmp (non_options[6], "bar") == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 12); + } + } + + /* Check that the '-' flag has to come first. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "abp:q:-", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + if (posixly) + { + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 1); + ASSERT (!output); + } + else + { + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "-p") == 0); + ASSERT (strcmp (argv[2], "billy") == 0); + ASSERT (strcmp (argv[3], "-a") == 0); + ASSERT (strcmp (argv[4], "donald") == 0); + ASSERT (strcmp (argv[5], "duck") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 4); + ASSERT (!output); + } + } + + /* Check that the '+' flag causes the first non-option to terminate the + loop. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "+abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 1); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-+"; + argv[argc] = NULL; + optind = start; + getopt_loop (argc, argv, "+abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == '+'); + ASSERT (optind == 2); + ASSERT (output); + } + + /* Check that '--' ends the argument processing. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[20]; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "--"; + argv[argc++] = "-b"; + argv[argc++] = "foo"; + argv[argc++] = "-q"; + argv[argc++] = "johnny"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "+abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "--") == 0); + ASSERT (strcmp (argv[7], "-b") == 0); + ASSERT (strcmp (argv[8], "foo") == 0); + ASSERT (strcmp (argv[9], "-q") == 0); + ASSERT (strcmp (argv[10], "johnny") == 0); + ASSERT (strcmp (argv[11], "bar") == 0); + ASSERT (argv[12] == NULL); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind = 1); + ASSERT (!output); + } +#endif /* GNULIB_TEST_GETOPT_GNU */ + + /* Check that the '+' flag has to come first. */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "abp:q:+", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + if (posixly) + { + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 1); + ASSERT (!output); + } + else + { + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "-p") == 0); + ASSERT (strcmp (argv[2], "billy") == 0); + ASSERT (strcmp (argv[3], "-a") == 0); + ASSERT (strcmp (argv[4], "donald") == 0); + ASSERT (strcmp (argv[5], "duck") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 4); + ASSERT (!output); + } + } + +#if GNULIB_TEST_GETOPT_GNU + /* If GNU extensions are supported, require compliance with POSIX + interpretation on leading '+' behavior. + http://austingroupbugs.net/view.php?id=191 */ + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + opterr = 1; + getopt_loop (argc, argv, "+:abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 1); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc] = NULL; + optind = start; + getopt_loop (argc, argv, "+:abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 'p'); + ASSERT (optind == 2); + ASSERT (!output); + } + for (start = OPTIND_MIN; start <= 1; start++) + { + int a_seen = 0; + int b_seen = 0; + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + bool output; + int argc = 0; + const char *argv[10]; + + argv[argc++] = "program"; + argv[argc++] = "-b"; + argv[argc++] = "-p"; + argv[argc] = NULL; + optind = start; + getopt_loop (argc, argv, "+:abp:q:", + &a_seen, &b_seen, &p_value, &q_value, + &non_options_count, non_options, &unrecognized, &output); + ASSERT (a_seen == 0); + ASSERT (b_seen == 1); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 'p'); + ASSERT (optind == 3); + ASSERT (!output); + } +#endif /* GNULIB_TEST_GETOPT_GNU */ +} diff --git a/gnulib-tests/test-getopt_long.h b/gnulib-tests/test-getopt_long.h new file mode 100644 index 0000000..6d837b5 --- /dev/null +++ b/gnulib-tests/test-getopt_long.h @@ -0,0 +1,2127 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of command line argument processing. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2009. */ + +static int a_seen; +static int b_seen; +static int q_seen; + +static const struct option long_options_required[] = + { + { "alpha", no_argument, NULL, 'a' }, + { "beta", no_argument, &b_seen, 1 }, + { "prune", required_argument, NULL, 'p' }, + { "quetsche", required_argument, &q_seen, 1 }, + { "xtremely-",no_argument, NULL, 1003 }, + { "xtra", no_argument, NULL, 1001 }, + { "xtreme", no_argument, NULL, 1002 }, + { "xtremely", no_argument, NULL, 1003 }, + { NULL, 0, NULL, 0 } + }; + +static const struct option long_options_optional[] = + { + { "alpha", no_argument, NULL, 'a' }, + { "beta", no_argument, &b_seen, 1 }, + { "prune", optional_argument, NULL, 'p' }, + { "quetsche", optional_argument, &q_seen, 1 }, + { NULL, 0, NULL, 0 } + }; + +static void +getopt_long_loop (int argc, const char **argv, + const char *options, const struct option *long_options, + const char **p_value, const char **q_value, + int *non_options_count, const char **non_options, + int *unrecognized) +{ + int option_index = -1; + int c; + + opterr = 0; + q_seen = 0; + while ((c = getopt_long (argc, (char **) argv, options, long_options, + &option_index)) + != -1) + { + switch (c) + { + case 0: + /* An option with a non-NULL flag pointer was processed. */ + if (q_seen) + *q_value = optarg; + break; + case 'a': + a_seen++; + break; + case 'b': + b_seen = 1; + break; + case 'p': + *p_value = optarg; + break; + case 'q': + *q_value = optarg; + break; + case '\1': + /* Must only happen with option '-' at the beginning. */ + ASSERT (options[0] == '-'); + non_options[(*non_options_count)++] = optarg; + break; + case ':': + /* Must only happen with option ':' at the beginning. */ + ASSERT (options[0] == ':' + || ((options[0] == '-' || options[0] == '+') + && options[1] == ':')); + /* fall through */ + case '?': + *unrecognized = optopt; + break; + default: + *unrecognized = c; + break; + } + } +} + +/* Reduce casting, so we can use string literals elsewhere. + getopt_long takes an array of char*, but luckily does not modify + those elements, so we can pass const char*. */ +static int +do_getopt_long (int argc, const char **argv, const char *shortopts, + const struct option *longopts, int *longind) +{ + return getopt_long (argc, (char **) argv, shortopts, longopts, longind); +} + +static void +test_getopt_long (void) +{ + int start; + + /* Test disambiguation of options. */ + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "--x"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); + ASSERT (c == '?'); + ASSERT (optopt == 0); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "--xt"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); + ASSERT (c == '?'); + ASSERT (optopt == 0); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "--xtr"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); + ASSERT (c == '?'); + ASSERT (optopt == 0); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "--xtra"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); + ASSERT (c == 1001); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "--xtre"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); + ASSERT (c == '?'); + ASSERT (optopt == 0); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "--xtrem"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); + ASSERT (c == '?'); + ASSERT (optopt == 0); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "--xtreme"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); + ASSERT (c == 1002); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "--xtremel"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); + ASSERT (c == 1003); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "--xtremely"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); + ASSERT (c == 1003); + } + + /* Check that -W handles unknown options. */ + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-W"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long (argc, argv, "W;", long_options_required, &option_index); + ASSERT (c == '?'); + ASSERT (optopt == 'W'); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-Wunknown"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long (argc, argv, "W;", long_options_required, &option_index); + /* glibc and BSD behave differently here, but for now, we allow + both behaviors since W support is not frequently used. */ + if (c == '?') + { + ASSERT (optopt == 0); + ASSERT (optarg == NULL); + } + else + { + ASSERT (c == 'W'); + ASSERT (strcmp (optarg, "unknown") == 0); + } + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-W"; + argv[argc++] = "unknown"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long (argc, argv, "W;", long_options_required, &option_index); + /* glibc and BSD behave differently here, but for now, we allow + both behaviors since W support is not frequently used. */ + if (c == '?') + { + ASSERT (optopt == 0); + ASSERT (optarg == NULL); + } + else + { + ASSERT (c == 'W'); + ASSERT (strcmp (optarg, "unknown") == 0); + } + } + + /* Test processing of boolean short options. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-a"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "ab", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-b"; + argv[argc++] = "-a"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "ab", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 1); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 3); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-ba"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "ab", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 1); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-ab"; + argv[argc++] = "-a"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "ab", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 2); + ASSERT (b_seen == 1); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 3); + } + + /* Test processing of boolean long options. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "--alpha"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "ab", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "--beta"; + argv[argc++] = "--alpha"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "ab", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 1); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 3); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "--alpha"; + argv[argc++] = "--beta"; + argv[argc++] = "--alpha"; + argv[argc++] = "--beta"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "ab", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 2); + ASSERT (b_seen == 1); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 5); + } + + /* Test processing of boolean long options via -W. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-Walpha"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abW;", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-W"; + argv[argc++] = "beta"; + argv[argc++] = "-W"; + argv[argc++] = "alpha"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "aW;b", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 1); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 5); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-Walpha"; + argv[argc++] = "-Wbeta"; + argv[argc++] = "-Walpha"; + argv[argc++] = "-Wbeta"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "W;ab", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 2); + ASSERT (b_seen == 1); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 5); + } + + /* Test processing of short options with arguments. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-pfoo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 3); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-ab"; + argv[argc++] = "-q"; + argv[argc++] = "baz"; + argv[argc++] = "-pfoo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 1); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 5); + } + + /* Test processing of long options with arguments. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "--p=foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "--p"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 3); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-ab"; + argv[argc++] = "--q"; + argv[argc++] = "baz"; + argv[argc++] = "--p=foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 1); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 5); + } + + /* Test processing of long options with arguments via -W. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-Wp=foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p:q:W;", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-W"; + argv[argc++] = "p"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p:W;q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 4); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-ab"; + argv[argc++] = "-Wq"; + argv[argc++] = "baz"; + argv[argc++] = "-W"; + argv[argc++] = "p=foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "W;abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 1); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 6); + } + + /* Test processing of short options with optional arguments. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-pfoo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p::q::", long_options_optional, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p::q::", long_options_optional, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp::q::", long_options_optional, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 3); + } + + /* Test processing of long options with optional arguments. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "--p=foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p::q::", long_options_optional, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "--p"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p::q::", long_options_optional, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "--p="; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p::q::", long_options_optional, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && *p_value == '\0'); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "--p"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp::q::", long_options_optional, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 3); + } + + /* Test processing of long options with optional arguments via -W. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-Wp=foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p::q::W;", long_options_optional, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-Wp"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p::q::W;", long_options_optional, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-Wp="; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "W;p::q::", long_options_optional, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && *p_value == '\0'); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-W"; + argv[argc++] = "p="; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "W;p::q::", long_options_optional, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && *p_value == '\0'); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 3); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-W"; + argv[argc++] = "p"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "W;abp::q::", long_options_optional, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + /* ASSERT (p_value == NULL); */ + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 4); + } + + /* Check that invalid options are recognized. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "-x"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 'x'); + ASSERT (optind == 5); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "-:"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == ':'); + ASSERT (optind == 5); + } + + /* Check that unexpected arguments are recognized. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "--a="; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 'a'); + ASSERT (optind == 4); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "foo"; + argv[argc++] = "--b="; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + /* When flag is non-zero, glibc sets optopt anyway, but BSD + leaves optopt unchanged. */ + ASSERT (unrecognized == 1 || unrecognized == 0); + ASSERT (optind == 4); + } + + /* Check that by default, non-options arguments are moved to the end. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "-p") == 0); + ASSERT (strcmp (argv[2], "billy") == 0); + ASSERT (strcmp (argv[3], "-a") == 0); + ASSERT (strcmp (argv[4], "donald") == 0); + ASSERT (strcmp (argv[5], "duck") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 4); + } + + /* Check that '--' ends the argument processing. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[20]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "--"; + argv[argc++] = "-b"; + argv[argc++] = "foo"; + argv[argc++] = "-q"; + argv[argc++] = "johnny"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "-p") == 0); + ASSERT (strcmp (argv[2], "billy") == 0); + ASSERT (strcmp (argv[3], "-a") == 0); + ASSERT (strcmp (argv[4], "--") == 0); + ASSERT (strcmp (argv[5], "donald") == 0); + ASSERT (strcmp (argv[6], "duck") == 0); + ASSERT (strcmp (argv[7], "-b") == 0); + ASSERT (strcmp (argv[8], "foo") == 0); + ASSERT (strcmp (argv[9], "-q") == 0); + ASSERT (strcmp (argv[10], "johnny") == 0); + ASSERT (strcmp (argv[11], "bar") == 0); + ASSERT (argv[12] == NULL); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 5); + } + + /* Check that the '-' flag causes non-options to be returned in order. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "-abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 3); + ASSERT (strcmp (non_options[0], "donald") == 0); + ASSERT (strcmp (non_options[1], "duck") == 0); + ASSERT (strcmp (non_options[2], "bar") == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 7); + } + + /* Check that '--' ends the argument processing. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[20]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "--"; + argv[argc++] = "-b"; + argv[argc++] = "foo"; + argv[argc++] = "-q"; + argv[argc++] = "johnny"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "-abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "--") == 0); + ASSERT (strcmp (argv[7], "-b") == 0); + ASSERT (strcmp (argv[8], "foo") == 0); + ASSERT (strcmp (argv[9], "-q") == 0); + ASSERT (strcmp (argv[10], "johnny") == 0); + ASSERT (strcmp (argv[11], "bar") == 0); + ASSERT (argv[12] == NULL); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); + ASSERT (q_value == NULL); + if (non_options_count == 2) + { + /* glibc behaviour. */ + ASSERT (non_options_count == 2); + ASSERT (strcmp (non_options[0], "donald") == 0); + ASSERT (strcmp (non_options[1], "duck") == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 7); + } + else + { + /* Another valid behaviour. */ + ASSERT (non_options_count == 7); + ASSERT (strcmp (non_options[0], "donald") == 0); + ASSERT (strcmp (non_options[1], "duck") == 0); + ASSERT (strcmp (non_options[2], "-b") == 0); + ASSERT (strcmp (non_options[3], "foo") == 0); + ASSERT (strcmp (non_options[4], "-q") == 0); + ASSERT (strcmp (non_options[5], "johnny") == 0); + ASSERT (strcmp (non_options[6], "bar") == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 12); + } + } + + /* Check that the '-' flag has to come first. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp:q:-", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "-p") == 0); + ASSERT (strcmp (argv[2], "billy") == 0); + ASSERT (strcmp (argv[3], "-a") == 0); + ASSERT (strcmp (argv[4], "donald") == 0); + ASSERT (strcmp (argv[5], "duck") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 4); + } + + /* Check that the '+' flag causes the first non-option to terminate the + loop. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "+abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 1); + } + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-+"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "+abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == '+'); + ASSERT (optind == 2); + } + + /* Check that '--' ends the argument processing. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[20]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "--"; + argv[argc++] = "-b"; + argv[argc++] = "foo"; + argv[argc++] = "-q"; + argv[argc++] = "johnny"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "+abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "--") == 0); + ASSERT (strcmp (argv[7], "-b") == 0); + ASSERT (strcmp (argv[8], "foo") == 0); + ASSERT (strcmp (argv[9], "-q") == 0); + ASSERT (strcmp (argv[10], "johnny") == 0); + ASSERT (strcmp (argv[11], "bar") == 0); + ASSERT (argv[12] == NULL); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind = 1); + } + + /* Check that the '+' flag has to come first. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp:q:+", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "-p") == 0); + ASSERT (strcmp (argv[2], "billy") == 0); + ASSERT (strcmp (argv[3], "-a") == 0); + ASSERT (strcmp (argv[4], "donald") == 0); + ASSERT (strcmp (argv[5], "duck") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 1); + ASSERT (b_seen == 0); + ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 4); + } +} + +/* Test behavior of getopt_long when POSIXLY_CORRECT is set in the + environment. Options with optional arguments should not change + behavior just because of an environment variable. + http://lists.gnu.org/archive/html/bug-m4/2006-09/msg00028.html */ +static void +test_getopt_long_posix (void) +{ + int start; + + /* Check that POSIXLY_CORRECT stops parsing the same as leading '+'. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "abp:q:", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (strcmp (argv[0], "program") == 0); + ASSERT (strcmp (argv[1], "donald") == 0); + ASSERT (strcmp (argv[2], "-p") == 0); + ASSERT (strcmp (argv[3], "billy") == 0); + ASSERT (strcmp (argv[4], "duck") == 0); + ASSERT (strcmp (argv[5], "-a") == 0); + ASSERT (strcmp (argv[6], "bar") == 0); + ASSERT (argv[7] == NULL); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 1); + } + + /* Check that POSIXLY_CORRECT doesn't change optional arguments. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "p::", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 0); + ASSERT (b_seen == 0); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 2); + } + + /* Check that leading - still sees options after non-options. */ + for (start = 0; start <= 1; start++) + { + const char *p_value = NULL; + const char *q_value = NULL; + int non_options_count = 0; + const char *non_options[10]; + int unrecognized = 0; + int argc = 0; + const char *argv[10]; + a_seen = 0; + b_seen = 0; + + argv[argc++] = "program"; + argv[argc++] = "-a"; + argv[argc++] = "billy"; + argv[argc++] = "-b"; + argv[argc] = NULL; + optind = start; + getopt_long_loop (argc, argv, "-ab", long_options_required, + &p_value, &q_value, + &non_options_count, non_options, &unrecognized); + ASSERT (a_seen == 1); + ASSERT (b_seen == 1); + ASSERT (p_value == NULL); + ASSERT (q_value == NULL); + ASSERT (non_options_count == 1); + ASSERT (strcmp (non_options[0], "billy") == 0); + ASSERT (unrecognized == 0); + ASSERT (optind == 4); + } +} + +/* Reduce casting, so we can use string literals elsewhere. + getopt_long_only takes an array of char*, but luckily does not + modify those elements, so we can pass const char*. */ +static int +do_getopt_long_only (int argc, const char **argv, const char *shortopts, + const struct option *longopts, int *longind) +{ + return getopt_long_only (argc, (char **) argv, shortopts, longopts, longind); +} + +static void +test_getopt_long_only (void) +{ + /* Test disambiguation of options. */ + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-x"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long_only (argc, argv, "ab", long_options_required, + &option_index); + ASSERT (c == '?'); + ASSERT (optopt == 0); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-x"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long_only (argc, argv, "abx", long_options_required, + &option_index); + ASSERT (c == 'x'); + ASSERT (optopt == 0); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "--x"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long_only (argc, argv, "abx", long_options_required, + &option_index); + ASSERT (c == '?'); + ASSERT (optopt == 0); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-b"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + b_seen = 0; + c = do_getopt_long_only (argc, argv, "abx", long_options_required, + &option_index); + ASSERT (c == 'b'); + ASSERT (b_seen == 0); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "--b"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + b_seen = 0; + c = do_getopt_long_only (argc, argv, "abx", long_options_required, + &option_index); + ASSERT (c == 0); + ASSERT (b_seen == 1); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-xt"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long_only (argc, argv, "ab", long_options_required, + &option_index); + ASSERT (c == '?'); + ASSERT (optopt == 0); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-xt"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long_only (argc, argv, "abx", long_options_required, + &option_index); + ASSERT (c == '?'); + ASSERT (optopt == 0); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-xtra"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long_only (argc, argv, "ab", long_options_required, + &option_index); + ASSERT (c == 1001); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-xtreme"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long_only (argc, argv, "abx:", long_options_required, + &option_index); + ASSERT (c == 1002); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-xtremel"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long_only (argc, argv, "ab", long_options_required, + &option_index); + /* glibc getopt_long_only is intentionally different from + getopt_long when handling a prefix that is common to two + spellings, when both spellings have the same option directives. + BSD getopt_long_only treats both cases the same. */ + ASSERT (c == 1003 || c == '?'); + ASSERT (optind == 2); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-xtremel"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long_only (argc, argv, "abx::", long_options_required, + &option_index); + /* glibc getopt_long_only is intentionally different from + getopt_long when handling a prefix that is common to two + spellings, when both spellings have the same option directives. + BSD getopt_long_only treats both cases the same. */ + ASSERT (c == 1003 || c == '?'); + ASSERT (optind == 2); + ASSERT (optarg == NULL); + } + { + int argc = 0; + const char *argv[10]; + int option_index; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-xtras"; + argv[argc] = NULL; + optind = 1; + opterr = 0; + c = do_getopt_long_only (argc, argv, "abx::", long_options_required, + &option_index); + ASSERT (c == 'x'); + ASSERT (strcmp (optarg, "tras") == 0); + } +} diff --git a/gnulib-tests/test-gettimeofday.c b/gnulib-tests/test-gettimeofday.c new file mode 100644 index 0000000..62142aa --- /dev/null +++ b/gnulib-tests/test-gettimeofday.c @@ -0,0 +1,49 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* + * Copyright (C) 2005, 2007, 2009, 2010 Free Software Foundation, Inc. + * Written by Jim Meyering. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General 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 <sys/time.h> + +#include "signature.h" +SIGNATURE_CHECK (gettimeofday, int, + (struct timeval *, GETTIMEOFDAY_TIMEZONE *)); + +#include <time.h> + +#include <stdio.h> +#include <string.h> + +int +main (void) +{ + time_t t = 0; + struct tm *lt; + struct tm saved_lt; + struct timeval tv; + lt = localtime (&t); + saved_lt = *lt; + gettimeofday (&tv, NULL); + if (memcmp (lt, &saved_lt, sizeof (struct tm)) != 0) + { + fprintf (stderr, "gettimeofday still clobbers the localtime buffer!\n"); + return 1; + } + return 0; +} diff --git a/gnulib-tests/test-hash.c b/gnulib-tests/test-hash.c new file mode 100644 index 0000000..23e1894 --- /dev/null +++ b/gnulib-tests/test-hash.c @@ -0,0 +1,261 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* + * Copyright (C) 2009, 2010 Free Software Foundation, Inc. + * Written by Jim Meyering + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General 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 "hash.h" +#include "hash-pjw.h" +#include "inttostr.h" +#include "xalloc.h" + +#include <stdio.h> +#include <stdlib.h> +#include <stdbool.h> +#include <string.h> +#include <unistd.h> + +#include "macros.h" + +#define STREQ(a, b) (strcmp (a, b) == 0) +#define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) + +static bool +hash_compare_strings (void const *x, void const *y) +{ + ASSERT (x != y); + return STREQ (x, y) ? true : false; +} + +static void +hash_freer (void *x) +{ + free (x); +} + +static void +insert_new (Hash_table *ht, const void *ent) +{ + void *e = hash_insert (ht, ent); + ASSERT (e == ent); +} + +static bool +walk (void *ent, void *data) +{ + char *str = ent; + unsigned int *map = data; + switch (*str) + { + case 'a': *map |= 1; return true; + case 'b': *map |= 2; return true; + case 'c': *map |= 4; return true; + } + *map |= 8; + return false; +} + +static int +get_seed (char const *str, unsigned int *seed) +{ + size_t len = strlen (str); + if (len == 0 || strspn (str, "0123456789") != len || 10 < len) + return 1; + + *seed = atoi (str); + return 0; +} + +int +main (int argc, char **argv) +{ + unsigned int i; + unsigned int k; + unsigned int table_size[] = {1, 2, 3, 4, 5, 23, 53}; + Hash_table *ht; + Hash_tuning tuning; + + hash_reset_tuning (&tuning); + tuning.shrink_threshold = 0.3; + tuning.shrink_factor = 0.707; + tuning.growth_threshold = 1.5; + tuning.growth_factor = 2.0; + tuning.is_n_buckets = true; + + if (1 < argc) + { + unsigned int seed; + if (get_seed (argv[1], &seed) != 0) + { + fprintf (stderr, "invalid seed: %s\n", argv[1]); + exit (EXIT_FAILURE); + } + + srand (seed); + } + + for (i = 0; i < ARRAY_CARDINALITY (table_size); i++) + { + size_t sz = table_size[i]; + ht = hash_initialize (sz, NULL, hash_pjw, hash_compare_strings, NULL); + ASSERT (ht); + insert_new (ht, "a"); + { + char *str1 = xstrdup ("a"); + char *str2 = hash_insert (ht, str1); + ASSERT (str1 != str2); + ASSERT (STREQ (str1, str2)); + free (str1); + } + insert_new (ht, "b"); + insert_new (ht, "c"); + i = 0; + ASSERT (hash_do_for_each (ht, walk, &i) == 3); + ASSERT (i == 7); + { + void *buf[5] = { NULL }; + ASSERT (hash_get_entries (ht, NULL, 0) == 0); + ASSERT (hash_get_entries (ht, buf, 5) == 3); + ASSERT (STREQ (buf[0], "a") || STREQ (buf[0], "b") || STREQ (buf[0], "c")); + } + ASSERT (hash_delete (ht, "a")); + ASSERT (hash_delete (ht, "a") == NULL); + ASSERT (hash_delete (ht, "b")); + ASSERT (hash_delete (ht, "c")); + + ASSERT (hash_rehash (ht, 47)); + ASSERT (hash_rehash (ht, 467)); + + /* Free an empty table. */ + hash_clear (ht); + hash_free (ht); + + ht = hash_initialize (sz, NULL, hash_pjw, hash_compare_strings, NULL); + ASSERT (ht); + + insert_new (ht, "z"); + insert_new (ht, "y"); + insert_new (ht, "x"); + insert_new (ht, "w"); + insert_new (ht, "v"); + insert_new (ht, "u"); + + hash_clear (ht); + ASSERT (hash_get_n_entries (ht) == 0); + hash_free (ht); + + /* Test pointer hashing. */ + ht = hash_initialize (sz, NULL, NULL, NULL, NULL); + ASSERT (ht); + { + char *str = xstrdup ("a"); + insert_new (ht, "a"); + insert_new (ht, str); + ASSERT (hash_lookup (ht, str) == str); + free (str); + } + hash_free (ht); + } + + hash_reset_tuning (&tuning); + tuning.shrink_threshold = 0.3; + tuning.shrink_factor = 0.707; + tuning.growth_threshold = 1.5; + tuning.growth_factor = 2.0; + tuning.is_n_buckets = true; + /* Invalid tuning. */ + ht = hash_initialize (4651, &tuning, hash_pjw, hash_compare_strings, + hash_freer); + ASSERT (!ht); + + /* Alternate tuning. */ + tuning.growth_threshold = 0.89; + + /* Run with default tuning, then with custom tuning settings. */ + for (k = 0; k < 2; k++) + { + Hash_tuning const *tune = (k == 0 ? NULL : &tuning); + /* Now, each entry is malloc'd. */ + ht = hash_initialize (4651, tune, hash_pjw, + hash_compare_strings, hash_freer); + ASSERT (ht); + for (i = 0; i < 10000; i++) + { + unsigned int op = rand () % 10; + switch (op) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + { + char buf[50]; + char const *p = uinttostr (i, buf); + insert_new (ht, xstrdup (p)); + } + break; + + case 6: + { + size_t n = hash_get_n_entries (ht); + ASSERT (hash_rehash (ht, n + rand () % 20)); + } + break; + + case 7: + { + size_t n = hash_get_n_entries (ht); + size_t delta = rand () % 20; + if (delta < n) + ASSERT (hash_rehash (ht, n - delta)); + } + break; + + case 8: + case 9: + { + /* Delete a random entry. */ + size_t n = hash_get_n_entries (ht); + if (n) + { + size_t kk = rand () % n; + void const *p; + void *v; + for (p = hash_get_first (ht); kk; + --kk, p = hash_get_next (ht, p)) + { + /* empty */ + } + ASSERT (p); + v = hash_delete (ht, p); + ASSERT (v); + free (v); + } + break; + } + } + ASSERT (hash_table_ok (ht)); + } + + hash_free (ht); + } + + return 0; +} diff --git a/gnulib-tests/test-iconv-h.c b/gnulib-tests/test-iconv-h.c new file mode 100644 index 0000000..0eb022d --- /dev/null +++ b/gnulib-tests/test-iconv-h.c @@ -0,0 +1,33 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <iconv.h> substitute. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 HAVE_ICONV +# include <iconv.h> + +# ifndef ICONV_CONST +# define ICONV_CONST /* empty */ +# endif +#endif + +int +main () +{ + return 0; +} diff --git a/gnulib-tests/test-iconv.c b/gnulib-tests/test-iconv.c new file mode 100644 index 0000000..dda89c3 --- /dev/null +++ b/gnulib-tests/test-iconv.c @@ -0,0 +1,150 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of character set conversion. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#if HAVE_ICONV +# include <iconv.h> + +# ifndef ICONV_CONST +# define ICONV_CONST /* empty */ +# endif + +#include "signature.h" +SIGNATURE_CHECK (iconv, size_t, (iconv_t, ICONV_CONST char **, size_t *, + char **, size_t *)); +SIGNATURE_CHECK (iconv_close, int, (iconv_t x)); +SIGNATURE_CHECK (iconv_open, iconv_t, (char const *, char const *)); + +#endif + +#include <errno.h> +#include <string.h> + +#include "macros.h" + +int +main () +{ +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + and UTF-8. */ + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + iconv_t cd_utf8_to_88591 = iconv_open ("ISO-8859-1", "UTF-8"); + + ASSERT (cd_88591_to_utf8 != (iconv_t)(-1)); + ASSERT (cd_utf8_to_88591 != (iconv_t)(-1)); + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + char buf[50]; + 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, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + strlen (expected)); + ASSERT (memcmp (buf, expected, strlen (expected)) == 0); + } + + /* Test conversion from ISO-8859-1 to UTF-8 with E2BIG. */ + { + static const char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + const char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == (size_t)(-1) && errno == E2BIG); + ASSERT (inbytesleft == 1); + ASSERT (outbytesleft == 1); + ASSERT ((unsigned char) buf[1] == 0xAD); + ASSERT ((unsigned char) buf[0] == 0xDE); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + { + static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + 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, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + strlen (expected)); + ASSERT (memcmp (buf, expected, strlen (expected)) == 0); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + 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, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == (size_t)(-1)) + { + ASSERT (errno == EILSEQ); + ASSERT (inbytesleft == strlen (input) && outptr == buf); + } + else + { + ASSERT (res == 1); + ASSERT (inbytesleft == 0); + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + { + static const char input[] = "\342"; + char buf[10]; + const char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == (size_t)(-1) && errno == EINVAL); + ASSERT (inbytesleft == 1 && outptr == buf); + } + + iconv_close (cd_88591_to_utf8); + iconv_close (cd_utf8_to_88591); +#endif + + return 0; +} diff --git a/gnulib-tests/test-inttypes.c b/gnulib-tests/test-inttypes.c new file mode 100644 index 0000000..72f5892 --- /dev/null +++ b/gnulib-tests/test-inttypes.c @@ -0,0 +1,123 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <inttypes.h> substitute. + Copyright (C) 2006-2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_FORMAT_MACROS 1 /* to make it work also in C++ mode */ +#include <inttypes.h> + +#include <stddef.h> + +/* Tests for macros supposed to be defined in inttypes.h. */ + +const char *k = /* implicit string concatenation */ +#ifdef INT8_MAX + PRId8 PRIi8 +#endif +#ifdef UINT8_MAX + PRIo8 PRIu8 PRIx8 PRIX8 +#endif +#ifdef INT16_MAX + PRId16 PRIi16 +#endif +#ifdef UINT16_MAX + PRIo16 PRIu16 PRIx16 PRIX16 +#endif +#ifdef INT32_MAX + PRId32 PRIi32 +#endif +#ifdef UINT32_MAX + PRIo32 PRIu32 PRIx32 PRIX32 +#endif +#ifdef INT64_MAX + PRId64 PRIi64 +#endif +#ifdef UINT64_MAX + PRIo64 PRIu64 PRIx64 PRIX64 +#endif + PRIdLEAST8 PRIiLEAST8 PRIoLEAST8 PRIuLEAST8 PRIxLEAST8 PRIXLEAST8 + PRIdLEAST16 PRIiLEAST16 PRIoLEAST16 PRIuLEAST16 PRIxLEAST16 PRIXLEAST16 + PRIdLEAST32 PRIiLEAST32 PRIoLEAST32 PRIuLEAST32 PRIxLEAST32 PRIXLEAST32 + PRIdLEAST64 PRIiLEAST64 + PRIoLEAST64 PRIuLEAST64 PRIxLEAST64 PRIXLEAST64 + PRIdFAST8 PRIiFAST8 PRIoFAST8 PRIuFAST8 PRIxFAST8 PRIXFAST8 + PRIdFAST16 PRIiFAST16 PRIoFAST16 PRIuFAST16 PRIxFAST16 PRIXFAST16 + PRIdFAST32 PRIiFAST32 PRIoFAST32 PRIuFAST32 PRIxFAST32 PRIXFAST32 + PRIdFAST64 PRIiFAST64 + PRIoFAST64 PRIuFAST64 PRIxFAST64 PRIXFAST64 + PRIdMAX PRIiMAX PRIoMAX PRIuMAX PRIxMAX PRIXMAX +#ifdef INTPTR_MAX + PRIdPTR PRIiPTR +#endif +#ifdef UINTPTR_MAX + PRIoPTR PRIuPTR PRIxPTR PRIXPTR +#endif + ; +const char *l = /* implicit string concatenation */ +#ifdef INT8_MAX + SCNd8 SCNi8 +#endif +#ifdef UINT8_MAX + SCNo8 SCNu8 SCNx8 +#endif +#ifdef INT16_MAX + SCNd16 SCNi16 +#endif +#ifdef UINT16_MAX + SCNo16 SCNu16 SCNx16 +#endif +#ifdef INT32_MAX + SCNd32 SCNi32 +#endif +#ifdef UINT32_MAX + SCNo32 SCNu32 SCNx32 +#endif +#ifdef INT64_MAX + SCNd64 SCNi64 +#endif +#ifdef UINT64_MAX + SCNo64 SCNu64 SCNx64 +#endif + SCNdLEAST8 SCNiLEAST8 SCNoLEAST8 SCNuLEAST8 SCNxLEAST8 + SCNdLEAST16 SCNiLEAST16 SCNoLEAST16 SCNuLEAST16 SCNxLEAST16 + SCNdLEAST32 SCNiLEAST32 SCNoLEAST32 SCNuLEAST32 SCNxLEAST32 + SCNdLEAST64 SCNiLEAST64 + SCNoLEAST64 SCNuLEAST64 SCNxLEAST64 + SCNdFAST8 SCNiFAST8 SCNoFAST8 SCNuFAST8 SCNxFAST8 + SCNdFAST16 SCNiFAST16 SCNoFAST16 SCNuFAST16 SCNxFAST16 + SCNdFAST32 SCNiFAST32 SCNoFAST32 SCNuFAST32 SCNxFAST32 + SCNdFAST64 SCNiFAST64 + SCNoFAST64 SCNuFAST64 SCNxFAST64 + SCNdMAX SCNiMAX SCNoMAX SCNuMAX SCNxMAX +#ifdef INTPTR_MAX + SCNdPTR SCNiPTR +#endif +#ifdef UINTPTR_MAX + SCNoPTR SCNuPTR SCNxPTR +#endif + ; + +int +main (void) +{ + return 0; +} diff --git a/gnulib-tests/test-langinfo.c b/gnulib-tests/test-langinfo.c new file mode 100644 index 0000000..7b43d2e --- /dev/null +++ b/gnulib-tests/test-langinfo.c @@ -0,0 +1,94 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <langinfo.h> substitute. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2009. */ + +#include <config.h> + +#include <langinfo.h> + +/* Check that all the nl_item values are defined. */ +int items[] = + { + /* nl_langinfo items of the LC_CTYPE category */ + CODESET, + /* nl_langinfo items of the LC_NUMERIC category */ + RADIXCHAR, + THOUSEP, + /* nl_langinfo items of the LC_TIME category */ + D_T_FMT, + D_FMT, + T_FMT, + T_FMT_AMPM, + AM_STR, + PM_STR, + DAY_1, + DAY_2, + DAY_3, + DAY_4, + DAY_5, + DAY_6, + DAY_7, + ABDAY_1, + ABDAY_2, + ABDAY_3, + ABDAY_4, + ABDAY_5, + ABDAY_6, + ABDAY_7, + MON_1, + MON_2, + MON_3, + MON_4, + MON_5, + MON_6, + MON_7, + MON_8, + MON_9, + MON_10, + MON_11, + MON_12, + ABMON_1, + ABMON_2, + ABMON_3, + ABMON_4, + ABMON_5, + ABMON_6, + ABMON_7, + ABMON_8, + ABMON_9, + ABMON_10, + ABMON_11, + ABMON_12, + ERA, + ERA_D_FMT, + ERA_D_T_FMT, + ERA_T_FMT, + ALT_DIGITS, + /* nl_langinfo items of the LC_MONETARY category */ + CRNCYSTR, + /* nl_langinfo items of the LC_MESSAGES category */ + YESEXPR, + NOEXPR + }; + +int +main (void) +{ + return 0; +} diff --git a/gnulib-tests/test-lstat.c b/gnulib-tests/test-lstat.c new file mode 100644 index 0000000..0c7b6ba --- /dev/null +++ b/gnulib-tests/test-lstat.c @@ -0,0 +1,62 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of lstat() function. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Simon Josefsson, 2008; and Eric Blake, 2009. */ + +#include <config.h> + +#include <sys/stat.h> + +/* Caution: lstat may be a function-like macro. Although this + signature check must pass, it may be the signature of the real (and + broken) lstat rather than rpl_lstat. Most code should not use the + address of lstat. */ +#include "signature.h" +SIGNATURE_CHECK (lstat, int, (char const *, struct stat *)); + +#include <fcntl.h> +#include <errno.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#include "same-inode.h" +#include "ignore-value.h" +#include "macros.h" + +#define BASE "test-lstat.t" + +#include "test-lstat.h" + +/* Wrapper around lstat, which works even if lstat is a function-like + macro, where test_lstat_func(lstat) would do the wrong thing. */ +static int +do_lstat (char const *name, struct stat *st) +{ + return lstat (name, st); +} + +int +main (void) +{ + /* Remove any leftovers from a previous partial run. */ + ignore_value (system ("rm -rf " BASE "*")); + + return test_lstat_func (do_lstat, true); +} diff --git a/gnulib-tests/test-lstat.h b/gnulib-tests/test-lstat.h new file mode 100644 index 0000000..45e8498 --- /dev/null +++ b/gnulib-tests/test-lstat.h @@ -0,0 +1,118 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of lstat() function. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Simon Josefsson, 2008; and Eric Blake, 2009. */ + +/* This file is designed to test both lstat(n,buf) and + fstatat(AT_FDCWD,n,buf,AT_SYMLINK_NOFOLLOW). FUNC is the function + to test. Assumes that BASE and ASSERT are already defined, and + that appropriate headers are already included. If PRINT, warn + before skipping symlink tests with status 77. */ + +static int +test_lstat_func (int (*func) (char const *, struct stat *), bool print) +{ + struct stat st1; + struct stat st2; + + /* Test for common directories. */ + ASSERT (func (".", &st1) == 0); + ASSERT (func ("./", &st2) == 0); + ASSERT (SAME_INODE (st1, st2)); + ASSERT (S_ISDIR (st1.st_mode)); + ASSERT (S_ISDIR (st2.st_mode)); + ASSERT (func ("/", &st1) == 0); + ASSERT (func ("///", &st2) == 0); + ASSERT (SAME_INODE (st1, st2)); + ASSERT (S_ISDIR (st1.st_mode)); + ASSERT (S_ISDIR (st2.st_mode)); + ASSERT (func ("..", &st1) == 0); + ASSERT (S_ISDIR (st1.st_mode)); + + /* Test for error conditions. */ + errno = 0; + ASSERT (func ("", &st1) == -1); + ASSERT (errno == ENOENT); + errno = 0; + ASSERT (func ("nosuch", &st1) == -1); + ASSERT (errno == ENOENT); + errno = 0; + ASSERT (func ("nosuch/", &st1) == -1); + ASSERT (errno == ENOENT); + + ASSERT (close (creat (BASE "file", 0600)) == 0); + ASSERT (func (BASE "file", &st1) == 0); + ASSERT (S_ISREG (st1.st_mode)); + errno = 0; + ASSERT (func (BASE "file/", &st1) == -1); + ASSERT (errno == ENOTDIR); + + /* Now for some symlink tests, where supported. We set up: + link1 -> directory + link2 -> file + link3 -> dangling + link4 -> loop + then test behavior both with and without trailing slash. + */ + if (symlink (".", BASE "link1") != 0) + { + ASSERT (unlink (BASE "file") == 0); + if (print) + fputs ("skipping test: symlinks not supported on this file system\n", + stderr); + return 77; + } + ASSERT (symlink (BASE "file", BASE "link2") == 0); + ASSERT (symlink (BASE "nosuch", BASE "link3") == 0); + ASSERT (symlink (BASE "link4", BASE "link4") == 0); + + ASSERT (func (BASE "link1", &st1) == 0); + ASSERT (S_ISLNK (st1.st_mode)); + ASSERT (func (BASE "link1/", &st1) == 0); + ASSERT (stat (BASE "link1", &st2) == 0); + ASSERT (S_ISDIR (st1.st_mode)); + ASSERT (S_ISDIR (st2.st_mode)); + ASSERT (SAME_INODE (st1, st2)); + + ASSERT (func (BASE "link2", &st1) == 0); + ASSERT (S_ISLNK (st1.st_mode)); + errno = 0; + ASSERT (func (BASE "link2/", &st1) == -1); + ASSERT (errno == ENOTDIR); + + ASSERT (func (BASE "link3", &st1) == 0); + ASSERT (S_ISLNK (st1.st_mode)); + errno = 0; + ASSERT (func (BASE "link3/", &st1) == -1); + ASSERT (errno == ENOENT); + + ASSERT (func (BASE "link4", &st1) == 0); + ASSERT (S_ISLNK (st1.st_mode)); + errno = 0; + ASSERT (func (BASE "link4/", &st1) == -1); + ASSERT (errno == ELOOP); + + /* Cleanup. */ + ASSERT (unlink (BASE "file") == 0); + ASSERT (unlink (BASE "link1") == 0); + ASSERT (unlink (BASE "link2") == 0); + ASSERT (unlink (BASE "link3") == 0); + ASSERT (unlink (BASE "link4") == 0); + + return 0; +} diff --git a/gnulib-tests/test-malloca.c b/gnulib-tests/test-malloca.c new file mode 100644 index 0000000..963ebe6 --- /dev/null +++ b/gnulib-tests/test-malloca.c @@ -0,0 +1,61 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of safe automatic memory allocation. + Copyright (C) 2005, 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. */ + +#include <config.h> + +#include "malloca.h" + +#include <stdlib.h> + +static void +do_allocation (int n) +{ + void *ptr = malloca (n); + freea (ptr); + ptr = safe_alloca (n); +} + +void (*func) (int) = do_allocation; + +int +main () +{ + int i; + + /* Repeat a lot of times, to make sure there's no memory leak. */ + for (i = 0; i < 50000; i++) + { + /* Try various values. + n = 0 gave a crash on Alpha with gcc-2.5.8. + Some versions of MacOS X have a stack size limit of 512 KB. */ + func (34); + func (134); + func (399); + func (510823); + func (129321); + func (0); + func (4070); + func (4095); + func (1); + func (16582); + } + + return 0; +} diff --git a/gnulib-tests/test-mbrtowc.c b/gnulib-tests/test-mbrtowc.c new file mode 100644 index 0000000..a27793b --- /dev/null +++ b/gnulib-tests/test-mbrtowc.c @@ -0,0 +1,325 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of conversion of multibyte character to wide character. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include <config.h> + +#include <wchar.h> + +#include "signature.h" +SIGNATURE_CHECK (mbrtowc, size_t, (wchar_t *, char const *, size_t, + mbstate_t *)); + +#include <locale.h> +#include <stdio.h> +#include <string.h> + +#include "macros.h" + +int +main (int argc, char *argv[]) +{ + mbstate_t state; + wchar_t wc; + size_t ret; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test zero-length input. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "x", 0, &state); + /* gnulib's implementation returns (size_t)(-2). + The AIX 5.1 implementation returns (size_t)(-1). + glibc's implementation returns 0. */ + ASSERT (ret == (size_t)(-2) || ret == (size_t)(-1) || ret == 0); + ASSERT (mbsinit (&state)); + } + + /* Test NUL byte input. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "", 1, &state); + ASSERT (ret == 0); + ASSERT (wc == 0); + ASSERT (mbsinit (&state)); + ret = mbrtowc (NULL, "", 1, &state); + ASSERT (ret == 0); + ASSERT (mbsinit (&state)); + } + + /* Test single-byte input. */ + { + int c; + char buf[1]; + + memset (&state, '\0', sizeof (mbstate_t)); + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': 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 ';': case '<': case '=': 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': + case '[': case '\\': case ']': 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': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = c; + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == c); + ASSERT (mbsinit (&state)); + ret = mbrtowc (NULL, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (mbsinit (&state)); + break; + } + } + + /* Test special calling convention, passing a NULL pointer. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, NULL, 5, &state); + ASSERT (ret == 0); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (mbsinit (&state)); + } + + if (argc > 1) + switch (argv[1][0]) + { + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + char input[] = "B\374\337er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == (unsigned char) '\374'); + ASSERT (mbsinit (&state)); + input[1] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 2, 3, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == (unsigned char) '\337'); + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 2, &state); + ASSERT (ret == 1); + ASSERT (wc == 'e'); + ASSERT (mbsinit (&state)); + input[3] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 4, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'r'); + ASSERT (mbsinit (&state)); + } + return 0; + + case '2': + /* Locale encoding is UTF-8. */ + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 2, 5, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 4, &state); + ASSERT (ret == 2); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[3] = '\0'; + input[4] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 5, 2, &state); + ASSERT (ret == 1); + ASSERT (wc == 'e'); + ASSERT (mbsinit (&state)); + input[5] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 6, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'r'); + ASSERT (mbsinit (&state)); + } + return 0; + + case '3': + /* Locale encoding is EUC-JP. */ + { + char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '<'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 2, &state); + ASSERT (ret == 2); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[1] = '\0'; + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[3] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 4, 4, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[4] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 5, 3, &state); + ASSERT (ret == 2); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[5] = '\0'; + input[6] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 7, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '>'); + ASSERT (mbsinit (&state)); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 2, 7, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 6, &state); + ASSERT (ret == 4); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[3] = '\0'; + input[4] = '\0'; + input[5] = '\0'; + input[6] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 7, 2, &state); + ASSERT (ret == 1); + ASSERT (wc == 'e'); + ASSERT (mbsinit (&state)); + input[5] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 8, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'r'); + ASSERT (mbsinit (&state)); + } + return 0; + } + + return 1; +} diff --git a/gnulib-tests/test-mbrtowc1.sh b/gnulib-tests/test-mbrtowc1.sh new file mode 100755 index 0000000..3becba3 --- /dev/null +++ b/gnulib-tests/test-mbrtowc1.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR \ +./test-mbrtowc${EXEEXT} 1 diff --git a/gnulib-tests/test-mbrtowc2.sh b/gnulib-tests/test-mbrtowc2.sh new file mode 100755 index 0000000..0405aba --- /dev/null +++ b/gnulib-tests/test-mbrtowc2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +./test-mbrtowc${EXEEXT} 2 diff --git a/gnulib-tests/test-mbrtowc3.sh b/gnulib-tests/test-mbrtowc3.sh new file mode 100755 index 0000000..63a89a2 --- /dev/null +++ b/gnulib-tests/test-mbrtowc3.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific EUC-JP locale is installed. +: ${LOCALE_JA=ja_JP} +if test $LOCALE_JA = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional japanese locale is installed" + else + echo "Skipping test: no traditional japanese locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_JA \ +./test-mbrtowc${EXEEXT} 3 diff --git a/gnulib-tests/test-mbrtowc4.sh b/gnulib-tests/test-mbrtowc4.sh new file mode 100755 index 0000000..b299a2c --- /dev/null +++ b/gnulib-tests/test-mbrtowc4.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific GB18030 locale is installed. +: ${LOCALE_ZH_CN=zh_CN.GB18030} +if test $LOCALE_ZH_CN = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no transitional chinese locale is installed" + else + echo "Skipping test: no transitional chinese locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_ZH_CN \ +./test-mbrtowc${EXEEXT} 4 diff --git a/gnulib-tests/test-mbscasecmp.c b/gnulib-tests/test-mbscasecmp.c new file mode 100644 index 0000000..9e87901 --- /dev/null +++ b/gnulib-tests/test-mbscasecmp.c @@ -0,0 +1,57 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of case-insensitive string comparison function. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <string.h> + +#include <locale.h> + +#include "macros.h" + +int +main () +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + ASSERT (mbscasecmp ("paragraph", "Paragraph") == 0); + + ASSERT (mbscasecmp ("paragrapH", "parAgRaph") == 0); + + ASSERT (mbscasecmp ("paragraph", "paraLyzed") < 0); + ASSERT (mbscasecmp ("paraLyzed", "paragraph") > 0); + + ASSERT (mbscasecmp ("para", "paragraph") < 0); + ASSERT (mbscasecmp ("paragraph", "para") > 0); + + /* The following tests shows how mbscasecmp() is different from + strcasecmp(). */ + + ASSERT (mbscasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R") == 0); /* özgür */ + ASSERT (mbscasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r") == 0); /* özgür */ + + /* This test shows how strings of different size can compare equal. */ + ASSERT (mbscasecmp ("turkish", "TURK\304\260SH") == 0); + ASSERT (mbscasecmp ("TURK\304\260SH", "turkish") == 0); + + return 0; +} diff --git a/gnulib-tests/test-mbscasecmp.sh b/gnulib-tests/test-mbscasecmp.sh new file mode 100755 index 0000000..1ec7d5e --- /dev/null +++ b/gnulib-tests/test-mbscasecmp.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific Turkish locale is installed. +: ${LOCALE_TR_UTF8=tr_TR.UTF-8} +if test $LOCALE_TR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no turkish Unicode locale is installed" + else + echo "Skipping test: no turkish Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_TR_UTF8 \ +./test-mbscasecmp${EXEEXT} diff --git a/gnulib-tests/test-mbsinit.c b/gnulib-tests/test-mbsinit.c new file mode 100644 index 0000000..36bde5e --- /dev/null +++ b/gnulib-tests/test-mbsinit.c @@ -0,0 +1,55 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of test for initial conversion state. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include <config.h> + +#include <wchar.h> + +#include "signature.h" +SIGNATURE_CHECK (mbsinit, int, (const mbstate_t *)); + +#include <locale.h> + +#include "macros.h" + +int +main (int argc, char *argv[]) +{ + static mbstate_t state; + + ASSERT (mbsinit (&state)); + + if (argc > 1) + { + static const char input[1] = "\303"; + wchar_t wc; + size_t ret; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (!mbsinit (&state)); + } + + return 0; +} diff --git a/gnulib-tests/test-mbsinit.sh b/gnulib-tests/test-mbsinit.sh new file mode 100755 index 0000000..bbda48d --- /dev/null +++ b/gnulib-tests/test-mbsinit.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +./test-mbsinit${EXEEXT} diff --git a/gnulib-tests/test-mbsrtowcs.c b/gnulib-tests/test-mbsrtowcs.c new file mode 100644 index 0000000..5ac6bdd --- /dev/null +++ b/gnulib-tests/test-mbsrtowcs.c @@ -0,0 +1,295 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of conversion of string to wide string. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include <config.h> + +#include <wchar.h> + +#include "signature.h" +SIGNATURE_CHECK (mbsrtowcs, size_t, (wchar_t *, char const **, size_t, + mbstate_t *)); + +#include <locale.h> +#include <stdio.h> +#include <string.h> + +#include "macros.h" + +int +main (int argc, char *argv[]) +{ + mbstate_t state; + wchar_t wc; + size_t ret; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test NUL byte input. */ + { + const char *src; + + memset (&state, '\0', sizeof (mbstate_t)); + + src = ""; + ret = mbsrtowcs (NULL, &src, 0, &state); + ASSERT (ret == 0); + ASSERT (mbsinit (&state)); + + src = ""; + ret = mbsrtowcs (NULL, &src, 1, &state); + ASSERT (ret == 0); + ASSERT (mbsinit (&state)); + + wc = (wchar_t) 0xBADFACE; + src = ""; + ret = mbsrtowcs (&wc, &src, 0, &state); + ASSERT (ret == 0); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (mbsinit (&state)); + + wc = (wchar_t) 0xBADFACE; + src = ""; + ret = mbsrtowcs (&wc, &src, 1, &state); + ASSERT (ret == 0); + ASSERT (wc == 0); + ASSERT (mbsinit (&state)); + } + + if (argc > 1) + { + int unlimited; + + for (unlimited = 0; unlimited < 2; unlimited++) + { + #define BUFSIZE 10 + wchar_t buf[BUFSIZE]; + const char *src; + mbstate_t temp_state; + + { + size_t i; + for (i = 0; i < BUFSIZE; i++) + buf[i] = (wchar_t) 0xBADFACE; + } + + switch (argv[1][0]) + { + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + char input[] = "B\374\337er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == (unsigned char) '\374'); + ASSERT (mbsinit (&state)); + input[1] = '\0'; + + src = input + 2; + temp_state = state; + ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 1, &temp_state); + ASSERT (ret == 3); + ASSERT (src == input + 2); + ASSERT (mbsinit (&state)); + + src = input + 2; + ret = mbsrtowcs (buf, &src, unlimited ? BUFSIZE : 1, &state); + ASSERT (ret == (unlimited ? 3 : 1)); + ASSERT (src == (unlimited ? NULL : input + 3)); + ASSERT (wctob (buf[0]) == (unsigned char) '\337'); + if (unlimited) + { + ASSERT (buf[1] == 'e'); + ASSERT (buf[2] == 'r'); + ASSERT (buf[3] == 0); + ASSERT (buf[4] == (wchar_t) 0xBADFACE); + } + else + ASSERT (buf[1] == (wchar_t) 0xBADFACE); + ASSERT (mbsinit (&state)); + } + break; + + case '2': + /* Locale encoding is UTF-8. */ + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + src = input + 2; + temp_state = state; + ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 2, &temp_state); + ASSERT (ret == 4); + ASSERT (src == input + 2); + ASSERT (!mbsinit (&state)); + + src = input + 2; + ret = mbsrtowcs (buf, &src, unlimited ? BUFSIZE : 2, &state); + ASSERT (ret == (unlimited ? 4 : 2)); + ASSERT (src == (unlimited ? NULL : input + 5)); + ASSERT (wctob (buf[0]) == EOF); + ASSERT (wctob (buf[1]) == EOF); + if (unlimited) + { + ASSERT (buf[2] == 'e'); + ASSERT (buf[3] == 'r'); + ASSERT (buf[4] == 0); + ASSERT (buf[5] == (wchar_t) 0xBADFACE); + } + else + ASSERT (buf[2] == (wchar_t) 0xBADFACE); + ASSERT (mbsinit (&state)); + } + break; + + case '3': + /* Locale encoding is EUC-JP. */ + { + char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '<'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 2, &state); + ASSERT (ret == 2); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[1] = '\0'; + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[3] = '\0'; + + src = input + 4; + temp_state = state; + ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 2, &temp_state); + ASSERT (ret == 3); + ASSERT (src == input + 4); + ASSERT (!mbsinit (&state)); + + src = input + 4; + ret = mbsrtowcs (buf, &src, unlimited ? BUFSIZE : 2, &state); + ASSERT (ret == (unlimited ? 3 : 2)); + ASSERT (src == (unlimited ? NULL : input + 7)); + ASSERT (wctob (buf[0]) == EOF); + ASSERT (wctob (buf[1]) == EOF); + if (unlimited) + { + ASSERT (buf[2] == '>'); + ASSERT (buf[3] == 0); + ASSERT (buf[4] == (wchar_t) 0xBADFACE); + } + else + ASSERT (buf[2] == (wchar_t) 0xBADFACE); + ASSERT (mbsinit (&state)); + } + break; + + case '4': + /* Locale encoding is GB18030. */ + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + src = input + 2; + temp_state = state; + ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 2, &temp_state); + ASSERT (ret == 4); + ASSERT (src == input + 2); + ASSERT (!mbsinit (&state)); + + src = input + 2; + ret = mbsrtowcs (buf, &src, unlimited ? BUFSIZE : 2, &state); + ASSERT (ret == (unlimited ? 4 : 2)); + ASSERT (src == (unlimited ? NULL : input + 7)); + ASSERT (wctob (buf[0]) == EOF); + ASSERT (wctob (buf[1]) == EOF); + if (unlimited) + { + ASSERT (buf[2] == 'e'); + ASSERT (buf[3] == 'r'); + ASSERT (buf[4] == 0); + ASSERT (buf[5] == (wchar_t) 0xBADFACE); + } + else + ASSERT (buf[2] == (wchar_t) 0xBADFACE); + ASSERT (mbsinit (&state)); + } + break; + + default: + return 1; + } + } + + return 0; + } + + return 1; +} diff --git a/gnulib-tests/test-mbsrtowcs1.sh b/gnulib-tests/test-mbsrtowcs1.sh new file mode 100755 index 0000000..01916e7 --- /dev/null +++ b/gnulib-tests/test-mbsrtowcs1.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR \ +./test-mbsrtowcs${EXEEXT} 1 diff --git a/gnulib-tests/test-mbsrtowcs2.sh b/gnulib-tests/test-mbsrtowcs2.sh new file mode 100755 index 0000000..f72ceb6 --- /dev/null +++ b/gnulib-tests/test-mbsrtowcs2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +./test-mbsrtowcs${EXEEXT} 2 diff --git a/gnulib-tests/test-mbsrtowcs3.sh b/gnulib-tests/test-mbsrtowcs3.sh new file mode 100755 index 0000000..b3c01d4 --- /dev/null +++ b/gnulib-tests/test-mbsrtowcs3.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific EUC-JP locale is installed. +: ${LOCALE_JA=ja_JP} +if test $LOCALE_JA = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional japanese locale is installed" + else + echo "Skipping test: no traditional japanese locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_JA \ +./test-mbsrtowcs${EXEEXT} 3 diff --git a/gnulib-tests/test-mbsrtowcs4.sh b/gnulib-tests/test-mbsrtowcs4.sh new file mode 100755 index 0000000..226d6ff --- /dev/null +++ b/gnulib-tests/test-mbsrtowcs4.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific GB18030 locale is installed. +: ${LOCALE_ZH_CN=zh_CN.GB18030} +if test $LOCALE_ZH_CN = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no transitional chinese locale is installed" + else + echo "Skipping test: no transitional chinese locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_ZH_CN \ +./test-mbsrtowcs${EXEEXT} 4 diff --git a/gnulib-tests/test-mbsstr1.c b/gnulib-tests/test-mbsstr1.c new file mode 100644 index 0000000..5d3ac95 --- /dev/null +++ b/gnulib-tests/test-mbsstr1.c @@ -0,0 +1,130 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of searching in a string. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <string.h> + +#include <stdlib.h> + +#include "macros.h" + +int +main () +{ + /* This test is executed in the C locale. */ + + { + const char input[] = "foo"; + const char *result = mbsstr (input, ""); + ASSERT (result == input); + } + + { + const char input[] = "foo"; + const char *result = mbsstr (input, "o"); + ASSERT (result == input + 1); + } + + { + const char input[] = "ABC ABCDAB ABCDABCDABDE"; + const char *result = mbsstr (input, "ABCDABD"); + ASSERT (result == input + 15); + } + + { + const char input[] = "ABC ABCDAB ABCDABCDABDE"; + const char *result = mbsstr (input, "ABCDABE"); + ASSERT (result == NULL); + } + + /* Check that a very long haystack is handled quickly if the needle is + short and occurs near the beginning. */ + { + size_t repeat = 10000; + size_t m = 1000000; + char *needle = + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; + char *haystack = (char *) malloc (m + 1); + if (haystack != NULL) + { + memset (haystack, 'A', m); + haystack[0] = 'B'; + haystack[m] = '\0'; + + for (; repeat > 0; repeat--) + { + ASSERT (mbsstr (haystack, needle) == haystack + 1); + } + + free (haystack); + } + } + + /* Check that a very long needle is discarded quickly if the haystack is + short. */ + { + size_t repeat = 10000; + size_t m = 1000000; + char *haystack = + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB"; + char *needle = (char *) malloc (m + 1); + if (needle != NULL) + { + memset (needle, 'A', m); + needle[m] = '\0'; + + for (; repeat > 0; repeat--) + { + ASSERT (mbsstr (haystack, needle) == NULL); + } + + free (needle); + } + } + + /* Check that the asymptotic worst-case complexity is not quadratic. */ + { + size_t m = 1000000; + char *haystack = (char *) malloc (2 * m + 2); + char *needle = (char *) malloc (m + 2); + if (haystack != NULL && needle != NULL) + { + const char *result; + + 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'; + + result = mbsstr (haystack, needle); + ASSERT (result == haystack + m); + } + free (needle); + free (haystack); + } + + return 0; +} diff --git a/gnulib-tests/test-mbsstr2.c b/gnulib-tests/test-mbsstr2.c new file mode 100644 index 0000000..bb46e86 --- /dev/null +++ b/gnulib-tests/test-mbsstr2.c @@ -0,0 +1,143 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of searching in a string. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <string.h> + +#include <locale.h> +#include <stdlib.h> + +#include "macros.h" + +int +main () +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + { + const char input[] = "f\303\266\303\266"; + const char *result = mbsstr (input, ""); + ASSERT (result == input); + } + + { + const char input[] = "f\303\266\303\266"; + const char *result = mbsstr (input, "\303\266"); + ASSERT (result == input + 1); + } + + { + const char input[] = "f\303\266\303\266"; + const char *result = mbsstr (input, "\266\303"); + ASSERT (result == NULL); + } + + { + const char input[] = "\303\204BC \303\204BCD\303\204B \303\204BCD\303\204BCD\303\204BDE"; /* "ÄBC ÄBCDÄB ÄBCDÄBCDÄBDE" */ + const char *result = mbsstr (input, "\303\204BCD\303\204BD"); /* "ÄBCDÄBD" */ + ASSERT (result == input + 19); + } + + { + const char input[] = "\303\204BC \303\204BCD\303\204B \303\204BCD\303\204BCD\303\204BDE"; /* "ÄBC ÄBCDÄB ÄBCDÄBCDÄBDE" */ + const char *result = mbsstr (input, "\303\204BCD\303\204BE"); /* "ÄBCDÄBE" */ + ASSERT (result == NULL); + } + + /* Check that a very long haystack is handled quickly if the needle is + short and occurs near the beginning. */ + { + size_t repeat = 10000; + size_t m = 1000000; + char *needle = + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; + char *haystack = (char *) malloc (m + 1); + if (haystack != NULL) + { + memset (haystack, 'A', m); + haystack[0] = '\303'; haystack[1] = '\204'; + haystack[m] = '\0'; + + for (; repeat > 0; repeat--) + { + ASSERT (mbsstr (haystack, needle) == haystack + 2); + } + + free (haystack); + } + } + + /* Check that a very long needle is discarded quickly if the haystack is + short. */ + { + size_t repeat = 10000; + size_t m = 1000000; + char *haystack = + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207" + "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207" + "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207" + "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207" + "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207"; + char *needle = (char *) malloc (m + 1); + if (needle != NULL) + { + memset (needle, 'A', m); + needle[m] = '\0'; + + for (; repeat > 0; repeat--) + { + ASSERT (mbsstr (haystack, needle) == NULL); + } + + free (needle); + } + } + + /* Check that the asymptotic worst-case complexity is not quadratic. */ + { + size_t m = 1000000; + char *haystack = (char *) malloc (2 * m + 3); + char *needle = (char *) malloc (m + 3); + if (haystack != NULL && needle != NULL) + { + const char *result; + + memset (haystack, 'A', 2 * m); + haystack[2 * m] = '\303'; haystack[2 * m + 1] = '\207'; + haystack[2 * m + 2] = '\0'; + + memset (needle, 'A', m); + needle[m] = '\303'; needle[m + 1] = '\207'; + needle[m + 2] = '\0'; + + result = mbsstr (haystack, needle); + ASSERT (result == haystack + m); + } + free (needle); + free (haystack); + } + + return 0; +} diff --git a/gnulib-tests/test-mbsstr2.sh b/gnulib-tests/test-mbsstr2.sh new file mode 100755 index 0000000..79d06df --- /dev/null +++ b/gnulib-tests/test-mbsstr2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +./test-mbsstr2${EXEEXT} diff --git a/gnulib-tests/test-mbsstr3.c b/gnulib-tests/test-mbsstr3.c new file mode 100644 index 0000000..a9953ac --- /dev/null +++ b/gnulib-tests/test-mbsstr3.c @@ -0,0 +1,83 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of searching in a string. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <string.h> + +#include <locale.h> + +#include "macros.h" + +int +main () +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Tests with a character < 0x30. */ + { + const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ + const char *result = mbsstr (input, " "); + ASSERT (result == input + 4); + } + + { + const char input[] = "\312\276\300\375"; /* "示例" */ + const char *result = mbsstr (input, " "); + ASSERT (result == NULL); + } + + /* Tests with a character >= 0x30. */ + { + const char input[] = "\272\305123\324\313\320\320\241\243"; /* "号123运行。" */ + const char *result = mbsstr (input, "2"); + ASSERT (result == input + 3); + } + + /* The following tests show how mbsstr() is different from strstr(). */ + + { + const char input[] = "\313\320\320\320"; /* "诵行" */ + const char *result = mbsstr (input, "\320\320"); /* "行" */ + ASSERT (result == input + 2); + } + + { + const char input[] = "\203\062\332\066123\324\313\320\320\241\243"; /* "씋123运行。" */ + const char *result = mbsstr (input, "2"); + ASSERT (result == input + 5); + } + + { + const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ + const char *result = mbsstr (input, "\276\300"); /* "纠" */ + ASSERT (result == NULL); + } + + { + const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ + const char *result = mbsstr (input, "\375 "); /* invalid multibyte sequence */ + ASSERT (result == NULL); + } + + return 0; +} diff --git a/gnulib-tests/test-mbsstr3.sh b/gnulib-tests/test-mbsstr3.sh new file mode 100755 index 0000000..732c01f --- /dev/null +++ b/gnulib-tests/test-mbsstr3.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific GB18030 locale is installed. +: ${LOCALE_ZH_CN=zh_CN.GB18030} +if test $LOCALE_ZH_CN = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no chinese GB18030 locale is installed" + else + echo "Skipping test: no chinese GB18030 locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_ZH_CN \ +./test-mbsstr3${EXEEXT} diff --git a/gnulib-tests/test-memchr.c b/gnulib-tests/test-memchr.c new file mode 100644 index 0000000..3f1e681 --- /dev/null +++ b/gnulib-tests/test-memchr.c @@ -0,0 +1,121 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* + * Copyright (C) 2008-2010 Free Software Foundation, Inc. + * Written by Eric Blake 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 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General 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 "signature.h" +SIGNATURE_CHECK (memchr, void *, (void const *, int, size_t)); + +#include <stdlib.h> + +#include "zerosize-ptr.h" +#include "macros.h" + +/* Calculating void * + int is not portable, so this wrapper converts + to char * to make the tests easier to write. */ +#define MEMCHR (char *) memchr + +int +main (void) +{ + size_t n = 0x100000; + char *input = malloc (n); + ASSERT (input); + + input[0] = 'a'; + input[1] = 'b'; + memset (input + 2, 'c', 1024); + memset (input + 1026, 'd', n - 1028); + input[n - 2] = 'e'; + input[n - 1] = 'a'; + + /* Basic behavior tests. */ + ASSERT (MEMCHR (input, 'a', n) == input); + + ASSERT (MEMCHR (input, 'a', 0) == NULL); + ASSERT (MEMCHR (zerosize_ptr (), 'a', 0) == NULL); + + ASSERT (MEMCHR (input, 'b', n) == input + 1); + ASSERT (MEMCHR (input, 'c', n) == input + 2); + ASSERT (MEMCHR (input, 'd', n) == input + 1026); + + ASSERT (MEMCHR (input + 1, 'a', n - 1) == input + n - 1); + ASSERT (MEMCHR (input + 1, 'e', n - 1) == input + n - 2); + + ASSERT (MEMCHR (input, 'f', n) == NULL); + ASSERT (MEMCHR (input, '\0', n) == NULL); + + /* Check that a very long haystack is handled quickly if the byte is + found near the beginning. */ + { + size_t repeat = 10000; + for (; repeat > 0; repeat--) + { + ASSERT (MEMCHR (input, 'c', n) == input + 2); + } + } + + /* Alignment tests. */ + { + int i, j; + for (i = 0; i < 32; i++) + { + for (j = 0; j < 256; j++) + input[i + j] = j; + for (j = 0; j < 256; j++) + { + ASSERT (MEMCHR (input + i, j, 256) == input + i + j); + } + } + } + + /* Check that memchr() does not read past the first occurrence of the + byte being searched. See the Austin Group's clarification + <http://www.opengroup.org/austin/docs/austin_454.txt>. */ + { + char *page_boundary = (char *) zerosize_ptr (); + + if (page_boundary != NULL) + { + for (n = 1; n <= 500; n++) + { + char *mem = page_boundary - n; + memset (mem, 'X', n); + ASSERT (MEMCHR (mem, 'U', n) == NULL); + + { + size_t i; + + for (i = 0; i < n; i++) + { + mem[i] = 'U'; + ASSERT (MEMCHR (mem, 'U', 4000) == mem + i); + mem[i] = 'X'; + } + } + } + } + } + + free (input); + + return 0; +} diff --git a/gnulib-tests/test-nl_langinfo.c b/gnulib-tests/test-nl_langinfo.c new file mode 100644 index 0000000..11f90b8 --- /dev/null +++ b/gnulib-tests/test-nl_langinfo.c @@ -0,0 +1,117 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of nl_langinfo replacement. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2009. */ + +#include <config.h> + +#include <langinfo.h> + +#include "signature.h" +SIGNATURE_CHECK (nl_langinfo, char *, (nl_item)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> + +#include "c-strcase.h" +#include "macros.h" + +int +main (int argc, char *argv[]) +{ + int pass = atoi (argv[1]); + /* pass locale + 0 C + 1 traditional French locale + 2 French UTF-8 locale + */ + + setlocale (LC_ALL, ""); + + /* nl_langinfo items of the LC_CTYPE category */ + ASSERT (strlen (nl_langinfo (CODESET)) > 0); + if (pass == 2) + { + const char *codeset = nl_langinfo (CODESET); + ASSERT (c_strcasecmp (codeset, "UTF-8") == 0 || c_strcasecmp (codeset, "UTF8") == 0); + } + /* nl_langinfo items of the LC_NUMERIC category */ + ASSERT (strlen (nl_langinfo (RADIXCHAR)) > 0); + ASSERT (strlen (nl_langinfo (THOUSEP)) >= 0); + /* nl_langinfo items of the LC_TIME category */ + ASSERT (strlen (nl_langinfo (D_T_FMT)) > 0); + ASSERT (strlen (nl_langinfo (D_FMT)) > 0); + ASSERT (strlen (nl_langinfo (T_FMT)) > 0); + ASSERT (strlen (nl_langinfo (T_FMT_AMPM)) >= (pass == 0 ? 1 : 0)); + ASSERT (strlen (nl_langinfo (AM_STR)) >= (pass == 0 ? 1 : 0)); + ASSERT (strlen (nl_langinfo (PM_STR)) >= (pass == 0 ? 1 : 0)); + ASSERT (strlen (nl_langinfo (DAY_1)) > 0); + ASSERT (strlen (nl_langinfo (DAY_2)) > 0); + ASSERT (strlen (nl_langinfo (DAY_3)) > 0); + ASSERT (strlen (nl_langinfo (DAY_4)) > 0); + ASSERT (strlen (nl_langinfo (DAY_5)) > 0); + ASSERT (strlen (nl_langinfo (DAY_6)) > 0); + ASSERT (strlen (nl_langinfo (DAY_7)) > 0); + ASSERT (strlen (nl_langinfo (ABDAY_1)) > 0); + ASSERT (strlen (nl_langinfo (ABDAY_2)) > 0); + ASSERT (strlen (nl_langinfo (ABDAY_3)) > 0); + ASSERT (strlen (nl_langinfo (ABDAY_4)) > 0); + ASSERT (strlen (nl_langinfo (ABDAY_5)) > 0); + ASSERT (strlen (nl_langinfo (ABDAY_6)) > 0); + ASSERT (strlen (nl_langinfo (ABDAY_7)) > 0); + ASSERT (strlen (nl_langinfo (MON_1)) > 0); + ASSERT (strlen (nl_langinfo (MON_2)) > 0); + ASSERT (strlen (nl_langinfo (MON_3)) > 0); + ASSERT (strlen (nl_langinfo (MON_4)) > 0); + ASSERT (strlen (nl_langinfo (MON_5)) > 0); + ASSERT (strlen (nl_langinfo (MON_6)) > 0); + ASSERT (strlen (nl_langinfo (MON_7)) > 0); + ASSERT (strlen (nl_langinfo (MON_8)) > 0); + ASSERT (strlen (nl_langinfo (MON_9)) > 0); + ASSERT (strlen (nl_langinfo (MON_10)) > 0); + ASSERT (strlen (nl_langinfo (MON_11)) > 0); + ASSERT (strlen (nl_langinfo (MON_12)) > 0); + ASSERT (strlen (nl_langinfo (ABMON_1)) > 0); + ASSERT (strlen (nl_langinfo (ABMON_2)) > 0); + ASSERT (strlen (nl_langinfo (ABMON_3)) > 0); + ASSERT (strlen (nl_langinfo (ABMON_4)) > 0); + ASSERT (strlen (nl_langinfo (ABMON_5)) > 0); + ASSERT (strlen (nl_langinfo (ABMON_6)) > 0); + ASSERT (strlen (nl_langinfo (ABMON_7)) > 0); + ASSERT (strlen (nl_langinfo (ABMON_8)) > 0); + ASSERT (strlen (nl_langinfo (ABMON_9)) > 0); + ASSERT (strlen (nl_langinfo (ABMON_10)) > 0); + ASSERT (strlen (nl_langinfo (ABMON_11)) > 0); + ASSERT (strlen (nl_langinfo (ABMON_12)) > 0); + ASSERT (strlen (nl_langinfo (ERA)) >= 0); + ASSERT (strlen (nl_langinfo (ERA_D_FMT)) >= 0); + ASSERT (strlen (nl_langinfo (ERA_D_T_FMT)) >= 0); + ASSERT (strlen (nl_langinfo (ERA_T_FMT)) >= 0); + ASSERT (nl_langinfo (ALT_DIGITS) != NULL); + /* nl_langinfo items of the LC_MONETARY category */ + { + const char *currency = nl_langinfo (CRNCYSTR); + ASSERT (strlen (currency) >= (pass > 0 ? 1 : 0)); + } + /* nl_langinfo items of the LC_MESSAGES category */ + ASSERT (strlen (nl_langinfo (YESEXPR)) > 0); + ASSERT (strlen (nl_langinfo (NOEXPR)) > 0); + + return 0; +} diff --git a/gnulib-tests/test-nl_langinfo.sh b/gnulib-tests/test-nl_langinfo.sh new file mode 100755 index 0000000..3168f42 --- /dev/null +++ b/gnulib-tests/test-nl_langinfo.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +LC_ALL=C ./test-nl_langinfo${EXEEXT} 0 || exit 1 + +# Test whether a specific traditional locale is installed. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR ./test-nl_langinfo${EXEEXT} 1 || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 ./test-nl_langinfo${EXEEXT} 2 || exit 1 +fi + +exit 0 diff --git a/gnulib-tests/test-open.c b/gnulib-tests/test-open.c new file mode 100644 index 0000000..492bdca --- /dev/null +++ b/gnulib-tests/test-open.c @@ -0,0 +1,43 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of opening a file descriptor. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <fcntl.h> + +#include "signature.h" +SIGNATURE_CHECK (open, int, (char const *, int, ...)); + +#include <errno.h> +#include <stdbool.h> +#include <stdio.h> +#include <unistd.h> + +#include "macros.h" + +#define BASE "test-open.t" + +#include "test-open.h" + +int +main (void) +{ + return test_open (open, true); +} diff --git a/gnulib-tests/test-open.h b/gnulib-tests/test-open.h new file mode 100644 index 0000000..bb18471 --- /dev/null +++ b/gnulib-tests/test-open.h @@ -0,0 +1,89 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of opening a file descriptor. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +/* This file is designed to test both open(n,buf[,mode]) and + openat(AT_FDCWD,n,buf[,mode]). FUNC is the function to test. + Assumes that BASE and ASSERT are already defined, and that + appropriate headers are already included. If PRINT, warn before + skipping symlink tests with status 77. */ + +static int +test_open (int (*func) (char const *, int, ...), bool print) +{ + int fd; + /* Remove anything from prior partial run. */ + unlink (BASE "file"); + + /* Cannot create directory. */ + errno = 0; + ASSERT (func ("nonexist.ent/", O_CREAT | O_RDONLY, 0600) == -1); + ASSERT (errno == ENOTDIR || errno == EISDIR || errno == ENOENT + || errno == EINVAL); + + /* Create a regular file. */ + fd = func (BASE "file", O_CREAT | O_RDONLY, 0600); + ASSERT (0 <= fd); + ASSERT (close (fd) == 0); + + /* Trailing slash handling. */ + errno = 0; + ASSERT (func (BASE "file/", O_RDONLY) == -1); + ASSERT (errno == ENOTDIR || errno == EISDIR || errno == EINVAL); + + /* Directories cannot be opened for writing. */ + errno = 0; + ASSERT (func (".", O_WRONLY) == -1); + ASSERT (errno == EISDIR || errno == EACCES); + + /* /dev/null must exist, and be writable. */ + fd = func ("/dev/null", O_RDONLY); + ASSERT (0 <= fd); + { + char c; + ASSERT (read (fd, &c, 1) == 0); + } + ASSERT (close (fd) == 0); + fd = func ("/dev/null", O_WRONLY); + ASSERT (0 <= fd); + ASSERT (write (fd, "c", 1) == 1); + ASSERT (close (fd) == 0); + + /* Symlink handling, where supported. */ + if (symlink (BASE "file", BASE "link") != 0) + { + ASSERT (unlink (BASE "file") == 0); + if (print) + fputs ("skipping test: symlinks not supported on this file system\n", + stderr); + return 77; + } + errno = 0; + ASSERT (func (BASE "link/", O_RDONLY) == -1); + ASSERT (errno == ENOTDIR); + fd = func (BASE "link", O_RDONLY); + ASSERT (0 <= fd); + ASSERT (close (fd) == 0); + + /* Cleanup. */ + ASSERT (unlink (BASE "file") == 0); + ASSERT (unlink (BASE "link") == 0); + + return 0; +} diff --git a/gnulib-tests/test-quotearg.c b/gnulib-tests/test-quotearg.c new file mode 100644 index 0000000..edc2570 --- /dev/null +++ b/gnulib-tests/test-quotearg.c @@ -0,0 +1,473 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of quotearg family of functions. + Copyright (C) 2008-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2008. */ + +#include <config.h> + +#include "quotearg.h" + +#include <ctype.h> +#include <locale.h> +#include <stdbool.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> + +#include "progname.h" +#include "gettext.h" +#include "macros.h" + +struct result_strings { + char const *str1; /* Translation of "". */ + char const *str2; /* Translation of "\0""1\0". */ + size_t len2; /* Length of str2. */ + char const *str3; /* Translation of "simple". */ + char const *str4; /* Translation of " \t\n'\"\033?""?/\\". */ + char const *str5; /* Translation of "a:b". */ + char const *str6; /* Translation of "a\\b". */ + char const *str7a; /* Translation of LQ RQ, in ASCII charset. */ + char const *str7b; /* Translation of LQ RQ, in Latin1 or UTF-8 charset. */ +}; + +struct result_groups { + struct result_strings group1; /* Via quotearg_buffer. */ + struct result_strings group2; /* Via quotearg{,_mem}. */ + struct result_strings group3; /* Via quotearg_colon{,_mem}. */ +}; + +/* These quotes are borrowed from a pt_PT.utf8 translation. */ +# define LQ "\302\253" +# define RQ "\302\273" +# define LQ_ENC "\\302\\253" +# define RQ_ENC "\\302\\273" +# define RQ_ESC "\\\302\273" + +static struct result_strings inputs = { + "", "\0001\0", 3, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", + LQ RQ, NULL +}; + +static struct result_groups results_g[] = { + /* literal_quoting_style */ + { { "", "\0""1\0", 3, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", + LQ RQ, LQ RQ }, + { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", + LQ RQ, LQ RQ }, + { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", + LQ RQ, LQ RQ } }, + + /* shell_quoting_style */ + { { "''", "\0""1\0", 3, "simple", "' \t\n'\\''\"\033?""?/\\'", "a:b", + "'a\\b'", LQ RQ, LQ RQ }, + { "''", "1", 1, "simple", "' \t\n'\\''\"\033?""?/\\'", "a:b", + "'a\\b'", LQ RQ, LQ RQ }, + { "''", "1", 1, "simple", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", + "'a\\b'", LQ RQ, LQ RQ } }, + + /* shell_always_quoting_style */ + { { "''", "'\0""1\0'", 5, "'simple'", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", + "'a\\b'", "'" LQ RQ "'", "'" LQ RQ "'" }, + { "''", "'1'", 3, "'simple'", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", + "'a\\b'", "'" LQ RQ "'", "'" LQ RQ "'" }, + { "''", "'1'", 3, "'simple'", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", + "'a\\b'", "'" LQ RQ "'", "'" LQ RQ "'" } }, + + /* c_quoting_style */ + { { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", + "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, + { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", + "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, + { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a\\:b\"", "\"a\\\\b\"", + "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" } }, + + /* c_maybe_quoting_style */ + { { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", + "a:b", "a\\b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ }, + { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", + "a:b", "a\\b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ }, + { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", + "\"a:b\"", "a\\b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ } }, + + /* escape_quoting_style */ + { { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a:b", + "a\\\\b", LQ_ENC RQ_ENC, LQ RQ }, + { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a:b", + "a\\\\b", LQ_ENC RQ_ENC, LQ RQ }, + { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a\\:b", + "a\\\\b", LQ_ENC RQ_ENC, LQ RQ } }, + + /* locale_quoting_style */ + { { "`'", "`\\0001\\0'", 9, "`simple'", "` \\t\\n\\'\"\\033?""?/\\\\'", + "`a:b'", "`a\\\\b'", "`" LQ_ENC RQ_ENC "'", "`" LQ RQ "'" }, + { "`'", "`\\0001\\0'", 9, "`simple'", "` \\t\\n\\'\"\\033?""?/\\\\'", + "`a:b'", "`a\\\\b'", "`" LQ_ENC RQ_ENC "'", "`" LQ RQ "'" }, + { "`'", "`\\0001\\0'", 9, "`simple'", "` \\t\\n\\'\"\\033?""?/\\\\'", + "`a\\:b'", "`a\\\\b'", "`" LQ_ENC RQ_ENC "'", "`" LQ RQ "'" } }, + + /* clocale_quoting_style */ + { { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", + "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, + { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", + "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, + { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a\\:b\"", "\"a\\\\b\"", + "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" } } +}; + +static struct result_groups flag_results[] = { + /* literal_quoting_style and QA_ELIDE_NULL_BYTES */ + { { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", LQ RQ, + LQ RQ }, + { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", LQ RQ, + LQ RQ }, + { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", LQ RQ, + LQ RQ } }, + + /* c_quoting_style and QA_ELIDE_OUTER_QUOTES */ + { { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", + "a:b", "a\\b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ }, + { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", + "a:b", "a\\b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ }, + { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", + "\"a:b\"", "a\\b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ } }, + + /* c_quoting_style and QA_SPLIT_TRIGRAPHS */ + { { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?\"\"?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", + "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, + { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?\"\"?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", + "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, + { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?\"\"?/\\\\\"", "\"a\\:b\"", "\"a\\\\b\"", + "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" } } +}; + +#if ENABLE_NLS + +static struct result_groups locale_results[] = { + /* locale_quoting_style */ + { { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, + LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a:b" RQ, LQ "a\\\\b" RQ, + LQ LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ }, + { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, + LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a:b" RQ, LQ "a\\\\b" RQ, + LQ LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ}, + { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, + LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a\\:b" RQ, LQ "a\\\\b" RQ, + LQ LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ } }, + + /* clocale_quoting_style */ + { { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, + LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a:b" RQ, LQ "a\\\\b" RQ, + LQ LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ }, + { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, + LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a:b" RQ, LQ "a\\\\b" RQ, + LQ LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ }, + { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, + LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a\\:b" RQ, LQ "a\\\\b" RQ, + LQ LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ } } +}; + +#endif /* ENABLE_NLS */ + +static char const *custom_quotes[][2] = { + { "", "" }, + { "'", "'" }, + { "(", ")" }, + { ":", " " }, + { " ", ":" }, + { "# ", "\n" }, + { "\"'", "'\"" } +}; + +static struct result_groups custom_results[] = { + /* left_quote = right_quote = "" */ + { { "", "\\0001\\0", 7, "simple", + " \\t\\n'\"\\033?""?/\\\\", "a:b", "a\\\\b", + LQ_ENC RQ_ENC, LQ RQ }, + { "", "\\0001\\0", 7, "simple", + " \\t\\n'\"\\033?""?/\\\\", "a:b", "a\\\\b", + LQ_ENC RQ_ENC, LQ RQ }, + { "", "\\0001\\0", 7, "simple", + " \\t\\n'\"\\033?""?/\\\\", "a\\:b", "a\\\\b", + LQ_ENC RQ_ENC, LQ RQ } }, + + /* left_quote = right_quote = "'" */ + { { "''", "'\\0001\\0'", 9, "'simple'", + "' \\t\\n\\'\"\\033?""?/\\\\'", "'a:b'", "'a\\\\b'", + "'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" }, + { "''", "'\\0001\\0'", 9, "'simple'", + "' \\t\\n\\'\"\\033?""?/\\\\'", "'a:b'", "'a\\\\b'", + "'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" }, + { "''", "'\\0001\\0'", 9, "'simple'", + "' \\t\\n\\'\"\\033?""?/\\\\'", "'a\\:b'", "'a\\\\b'", + "'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" } }, + + /* left_quote = "(" and right_quote = ")" */ + { { "()", "(\\0001\\0)", 9, "(simple)", + "( \\t\\n'\"\\033?""?/\\\\)", "(a:b)", "(a\\\\b)", + "(" LQ_ENC RQ_ENC ")", "(" LQ RQ ")" }, + { "()", "(\\0001\\0)", 9, "(simple)", + "( \\t\\n'\"\\033?""?/\\\\)", "(a:b)", "(a\\\\b)", + "(" LQ_ENC RQ_ENC ")", "(" LQ RQ ")" }, + { "()", "(\\0001\\0)", 9, "(simple)", + "( \\t\\n'\"\\033?""?/\\\\)", "(a\\:b)", "(a\\\\b)", + "(" LQ_ENC RQ_ENC ")", "(" LQ RQ ")" } }, + + /* left_quote = ":" and right_quote = " " */ + { { ": ", ":\\0001\\0 ", 9, ":simple ", + ":\\ \\t\\n'\"\\033?""?/\\\\ ", ":a:b ", ":a\\\\b ", + ":" LQ_ENC RQ_ENC " ", ":" LQ RQ " " }, + { ": ", ":\\0001\\0 ", 9, ":simple ", + ":\\ \\t\\n'\"\\033?""?/\\\\ ", ":a:b ", ":a\\\\b ", + ":" LQ_ENC RQ_ENC " ", ":" LQ RQ " " }, + { ": ", ":\\0001\\0 ", 9, ":simple ", + ":\\ \\t\\n'\"\\033?""?/\\\\ ", ":a\\:b ", ":a\\\\b ", + ":" LQ_ENC RQ_ENC " ", ":" LQ RQ " " } }, + + /* left_quote = " " and right_quote = ":" */ + { { " :", " \\0001\\0:", 9, " simple:", + " \\t\\n'\"\\033?""?/\\\\:", " a\\:b:", " a\\\\b:", + " " LQ_ENC RQ_ENC ":", " " LQ RQ ":" }, + { " :", " \\0001\\0:", 9, " simple:", + " \\t\\n'\"\\033?""?/\\\\:", " a\\:b:", " a\\\\b:", + " " LQ_ENC RQ_ENC ":", " " LQ RQ ":" }, + { " :", " \\0001\\0:", 9, " simple:", + " \\t\\n'\"\\033?""?/\\\\:", " a\\:b:", " a\\\\b:", + " " LQ_ENC RQ_ENC ":", " " LQ RQ ":" } }, + + /* left_quote = "# " and right_quote = "\n" */ + { { "# \n", "# \\0001\\0\n", 10, "# simple\n", + "# \\t\\n'\"\\033?""?/\\\\\n", "# a:b\n", "# a\\\\b\n", + "# " LQ_ENC RQ_ENC "\n", "# " LQ RQ "\n" }, + { "# \n", "# \\0001\\0\n", 10, "# simple\n", + "# \\t\\n'\"\\033?""?/\\\\\n", "# a:b\n", "# a\\\\b\n", + "# " LQ_ENC RQ_ENC "\n", "# " LQ RQ "\n" }, + { "# \n", "# \\0001\\0\n", 10, "# simple\n", + "# \\t\\n'\"\\033?""?/\\\\\n", "# a\\:b\n", "# a\\\\b\n", + "# " LQ_ENC RQ_ENC "\n", "# " LQ RQ "\n" } }, + + /* left_quote = "\"'" and right_quote = "'\"" */ + { { "\"''\"", "\"'\\0001\\0'\"", 11, "\"'simple'\"", + "\"' \\t\\n\\'\"\\033?""?/\\\\'\"", "\"'a:b'\"", "\"'a\\\\b'\"", + "\"'" LQ_ENC RQ_ENC "'\"", "\"'" LQ RQ "'\"" }, + { "\"''\"", "\"'\\0001\\0'\"", 11, "\"'simple'\"", + "\"' \\t\\n\\'\"\\033?""?/\\\\'\"", "\"'a:b'\"", "\"'a\\\\b'\"", + "\"'" LQ_ENC RQ_ENC "'\"", "\"'" LQ RQ "'\"" }, + { "\"''\"", "\"'\\0001\\0'\"", 11, "\"'simple'\"", + "\"' \\t\\n\\'\"\\033?""?/\\\\'\"", "\"'a\\:b'\"", "\"'a\\\\b'\"", + "\"'" LQ_ENC RQ_ENC "'\"", "\"'" LQ RQ "'\"" } } +}; + +static void +compare (char const *a, size_t la, char const *b, size_t lb) +{ + ASSERT (la == lb); + ASSERT (memcmp (a, b, la) == 0); + ASSERT (b[lb] == '\0'); +} + +static void +compare_strings (char *(func) (char const *, size_t *), + struct result_strings *results, bool ascii_only) +{ + size_t len; + char *p; + + len = 0; + p = func (inputs.str1, &len); + compare (results->str1, strlen (results->str1), p, len); + + len = inputs.len2; + p = func (inputs.str2, &len); + compare (results->str2, results->len2, p, len); + + len = SIZE_MAX; + p = func (inputs.str3, &len); + compare (results->str3, strlen (results->str3), p, len); + + len = strlen (inputs.str4); + p = func (inputs.str4, &len); + compare (results->str4, strlen (results->str4), p, len); + + len = SIZE_MAX; + p = func (inputs.str5, &len); + compare (results->str5, strlen (results->str5), p, len); + + len = strlen (inputs.str6); + p = func (inputs.str6, &len); + compare (results->str6, strlen (results->str6), p, len); + + len = strlen (inputs.str7a); + p = func (inputs.str7a, &len); + if (ascii_only) + compare (results->str7a, strlen (results->str7a), p, len); + else + compare (results->str7b, strlen (results->str7b), p, len); +} + +static char * +use_quotearg_buffer (const char *str, size_t *len) +{ + static char buf[100]; + size_t size; + memset (buf, 0xa5, 100); + size = quotearg_buffer (buf, 100, str, *len, NULL); + *len = size; + ASSERT ((unsigned char) buf[size + 1] == 0xa5); + return buf; +} + +static char * +use_quotearg (const char *str, size_t *len) +{ + char *p = *len == SIZE_MAX ? quotearg (str) : quotearg_mem (str, *len); + *len = strlen (p); + return p; +} + +static char * +use_quote_double_quotes (const char *str, size_t *len) +{ + char *p = *len == SIZE_MAX ? quotearg_char (str, '"') + : quotearg_char_mem (str, *len, '"'); + *len = strlen (p); + return p; +} + +static char * +use_quotearg_colon (const char *str, size_t *len) +{ + char *p = (*len == SIZE_MAX ? quotearg_colon (str) + : quotearg_colon_mem (str, *len)); + *len = strlen (p); + return p; +} + +int +main (int argc _GL_UNUSED, char *argv[]) +{ + int i; + bool ascii_only = MB_CUR_MAX == 1 && !isprint ((unsigned char) LQ[0]); + + set_program_name (argv[0]); + + /* This part of the program is hard-wired to the C locale since it + does not call setlocale. However, according to POSIX, the use of + 8-bit bytes in a character context in the C locale gives + unspecified results (that is, the C locale charset is allowed to + be unibyte with 8-bit bytes rejected [ASCII], unibyte with 8-bit + bytes being characters [often ISO-8859-1], or multibyte [often + UTF-8]). We assume that the latter two cases will be + indistinguishable in this test - that is, the LQ and RQ sequences + will pass through unchanged in either type of charset. So when + testing for quoting of str7, use the ascii_only flag to decide + what to expect for the 8-bit data being quoted. */ + ASSERT (!isprint ('\033')); + for (i = literal_quoting_style; i <= clocale_quoting_style; i++) + { + set_quoting_style (NULL, i); + compare_strings (use_quotearg_buffer, &results_g[i].group1, ascii_only); + compare_strings (use_quotearg, &results_g[i].group2, ascii_only); + if (i == c_quoting_style) + compare_strings (use_quote_double_quotes, &results_g[i].group2, + ascii_only); + compare_strings (use_quotearg_colon, &results_g[i].group3, ascii_only); + } + + set_quoting_style (NULL, literal_quoting_style); + ASSERT (set_quoting_flags (NULL, QA_ELIDE_NULL_BYTES) == 0); + compare_strings (use_quotearg_buffer, &flag_results[0].group1, ascii_only); + compare_strings (use_quotearg, &flag_results[0].group2, ascii_only); + compare_strings (use_quotearg_colon, &flag_results[0].group3, ascii_only); + + set_quoting_style (NULL, c_quoting_style); + ASSERT (set_quoting_flags (NULL, QA_ELIDE_OUTER_QUOTES) + == QA_ELIDE_NULL_BYTES); + compare_strings (use_quotearg_buffer, &flag_results[1].group1, ascii_only); + compare_strings (use_quotearg, &flag_results[1].group2, ascii_only); + compare_strings (use_quote_double_quotes, &flag_results[1].group2, + ascii_only); + compare_strings (use_quotearg_colon, &flag_results[1].group3, ascii_only); + + ASSERT (set_quoting_flags (NULL, QA_SPLIT_TRIGRAPHS) + == QA_ELIDE_OUTER_QUOTES); + compare_strings (use_quotearg_buffer, &flag_results[2].group1, ascii_only); + compare_strings (use_quotearg, &flag_results[2].group2, ascii_only); + compare_strings (use_quote_double_quotes, &flag_results[2].group2, + ascii_only); + compare_strings (use_quotearg_colon, &flag_results[2].group3, ascii_only); + + ASSERT (set_quoting_flags (NULL, 0) == QA_SPLIT_TRIGRAPHS); + + for (i = 0; i < sizeof custom_quotes / sizeof *custom_quotes; ++i) + { + set_custom_quoting (NULL, + custom_quotes[i][0], custom_quotes[i][1]); + compare_strings (use_quotearg_buffer, &custom_results[i].group1, + ascii_only); + compare_strings (use_quotearg, &custom_results[i].group2, ascii_only); + compare_strings (use_quotearg_colon, &custom_results[i].group3, + ascii_only); + } + +#if ENABLE_NLS + /* Clean up environment. */ + unsetenv ("LANGUAGE"); + unsetenv ("LC_ALL"); + unsetenv ("LC_MESSAGES"); + unsetenv ("LC_CTYPE"); + unsetenv ("LANG"); + unsetenv ("OUTPUT_CHARSET"); + + /* This program part runs in a French UTF-8 locale. It uses + the test-quotearg.mo message catalog. */ + { + const char *locale_name = getenv ("LOCALE"); + + if (locale_name != NULL && strcmp (locale_name, "none") != 0 + && setenv ("LC_ALL", locale_name, 1) == 0 + && setlocale (LC_ALL, "") != NULL) + { + textdomain ("test-quotearg"); + bindtextdomain ("test-quotearg", getenv ("LOCALEDIR")); + + set_quoting_style (NULL, locale_quoting_style); + compare_strings (use_quotearg_buffer, &locale_results[0].group1, false); + compare_strings (use_quotearg, &locale_results[0].group2, false); + compare_strings (use_quotearg_colon, &locale_results[0].group3, false); + + set_quoting_style (NULL, clocale_quoting_style); + compare_strings (use_quotearg_buffer, &locale_results[1].group1, false); + compare_strings (use_quotearg, &locale_results[1].group2, false); + compare_strings (use_quotearg_colon, &locale_results[1].group3, false); + } + } +#endif /* ENABLE_NLS */ + + quotearg_free (); + return 0; +} diff --git a/gnulib-tests/test-quotearg.sh b/gnulib-tests/test-quotearg.sh new file mode 100755 index 0000000..e050d07 --- /dev/null +++ b/gnulib-tests/test-quotearg.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# Choose an existing locale. The locale encoding does not matter; see the +# comment in test-quotearg.po. +if test $LOCALE_FR_UTF8 != none; then + locale=$LOCALE_FR_UTF8 +else + if test $LOCALE_FR != none; then + locale=$LOCALE_FR + else + locale=none + fi +fi + +LOCALE=$locale LOCALEDIR="$srcdir/locale" \ +./test-quotearg${EXEEXT} diff --git a/gnulib-tests/test-setenv.c b/gnulib-tests/test-setenv.c new file mode 100644 index 0000000..39b256d --- /dev/null +++ b/gnulib-tests/test-setenv.c @@ -0,0 +1,58 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Tests of setenv. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +#include <config.h> + +#include <stdlib.h> + +#include "signature.h" +SIGNATURE_CHECK (setenv, int, (char const *, char const *, int)); + +#include <errno.h> +#include <string.h> +#include <unistd.h> + +#include "macros.h" + +int +main (void) +{ + /* Test overwriting. */ + ASSERT (setenv ("a", "==", -1) == 0); + ASSERT (setenv ("a", "2", 0) == 0); + ASSERT (strcmp (getenv ("a"), "==") == 0); + + /* Required to fail with EINVAL. */ + errno = 0; + ASSERT (setenv ("", "", 1) == -1); + ASSERT (errno == EINVAL); + errno = 0; + ASSERT (setenv ("a=b", "", 0) == -1); + ASSERT (errno == EINVAL); +#if 0 + /* glibc and gnulib's implementation guarantee this, but POSIX no + longer requires it: http://austingroupbugs.net/view.php?id=185 */ + errno = 0; + ASSERT (setenv (NULL, "", 0) == -1); + ASSERT (errno == EINVAL); +#endif + + return 0; +} diff --git a/gnulib-tests/test-sigaction.c b/gnulib-tests/test-sigaction.c new file mode 100644 index 0000000..f5f5dc9 --- /dev/null +++ b/gnulib-tests/test-sigaction.c @@ -0,0 +1,118 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of sigaction() function. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2008. */ + +#include <config.h> + +#include <signal.h> + +#include "signature.h" +SIGNATURE_CHECK (sigaction, int, (int, struct sigaction const *, + struct sigaction *)); + +#include <stddef.h> + +#include "macros.h" + +#ifndef SA_NOCLDSTOP +# define SA_NOCLDSTOP 0 +#endif +#ifndef SA_ONSTACK +# define SA_ONSTACK 0 +#endif +#ifndef SA_SIGINFO +# define SA_SIGINFO 0 +#endif +#ifndef SA_NOCLDWAIT +# define SA_NOCLDWAIT 0 +#endif + +/* Define a mask of flags required by POSIX. Some implementations + provide other flags as extensions, such as SA_RESTORER, that we + must ignore in this test. */ +#define MASK_SA_FLAGS (SA_NOCLDSTOP | SA_ONSTACK | SA_RESETHAND | SA_RESTART \ + | SA_SIGINFO | SA_NOCLDWAIT | SA_NODEFER) + +/* This test is unsafe in the presence of an asynchronous SIGABRT, + because we install a signal-handler that is intentionally not + async-safe. Hopefully, this does not lead to too many reports of + false failures, since people don't generally use 'kill -s SIGABRT' + to end a runaway program. */ + +static void +handler (int sig) +{ + static int entry_count; + struct sigaction sa; + ASSERT (sig == SIGABRT); + ASSERT (sigaction (SIGABRT, NULL, &sa) == 0); + ASSERT ((sa.sa_flags & SA_SIGINFO) == 0); + switch (entry_count++) + { + case 0: + ASSERT ((sa.sa_flags & SA_RESETHAND) == 0); + ASSERT (sa.sa_handler == handler); + break; + case 1: + /* This assertion fails on glibc-2.3.6 systems with LinuxThreads, + when this program is linked with -lpthread, due to the sigaction() + override in libpthread.so. */ +#if !defined __GLIBC__ + ASSERT (sa.sa_handler == SIG_DFL); +#endif + break; + default: + ASSERT (0); + } +} + +int +main (void) +{ + struct sigaction sa; + struct sigaction old_sa; + sa.sa_handler = handler; + + sa.sa_flags = 0; + ASSERT (sigemptyset (&sa.sa_mask) == 0); + ASSERT (sigaction (SIGABRT, &sa, NULL) == 0); + ASSERT (raise (SIGABRT) == 0); + + sa.sa_flags = SA_RESETHAND | SA_NODEFER; + ASSERT (sigaction (SIGABRT, &sa, &old_sa) == 0); + ASSERT ((old_sa.sa_flags & MASK_SA_FLAGS) == 0); + ASSERT (old_sa.sa_handler == handler); + ASSERT (raise (SIGABRT) == 0); + + sa.sa_handler = SIG_DFL; + ASSERT (sigaction (SIGABRT, &sa, &old_sa) == 0); + ASSERT ((old_sa.sa_flags & SA_SIGINFO) == 0); +#if !defined __GLIBC__ /* see above */ + ASSERT (old_sa.sa_handler == SIG_DFL); +#endif + + sa.sa_handler = SIG_IGN; + ASSERT (sigaction (SIGABRT, &sa, NULL) == 0); + ASSERT (raise (SIGABRT) == 0); + ASSERT (sigaction (SIGABRT, NULL, &old_sa) == 0); + ASSERT (old_sa.sa_handler == SIG_IGN); + ASSERT (raise (SIGABRT) == 0); + + return 0; +} diff --git a/gnulib-tests/test-signal.c b/gnulib-tests/test-signal.c new file mode 100644 index 0000000..7b99721 --- /dev/null +++ b/gnulib-tests/test-signal.c @@ -0,0 +1,127 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <signal.h> substitute. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +#include <config.h> + +#include <signal.h> + +/* Check for required types. */ +struct +{ + size_t a; + uid_t b; + volatile sig_atomic_t c; + sigset_t d; + pid_t e; +#if 0 + /* Not guaranteed by gnulib. */ + pthread_t f; + struct timespec g; +#endif +} s; + +int +main (void) +{ + switch (0) + { + /* The following are guaranteed by C. */ + case 0: + case SIGABRT: + case SIGFPE: + case SIGILL: + case SIGINT: + case SIGSEGV: + case SIGTERM: + /* The following is guaranteed by gnulib. */ +#if GNULIB_SIGPIPE || defined SIGPIPE + case SIGPIPE: +#endif + /* Ensure no conflict with other standardized names. */ +#ifdef SIGALRM + case SIGALRM: +#endif +#ifdef SIGBUS + case SIGBUS: +#endif +#ifdef SIGCHLD + case SIGCHLD: +#endif +#ifdef SIGCONT + case SIGCONT: +#endif +#ifdef SIGHUP + case SIGHUP: +#endif +#ifdef SIGKILL + case SIGKILL: +#endif +#ifdef SIGQUIT + case SIGQUIT: +#endif +#ifdef SIGSTOP + case SIGSTOP: +#endif +#ifdef SIGTSTP + case SIGTSTP: +#endif +#ifdef SIGTTIN + case SIGTTIN: +#endif +#ifdef SIGTTOU + case SIGTTOU: +#endif +#ifdef SIGUSR1 + case SIGUSR1: +#endif +#ifdef SIGUSR2 + case SIGUSR2: +#endif +#ifdef SIGSYS + case SIGSYS: +#endif +#ifdef SIGTRAP + case SIGTRAP: +#endif +#ifdef SIGURG + case SIGURG: +#endif +#ifdef SIGVTALRM + case SIGVTALRM: +#endif +#ifdef SIGXCPU + case SIGXCPU: +#endif +#ifdef SIGXFSZ + case SIGXFSZ: +#endif + /* SIGRTMIN and SIGRTMAX need not be compile-time constants. */ +#if 0 +# ifdef SIGRTMIN + case SIGRTMIN: +# endif +# ifdef SIGRTMAX + case SIGRTMAX: +# endif +#endif + ; + } + return s.a + s.b + s.c + s.e; +} diff --git a/gnulib-tests/test-sleep.c b/gnulib-tests/test-sleep.c new file mode 100644 index 0000000..c96522c --- /dev/null +++ b/gnulib-tests/test-sleep.c @@ -0,0 +1,60 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of sleep() function. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <unistd.h> + +#include "signature.h" +SIGNATURE_CHECK (sleep, unsigned int, (unsigned int)); + +#include <signal.h> + +#include "macros.h" + +#if HAVE_DECL_ALARM +static void +handle_alarm (int sig) +{ + if (sig != SIGALRM) + _exit (1); +} +#endif + +int +main (void) +{ + ASSERT (sleep (1) <= 1); + + ASSERT (sleep (0) == 0); + +#if HAVE_DECL_ALARM + { + const unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ + unsigned int remaining; + signal (SIGALRM, handle_alarm); + alarm (1); + remaining = sleep (pentecost); + ASSERT (pentecost - 10 < remaining && remaining <= pentecost); + } +#endif + + return 0; +} diff --git a/gnulib-tests/test-stat-time.c b/gnulib-tests/test-stat-time.c new file mode 100644 index 0000000..11397d6 --- /dev/null +++ b/gnulib-tests/test-stat-time.c @@ -0,0 +1,265 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <stat-time.h>. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by James Youngman <jay@gnu.org>, 2007. */ + +#include <config.h> + +#include "stat-time.h" + +#include <fcntl.h> +#include <signal.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "macros.h" + +enum { NFILES = 4 }; + +static int +force_unlink (const char *filename) +{ + /* This chmod is necessary on mingw, where unlink() of a read-only file + fails with EPERM. */ + chmod (filename, 0600); + return unlink (filename); +} + +static void +cleanup (int sig) +{ + /* Remove temporary files. */ + force_unlink ("t-stt-stamp1"); + force_unlink ("t-stt-testfile"); + force_unlink ("t-stt-stamp2"); + force_unlink ("t-stt-renamed"); + force_unlink ("t-stt-stamp3"); + + if (sig != 0) + _exit (1); +} + +static int +open_file (const char *filename, int flags) +{ + int fd = open (filename, flags | O_WRONLY, 0500); + if (fd >= 0) + { + close (fd); + return 1; + } + else + { + return 0; + } +} + +static void +create_file (const char *filename) +{ + ASSERT (open_file (filename, O_CREAT | O_EXCL)); +} + +static void +do_stat (const char *filename, struct stat *p) +{ + ASSERT (stat (filename, p) == 0); +} + +/* Sleep long enough to notice a timestamp difference on the file + system in the current directory. */ +static void +nap (void) +{ + static long delay; + if (!delay) + { + /* Initialize only once, by sleeping for 20 milliseconds (needed + since xfs has a quantization of about 10 milliseconds, even + though it has a granularity of 1 nanosecond, and since NTFS + has a default quantization of 15.25 milliseconds, even though + it has a granularity of 100 nanoseconds). If the seconds + differ, repeat the test one more time (in case we crossed a + quantization boundary on a file system with 1 second + resolution). If we can't observe a difference in only the + nanoseconds, then fall back to 1 second if the time is odd, + and 2 seconds (needed for FAT) if time is even. */ + struct stat st1; + struct stat st2; + ASSERT (stat ("t-stt-stamp1", &st1) == 0); + ASSERT (force_unlink ("t-stt-stamp1") == 0); + delay = 20000; + usleep (delay); + create_file ("t-stt-stamp1"); + ASSERT (stat ("t-stt-stamp1", &st2) == 0); + if (st1.st_mtime != st2.st_mtime) + { + /* Seconds differ, give it one more shot. */ + st1 = st2; + ASSERT (force_unlink ("t-stt-stamp1") == 0); + usleep (delay); + create_file ("t-stt-stamp1"); + ASSERT (stat ("t-stt-stamp1", &st2) == 0); + } + if (! (st1.st_mtime == st2.st_mtime + && get_stat_mtime_ns (&st1) < get_stat_mtime_ns (&st2))) + delay = (st1.st_mtime & 1) ? 1000000 : 2000000; + } + usleep (delay); +} + +static void +prepare_test (struct stat *statinfo, struct timespec *modtimes) +{ + int i; + + create_file ("t-stt-stamp1"); + nap (); + create_file ("t-stt-testfile"); + nap (); + create_file ("t-stt-stamp2"); + nap (); + ASSERT (chmod ("t-stt-testfile", 0400) == 0); + nap (); + create_file ("t-stt-stamp3"); + + do_stat ("t-stt-stamp1", &statinfo[0]); + do_stat ("t-stt-testfile", &statinfo[1]); + do_stat ("t-stt-stamp2", &statinfo[2]); + do_stat ("t-stt-stamp3", &statinfo[3]); + + /* Now use our access functions. */ + for (i = 0; i < NFILES; ++i) + { + modtimes[i] = get_stat_mtime (&statinfo[i]); + } +} + +static void +test_mtime (const struct stat *statinfo, struct timespec *modtimes) +{ + int i; + + /* Use the struct stat fields directly. */ + /* mtime(stamp1) < mtime(stamp2) */ + ASSERT (statinfo[0].st_mtime < statinfo[2].st_mtime + || (statinfo[0].st_mtime == statinfo[2].st_mtime + && (get_stat_mtime_ns (&statinfo[0]) + < get_stat_mtime_ns (&statinfo[2])))); + /* mtime(stamp2) < mtime(stamp3) */ + ASSERT (statinfo[2].st_mtime < statinfo[3].st_mtime + || (statinfo[2].st_mtime == statinfo[3].st_mtime + && (get_stat_mtime_ns (&statinfo[2]) + < get_stat_mtime_ns (&statinfo[3])))); + + /* Now check the result of the access functions. */ + /* mtime(stamp1) < mtime(stamp2) */ + ASSERT (modtimes[0].tv_sec < modtimes[2].tv_sec + || (modtimes[0].tv_sec == modtimes[2].tv_sec + && modtimes[0].tv_nsec < modtimes[2].tv_nsec)); + /* mtime(stamp2) < mtime(stamp3) */ + ASSERT (modtimes[2].tv_sec < modtimes[3].tv_sec + || (modtimes[2].tv_sec == modtimes[3].tv_sec + && modtimes[2].tv_nsec < modtimes[3].tv_nsec)); + + /* verify equivalence */ + for (i = 0; i < NFILES; ++i) + { + struct timespec ts; + ts = get_stat_mtime (&statinfo[i]); + ASSERT (ts.tv_sec == statinfo[i].st_mtime); + } +} + +#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ +/* Skip the ctime tests on native Windows platforms, because their + st_ctime is either the same as st_mtime (plus or minus an offset) + or set to the file _creation_ time, and is not influenced by rename + or chmod. */ +# define test_ctime(ignored) ((void) 0) +#else +static void +test_ctime (const struct stat *statinfo) +{ + /* On some buggy NFS clients, mtime and ctime are disproportionately + skewed from one another. Skip this test in that case. */ + if (statinfo[0].st_mtime != statinfo[0].st_ctime) + return; + + /* mtime(stamp2) < ctime(renamed) */ + ASSERT (statinfo[2].st_mtime < statinfo[1].st_ctime + || (statinfo[2].st_mtime == statinfo[1].st_ctime + && (get_stat_mtime_ns (&statinfo[2]) + < get_stat_ctime_ns (&statinfo[1])))); +} +#endif + +static void +test_birthtime (const struct stat *statinfo, + const struct timespec *modtimes, + struct timespec *birthtimes) +{ + int i; + + /* Collect the birth times. */ + for (i = 0; i < NFILES; ++i) + { + birthtimes[i] = get_stat_birthtime (&statinfo[i]); + if (birthtimes[i].tv_nsec < 0) + return; + } + + /* mtime(stamp1) < birthtime(renamed) */ + ASSERT (modtimes[0].tv_sec < birthtimes[1].tv_sec + || (modtimes[0].tv_sec == birthtimes[1].tv_sec + && modtimes[0].tv_nsec < birthtimes[1].tv_nsec)); + /* birthtime(renamed) < mtime(stamp2) */ + ASSERT (birthtimes[1].tv_sec < modtimes[2].tv_sec + || (birthtimes[1].tv_sec == modtimes[2].tv_sec + && birthtimes[1].tv_nsec < modtimes[2].tv_nsec)); +} + +int +main (void) +{ + struct stat statinfo[NFILES]; + struct timespec modtimes[NFILES]; + struct timespec birthtimes[NFILES]; + +#ifdef SIGHUP + signal (SIGHUP, cleanup); +#endif +#ifdef SIGINT + signal (SIGINT, cleanup); +#endif +#ifdef SIGQUIT + signal (SIGQUIT, cleanup); +#endif +#ifdef SIGTERM + signal (SIGTERM, cleanup); +#endif + + cleanup (0); + prepare_test (statinfo, modtimes); + test_mtime (statinfo, modtimes); + test_ctime (statinfo); + test_birthtime (statinfo, modtimes, birthtimes); + + cleanup (0); + return 0; +} diff --git a/gnulib-tests/test-stat.c b/gnulib-tests/test-stat.c new file mode 100644 index 0000000..114bac5 --- /dev/null +++ b/gnulib-tests/test-stat.c @@ -0,0 +1,58 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Tests of stat. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +#include <config.h> + +#include <sys/stat.h> + +/* Caution: stat may be a function-like macro. Although this + signature check must pass, it may be the signature of the real (and + broken) stat rather than rpl_stat. Most code should not use the + address of stat. */ +#include "signature.h" +SIGNATURE_CHECK (stat, int, (char const *, struct stat *)); + +#include <fcntl.h> +#include <errno.h> +#include <stdbool.h> +#include <stdio.h> +#include <unistd.h> + +#include "pathmax.h" +#include "same-inode.h" +#include "macros.h" + +#define BASE "test-stat.t" + +#include "test-stat.h" + +/* Wrapper around stat, which works even if stat is a function-like + macro, where test_stat_func(stat) would do the wrong thing. */ +static int +do_stat (char const *name, struct stat *st) +{ + return stat (name, st); +} + +int +main (void) +{ + return test_stat_func (do_stat, true); +} diff --git a/gnulib-tests/test-stat.h b/gnulib-tests/test-stat.h new file mode 100644 index 0000000..21d8861 --- /dev/null +++ b/gnulib-tests/test-stat.h @@ -0,0 +1,102 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Tests of stat. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +/* This file is designed to test both stat(n,buf) and + fstatat(AT_FDCWD,n,buf,0). FUNC is the function to test. Assumes + that BASE and ASSERT are already defined, and that appropriate + headers are already included. If PRINT, warn before skipping + symlink tests with status 77. */ + +static int +test_stat_func (int (*func) (char const *, struct stat *), bool print) +{ + struct stat st1; + struct stat st2; + char cwd[PATH_MAX]; + + ASSERT (getcwd (cwd, PATH_MAX) == cwd); + ASSERT (func (".", &st1) == 0); + ASSERT (func ("./", &st2) == 0); + ASSERT (SAME_INODE (st1, st2)); + ASSERT (func (cwd, &st2) == 0); + ASSERT (SAME_INODE (st1, st2)); + ASSERT (func ("/", &st1) == 0); + ASSERT (func ("///", &st2) == 0); + ASSERT (SAME_INODE (st1, st2)); + + errno = 0; + ASSERT (func ("", &st1) == -1); + ASSERT (errno == ENOENT); + errno = 0; + ASSERT (func ("nosuch", &st1) == -1); + ASSERT (errno == ENOENT); + errno = 0; + ASSERT (func ("nosuch/", &st1) == -1); + ASSERT (errno == ENOENT); + + ASSERT (close (creat (BASE "file", 0600)) == 0); + ASSERT (func (BASE "file", &st1) == 0); + errno = 0; + ASSERT (func (BASE "file/", &st1) == -1); + ASSERT (errno == ENOTDIR); + + /* Now for some symlink tests, where supported. We set up: + link1 -> directory + link2 -> file + link3 -> dangling + link4 -> loop + then test behavior with trailing slash. + */ + if (symlink (".", BASE "link1") != 0) + { + ASSERT (unlink (BASE "file") == 0); + if (print) + fputs ("skipping test: symlinks not supported on this file system\n", + stderr); + return 77; + } + ASSERT (symlink (BASE "file", BASE "link2") == 0); + ASSERT (symlink (BASE "nosuch", BASE "link3") == 0); + ASSERT (symlink (BASE "link4", BASE "link4") == 0); + + ASSERT (func (BASE "link1/", &st1) == 0); + ASSERT (S_ISDIR (st1.st_mode)); + + errno = 0; + ASSERT (func (BASE "link2/", &st1) == -1); + ASSERT (errno == ENOTDIR); + + errno = 0; + ASSERT (func (BASE "link3/", &st1) == -1); + ASSERT (errno == ENOENT); + + errno = 0; + ASSERT (func (BASE "link4/", &st1) == -1); + ASSERT (errno == ELOOP); + + /* Cleanup. */ + ASSERT (unlink (BASE "file") == 0); + ASSERT (unlink (BASE "link1") == 0); + ASSERT (unlink (BASE "link2") == 0); + ASSERT (unlink (BASE "link3") == 0); + ASSERT (unlink (BASE "link4") == 0); + + return 0; +} diff --git a/gnulib-tests/test-stdbool.c b/gnulib-tests/test-stdbool.c new file mode 100644 index 0000000..33cf41d --- /dev/null +++ b/gnulib-tests/test-stdbool.c @@ -0,0 +1,98 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <stdbool.h> substitute. + Copyright (C) 2002-2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <stdbool.h> + +#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 +#ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" +#endif + +#if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>. */ +struct s { _Bool s: 1; _Bool t; } s; +#endif + +char a[true == 1 ? 1 : -1]; +char b[false == 0 ? 1 : -1]; +char c[__bool_true_false_are_defined == 1 ? 1 : -1]; +#if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>, at least, +not for all compilers. */ +char d[(bool) 0.5 == true ? 1 : -1]; +bool e = &s; +char f[(_Bool) 0.0 == false ? 1 : -1]; +#endif +char g[true]; +char h[sizeof (_Bool)]; +#if 0 /* See above. */ +char i[sizeof s.t]; +#endif +enum { j = false, k = true, l = false * true, m = true * 256 }; +_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]; +#if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>. */ +#if defined __xlc__ || defined __GNUC__ + /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 + reported by James Lemley on 2005-10-05; see + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + This test is not quite right, since xlc is allowed to + reject this program, as the initializer for xlcbug is + not one of the forms that C requires support for. + However, doing the test right would require a run-time + test, and that would make cross-compilation harder. + Let us hope that IBM fixes the xlc bug, and also adds + support for this kind of constant expression. In the + meantime, this test will reject xlc, which is OK, since + our stdbool.h substitute should suffice. We also test + this with GCC, where it should work, to detect more + quickly whether someone messes up the test in the + future. */ + char digs[] = "0123456789"; + int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); +#endif +#endif +/* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ +_Bool q = true; +_Bool *pq = &q; + +int +main () +{ + return 0; +} diff --git a/gnulib-tests/test-stddef.c b/gnulib-tests/test-stddef.c new file mode 100644 index 0000000..f9c9b33 --- /dev/null +++ b/gnulib-tests/test-stddef.c @@ -0,0 +1,40 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <stddef.h> substitute. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +#include <config.h> + +#include <stddef.h> + +#include "verify.h" + +/* Check that appropriate types are defined. */ +wchar_t a = 'c'; +ptrdiff_t b = 1; +size_t c = 2; + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +verify (sizeof NULL == sizeof (void *)); + +int +main (void) +{ + return 0; +} diff --git a/gnulib-tests/test-stdint.c b/gnulib-tests/test-stdint.c new file mode 100644 index 0000000..b636b01 --- /dev/null +++ b/gnulib-tests/test-stdint.c @@ -0,0 +1,363 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <stdint.h> substitute. + Copyright (C) 2006-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2006. */ + +#include <config.h> + +/* Whether to enable pedantic checks. */ +#define DO_PEDANTIC 0 + +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* likewise */ +#include <stdint.h> + +#include "verify.h" +#include "intprops.h" + +#if __GNUC__ >= 2 && DO_PEDANTIC +# define verify_same_types(expr1,expr2) \ + extern void _verify_func(__LINE__) (__typeof__ (expr1) *); \ + extern void _verify_func(__LINE__) (__typeof__ (expr2) *); +# define _verify_func(line) _verify_func2(line) +# define _verify_func2(line) verify_func_ ## line +#else +# define verify_same_types(expr1,expr2) extern void verify_func (int) +#endif + +/* 7.18.1.1. Exact-width integer types */ +/* 7.18.2.1. Limits of exact-width integer types */ + +int8_t a1[3] = { INT8_C (17), INT8_MIN, INT8_MAX }; +verify (TYPE_MINIMUM (int8_t) == INT8_MIN); +verify (TYPE_MAXIMUM (int8_t) == INT8_MAX); +verify_same_types (INT8_MIN, (int8_t) 0 + 0); +verify_same_types (INT8_MAX, (int8_t) 0 + 0); + +int16_t a2[3] = { INT16_C (17), INT16_MIN, INT16_MAX }; +verify (TYPE_MINIMUM (int16_t) == INT16_MIN); +verify (TYPE_MAXIMUM (int16_t) == INT16_MAX); +verify_same_types (INT16_MIN, (int16_t) 0 + 0); +verify_same_types (INT16_MAX, (int16_t) 0 + 0); + +int32_t a3[3] = { INT32_C (17), INT32_MIN, INT32_MAX }; +verify (TYPE_MINIMUM (int32_t) == INT32_MIN); +verify (TYPE_MAXIMUM (int32_t) == INT32_MAX); +verify_same_types (INT32_MIN, (int32_t) 0 + 0); +verify_same_types (INT32_MAX, (int32_t) 0 + 0); + +#ifdef INT64_MAX +int64_t a4[3] = { INT64_C (17), INT64_MIN, INT64_MAX }; +verify (TYPE_MINIMUM (int64_t) == INT64_MIN); +verify (TYPE_MAXIMUM (int64_t) == INT64_MAX); +verify_same_types (INT64_MIN, (int64_t) 0 + 0); +verify_same_types (INT64_MAX, (int64_t) 0 + 0); +#endif + +uint8_t b1[2] = { UINT8_C (17), UINT8_MAX }; +verify (TYPE_MAXIMUM (uint8_t) == UINT8_MAX); +verify_same_types (UINT8_MAX, (uint8_t) 0 + 0); + +uint16_t b2[2] = { UINT16_C (17), UINT16_MAX }; +verify (TYPE_MAXIMUM (uint16_t) == UINT16_MAX); +verify_same_types (UINT16_MAX, (uint16_t) 0 + 0); + +uint32_t b3[2] = { UINT32_C (17), UINT32_MAX }; +verify (TYPE_MAXIMUM (uint32_t) == UINT32_MAX); +verify_same_types (UINT32_MAX, (uint32_t) 0 + 0); + +#ifdef UINT64_MAX +uint64_t b4[2] = { UINT64_C (17), UINT64_MAX }; +verify (TYPE_MAXIMUM (uint64_t) == UINT64_MAX); +verify_same_types (UINT64_MAX, (uint64_t) 0 + 0); +#endif + +#if INT8_MIN && INT8_MAX && INT16_MIN && INT16_MAX && INT32_MIN && INT32_MAX +/* ok */ +#else +err or; +#endif + +#if UINT8_MAX && UINT16_MAX && UINT32_MAX +/* ok */ +#else +err or; +#endif + +/* 7.18.1.2. Minimum-width integer types */ +/* 7.18.2.2. Limits of minimum-width integer types */ + +int_least8_t c1[3] = { 17, INT_LEAST8_MIN, INT_LEAST8_MAX }; +verify (TYPE_MINIMUM (int_least8_t) == INT_LEAST8_MIN); +verify (TYPE_MAXIMUM (int_least8_t) == INT_LEAST8_MAX); +verify_same_types (INT_LEAST8_MIN, (int_least8_t) 0 + 0); +verify_same_types (INT_LEAST8_MAX, (int_least8_t) 0 + 0); + +int_least16_t c2[3] = { 17, INT_LEAST16_MIN, INT_LEAST16_MAX }; +verify (TYPE_MINIMUM (int_least16_t) == INT_LEAST16_MIN); +verify (TYPE_MAXIMUM (int_least16_t) == INT_LEAST16_MAX); +verify_same_types (INT_LEAST16_MIN, (int_least16_t) 0 + 0); +verify_same_types (INT_LEAST16_MAX, (int_least16_t) 0 + 0); + +int_least32_t c3[3] = { 17, INT_LEAST32_MIN, INT_LEAST32_MAX }; +verify (TYPE_MINIMUM (int_least32_t) == INT_LEAST32_MIN); +verify (TYPE_MAXIMUM (int_least32_t) == INT_LEAST32_MAX); +verify_same_types (INT_LEAST32_MIN, (int_least32_t) 0 + 0); +verify_same_types (INT_LEAST32_MAX, (int_least32_t) 0 + 0); + +#ifdef INT_LEAST64_MAX +int_least64_t c4[3] = { 17, INT_LEAST64_MIN, INT_LEAST64_MAX }; +verify (TYPE_MINIMUM (int_least64_t) == INT_LEAST64_MIN); +verify (TYPE_MAXIMUM (int_least64_t) == INT_LEAST64_MAX); +verify_same_types (INT_LEAST64_MIN, (int_least64_t) 0 + 0); +verify_same_types (INT_LEAST64_MAX, (int_least64_t) 0 + 0); +#endif + +uint_least8_t d1[2] = { 17, UINT_LEAST8_MAX }; +verify (TYPE_MAXIMUM (uint_least8_t) == UINT_LEAST8_MAX); +verify_same_types (UINT_LEAST8_MAX, (uint_least8_t) 0 + 0); + +uint_least16_t d2[2] = { 17, UINT_LEAST16_MAX }; +verify (TYPE_MAXIMUM (uint_least16_t) == UINT_LEAST16_MAX); +verify_same_types (UINT_LEAST16_MAX, (uint_least16_t) 0 + 0); + +uint_least32_t d3[2] = { 17, UINT_LEAST32_MAX }; +verify (TYPE_MAXIMUM (uint_least32_t) == UINT_LEAST32_MAX); +verify_same_types (UINT_LEAST32_MAX, (uint_least32_t) 0 + 0); + +#ifdef UINT_LEAST64_MAX +uint_least64_t d4[2] = { 17, UINT_LEAST64_MAX }; +verify (TYPE_MAXIMUM (uint_least64_t) == UINT_LEAST64_MAX); +verify_same_types (UINT_LEAST64_MAX, (uint_least64_t) 0 + 0); +#endif + +#if INT_LEAST8_MIN && INT_LEAST8_MAX && INT_LEAST16_MIN && INT_LEAST16_MAX && INT_LEAST32_MIN && INT_LEAST32_MAX +/* ok */ +#else +err or; +#endif + +#if UINT_LEAST8_MAX && UINT_LEAST16_MAX && UINT_LEAST32_MAX +/* ok */ +#else +err or; +#endif + +/* 7.18.1.3. Fastest minimum-width integer types */ +/* 7.18.2.3. Limits of fastest minimum-width integer types */ + +int_fast8_t e1[3] = { 17, INT_FAST8_MIN, INT_FAST8_MAX }; +verify (TYPE_MINIMUM (int_fast8_t) == INT_FAST8_MIN); +verify (TYPE_MAXIMUM (int_fast8_t) == INT_FAST8_MAX); +verify_same_types (INT_FAST8_MIN, (int_fast8_t) 0 + 0); +verify_same_types (INT_FAST8_MAX, (int_fast8_t) 0 + 0); + +int_fast16_t e2[3] = { 17, INT_FAST16_MIN, INT_FAST16_MAX }; +verify (TYPE_MINIMUM (int_fast16_t) == INT_FAST16_MIN); +verify (TYPE_MAXIMUM (int_fast16_t) == INT_FAST16_MAX); +verify_same_types (INT_FAST16_MIN, (int_fast16_t) 0 + 0); +verify_same_types (INT_FAST16_MAX, (int_fast16_t) 0 + 0); + +int_fast32_t e3[3] = { 17, INT_FAST32_MIN, INT_FAST32_MAX }; +verify (TYPE_MINIMUM (int_fast32_t) == INT_FAST32_MIN); +verify (TYPE_MAXIMUM (int_fast32_t) == INT_FAST32_MAX); +verify_same_types (INT_FAST32_MIN, (int_fast32_t) 0 + 0); +verify_same_types (INT_FAST32_MAX, (int_fast32_t) 0 + 0); + +#ifdef INT_FAST64_MAX +int_fast64_t e4[3] = { 17, INT_FAST64_MIN, INT_FAST64_MAX }; +verify (TYPE_MINIMUM (int_fast64_t) == INT_FAST64_MIN); +verify (TYPE_MAXIMUM (int_fast64_t) == INT_FAST64_MAX); +verify_same_types (INT_FAST64_MIN, (int_fast64_t) 0 + 0); +verify_same_types (INT_FAST64_MAX, (int_fast64_t) 0 + 0); +#endif + +uint_fast8_t f1[2] = { 17, UINT_FAST8_MAX }; +verify (TYPE_MAXIMUM (uint_fast8_t) == UINT_FAST8_MAX); +verify_same_types (UINT_FAST8_MAX, (uint_fast8_t) 0 + 0); + +uint_fast16_t f2[2] = { 17, UINT_FAST16_MAX }; +verify (TYPE_MAXIMUM (uint_fast16_t) == UINT_FAST16_MAX); +verify_same_types (UINT_FAST16_MAX, (uint_fast16_t) 0 + 0); + +uint_fast32_t f3[2] = { 17, UINT_FAST32_MAX }; +verify (TYPE_MAXIMUM (uint_fast32_t) == UINT_FAST32_MAX); +verify_same_types (UINT_FAST32_MAX, (uint_fast32_t) 0 + 0); + +#ifdef UINT_FAST64_MAX +uint_fast64_t f4[2] = { 17, UINT_FAST64_MAX }; +verify (TYPE_MAXIMUM (uint_fast64_t) == UINT_FAST64_MAX); +verify_same_types (UINT_FAST64_MAX, (uint_fast64_t) 0 + 0); +#endif + +#if INT_FAST8_MIN && INT_FAST8_MAX && INT_FAST16_MIN && INT_FAST16_MAX && INT_FAST32_MIN && INT_FAST32_MAX +/* ok */ +#else +err or; +#endif + +#if UINT_FAST8_MAX && UINT_FAST16_MAX && UINT_FAST32_MAX +/* ok */ +#else +err or; +#endif + +/* 7.18.1.4. Integer types capable of holding object pointers */ +/* 7.18.2.4. Limits of integer types capable of holding object pointers */ + +intptr_t g[3] = { 17, INTPTR_MIN, INTPTR_MAX }; +verify (TYPE_MINIMUM (intptr_t) == INTPTR_MIN); +verify (TYPE_MAXIMUM (intptr_t) == INTPTR_MAX); +verify_same_types (INTPTR_MIN, (intptr_t) 0 + 0); +verify_same_types (INTPTR_MAX, (intptr_t) 0 + 0); + +uintptr_t h[2] = { 17, UINTPTR_MAX }; +verify (TYPE_MAXIMUM (uintptr_t) == UINTPTR_MAX); +verify_same_types (UINTPTR_MAX, (uintptr_t) 0 + 0); + +#if INTPTR_MIN && INTPTR_MAX && UINTPTR_MAX +/* ok */ +#else +err or; +#endif + +/* 7.18.1.5. Greatest-width integer types */ +/* 7.18.2.5. Limits of greatest-width integer types */ + +intmax_t i[3] = { INTMAX_C (17), INTMAX_MIN, INTMAX_MAX }; +verify (TYPE_MINIMUM (intmax_t) == INTMAX_MIN); +verify (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX); +verify_same_types (INTMAX_MIN, (intmax_t) 0 + 0); +verify_same_types (INTMAX_MAX, (intmax_t) 0 + 0); + +uintmax_t j[2] = { UINTMAX_C (17), UINTMAX_MAX }; +verify (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX); +verify_same_types (UINTMAX_MAX, (uintmax_t) 0 + 0); + +/* As of 2007, Sun C and HP-UX 10.20 cc don't support 'long long' constants in + the preprocessor. */ +#if !(defined __SUNPRO_C || (defined __hpux && !defined __GNUC__)) +#if INTMAX_MIN && INTMAX_MAX && UINTMAX_MAX +/* ok */ +#else +err or; +#endif +#endif + +/* 7.18.3. Limits of other integer types */ + +#include <stddef.h> + +verify (TYPE_MINIMUM (ptrdiff_t) == PTRDIFF_MIN); +verify (TYPE_MAXIMUM (ptrdiff_t) == PTRDIFF_MAX); +verify_same_types (PTRDIFF_MIN, (ptrdiff_t) 0 + 0); +verify_same_types (PTRDIFF_MAX, (ptrdiff_t) 0 + 0); + +#if PTRDIFF_MIN && PTRDIFF_MAX +/* ok */ +#else +err or; +#endif + +#include <signal.h> + +verify (TYPE_MINIMUM (sig_atomic_t) == SIG_ATOMIC_MIN); +verify (TYPE_MAXIMUM (sig_atomic_t) == SIG_ATOMIC_MAX); +verify_same_types (SIG_ATOMIC_MIN, (sig_atomic_t) 0 + 0); +verify_same_types (SIG_ATOMIC_MAX, (sig_atomic_t) 0 + 0); + +#if SIG_ATOMIC_MIN != 17 && SIG_ATOMIC_MAX +/* ok */ +#else +err or; +#endif + +verify (TYPE_MAXIMUM (size_t) == SIZE_MAX); +verify_same_types (SIZE_MAX, (size_t) 0 + 0); + +#if SIZE_MAX +/* ok */ +#else +err or; +#endif + +#if HAVE_WCHAR_T +verify (TYPE_MINIMUM (wchar_t) == WCHAR_MIN); +verify (TYPE_MAXIMUM (wchar_t) == WCHAR_MAX); +verify_same_types (WCHAR_MIN, (wchar_t) 0 + 0); +verify_same_types (WCHAR_MAX, (wchar_t) 0 + 0); + +# if WCHAR_MIN != 17 && WCHAR_MAX +/* ok */ +# else +err or; +# endif +#endif + +#if HAVE_WINT_T +# include <wchar.h> + +verify (TYPE_MINIMUM (wint_t) == WINT_MIN); +verify (TYPE_MAXIMUM (wint_t) == WINT_MAX); +verify_same_types (WINT_MIN, (wint_t) 0 + 0); +verify_same_types (WINT_MAX, (wint_t) 0 + 0); + +# if WINT_MIN != 17 && WINT_MAX +/* ok */ +# else +err or; +# endif +#endif + +/* 7.18.4. Macros for integer constants */ + +verify (INT8_C (17) == 17); +verify_same_types (INT8_C (17), (int_least8_t)0 + 0); +verify (UINT8_C (17) == 17); +verify_same_types (UINT8_C (17), (uint_least8_t)0 + 0); + +verify (INT16_C (17) == 17); +verify_same_types (INT16_C (17), (int_least16_t)0 + 0); +verify (UINT16_C (17) == 17); +verify_same_types (UINT16_C (17), (uint_least16_t)0 + 0); + +verify (INT32_C (17) == 17); +verify_same_types (INT32_C (17), (int_least32_t)0 + 0); +verify (UINT32_C (17) == 17); +verify_same_types (UINT32_C (17), (uint_least32_t)0 + 0); + +#ifdef INT64_C +verify (INT64_C (17) == 17); +verify_same_types (INT64_C (17), (int_least64_t)0 + 0); +#endif +#ifdef UINT64_C +verify (UINT64_C (17) == 17); +verify_same_types (UINT64_C (17), (uint_least64_t)0 + 0); +#endif + +verify (INTMAX_C (17) == 17); +verify_same_types (INTMAX_C (17), (intmax_t)0 + 0); +verify (UINTMAX_C (17) == 17); +verify_same_types (UINTMAX_C (17), (uintmax_t)0 + 0); + + +int +main (void) +{ + return 0; +} diff --git a/gnulib-tests/test-stdio.c b/gnulib-tests/test-stdio.c new file mode 100644 index 0000000..70fb35b --- /dev/null +++ b/gnulib-tests/test-stdio.c @@ -0,0 +1,45 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <stdio.h> substitute. + Copyright (C) 2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <stdio.h> + +#include "verify.h" + +/* Check that the various SEEK_* macros are defined. */ +int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +verify (sizeof NULL == sizeof (void *)); + +/* Check that the types are all defined. */ +fpos_t t1; +off_t t2; +size_t t3; +ssize_t t4; +va_list t5; + +int +main (void) +{ + return 0; +} diff --git a/gnulib-tests/test-stdlib.c b/gnulib-tests/test-stdlib.c new file mode 100644 index 0000000..b60e590 --- /dev/null +++ b/gnulib-tests/test-stdlib.c @@ -0,0 +1,45 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <stdlib.h> substitute. + Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <stdlib.h> + +#include "verify.h" + +int exitcode; + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +verify (sizeof NULL == sizeof (void *)); + +int +main (void) +{ + /* Check that some macros are defined and different integer constants. */ + switch (exitcode) + { + case EXIT_SUCCESS: + case EXIT_FAILURE: + break; + } + + return 0; +} diff --git a/gnulib-tests/test-strerror.c b/gnulib-tests/test-strerror.c new file mode 100644 index 0000000..5b50fa9 --- /dev/null +++ b/gnulib-tests/test-strerror.c @@ -0,0 +1,59 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of strerror() function. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2007. */ + +#include <config.h> + +#include <string.h> + +#include "signature.h" +SIGNATURE_CHECK (strerror, char *, (int)); + +#include <errno.h> + +#include "macros.h" + +int +main (void) +{ + char *str; + + str = strerror (EACCES); + ASSERT (str); + ASSERT (*str); + + str = strerror (ETIMEDOUT); + ASSERT (str); + ASSERT (*str); + + str = strerror (EOVERFLOW); + ASSERT (str); + ASSERT (*str); + + str = strerror (0); + ASSERT (str); + ASSERT (*str); + + str = strerror (-3); + ASSERT (str); + ASSERT (*str); + + return 0; +} diff --git a/gnulib-tests/test-striconv.c b/gnulib-tests/test-striconv.c new file mode 100644 index 0000000..55ac6c3 --- /dev/null +++ b/gnulib-tests/test-striconv.c @@ -0,0 +1,182 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of character set conversion. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include "striconv.h" + +#if HAVE_ICONV +# include <iconv.h> +#endif + +#include <errno.h> +#include <stdlib.h> +#include <string.h> + +#include "macros.h" + +int +main () +{ +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + and UTF-8. */ + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + iconv_t cd_utf8_to_88591 = iconv_open ("ISO-8859-1", "UTF-8"); + + ASSERT (cd_88591_to_utf8 != (iconv_t)(-1)); + ASSERT (cd_utf8_to_88591 != (iconv_t)(-1)); + + /* ------------------------- Test mem_cd_iconv() ------------------------- */ + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconv (input, strlen (input), cd_88591_to_utf8, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + { + static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconv (input, strlen (input), cd_utf8_to_88591, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconv (input, strlen (input), cd_utf8_to_88591, + &result, &length); + ASSERT (retval == -1 && errno == EILSEQ); + ASSERT (result == NULL); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + { + static const char input[] = "\342"; + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconv (input, strlen (input), cd_utf8_to_88591, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == 0); + free (result); + } + + /* ------------------------- Test str_cd_iconv() ------------------------- */ + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + char *result = str_cd_iconv (input, cd_88591_to_utf8); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + { + static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char *result = str_cd_iconv (input, cd_utf8_to_88591); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + { + static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ + char *result = str_cd_iconv (input, cd_utf8_to_88591); + ASSERT (result == NULL && errno == EILSEQ); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + { + static const char input[] = "\342"; + char *result = str_cd_iconv (input, cd_utf8_to_88591); + ASSERT (result != NULL); + ASSERT (strcmp (result, "") == 0); + free (result); + } + + iconv_close (cd_88591_to_utf8); + iconv_close (cd_utf8_to_88591); + + /* -------------------------- Test str_iconv() -------------------------- */ + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + char *result = str_iconv (input, "ISO-8859-1", "UTF-8"); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + { + static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char *result = str_iconv (input, "UTF-8", "ISO-8859-1"); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + { + static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ + char *result = str_iconv (input, "UTF-8", "ISO-8859-1"); + ASSERT (result == NULL && errno == EILSEQ); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + { + static const char input[] = "\342"; + char *result = str_iconv (input, "UTF-8", "ISO-8859-1"); + ASSERT (result != NULL); + ASSERT (strcmp (result, "") == 0); + free (result); + } + +#endif + + return 0; +} diff --git a/gnulib-tests/test-string.c b/gnulib-tests/test-string.c new file mode 100644 index 0000000..2a5ec5d --- /dev/null +++ b/gnulib-tests/test-string.c @@ -0,0 +1,35 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <string.h> substitute. + Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <string.h> + +#include "verify.h" + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +verify (sizeof NULL == sizeof (void *)); + +int +main (void) +{ + return 0; +} diff --git a/gnulib-tests/test-strings.c b/gnulib-tests/test-strings.c new file mode 100644 index 0000000..d5b4b3c --- /dev/null +++ b/gnulib-tests/test-strings.c @@ -0,0 +1,29 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <strings.h> substitute. + Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <strings.h> + +int +main () +{ + return 0; +} diff --git a/gnulib-tests/test-symlink.c b/gnulib-tests/test-symlink.c new file mode 100644 index 0000000..30c74d0 --- /dev/null +++ b/gnulib-tests/test-symlink.c @@ -0,0 +1,49 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Tests of symlink. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +#include <config.h> + +#include <unistd.h> + +#include "signature.h" +SIGNATURE_CHECK (symlink, int, (char const *, char const *)); + +#include <fcntl.h> +#include <errno.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/stat.h> + +#include "ignore-value.h" +#include "macros.h" + +#define BASE "test-symlink.t" + +#include "test-symlink.h" + +int +main (void) +{ + /* Remove any leftovers from a previous partial run. */ + ignore_value (system ("rm -rf " BASE "*")); + + return test_symlink (symlink, true); +} diff --git a/gnulib-tests/test-symlink.h b/gnulib-tests/test-symlink.h new file mode 100644 index 0000000..8ca8e6a --- /dev/null +++ b/gnulib-tests/test-symlink.h @@ -0,0 +1,97 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Tests of symlink. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +/* This file is designed to test both symlink(a,b) and + symlinkat(a,AT_FDCWD,b). FUNC is the function to test. Assumes + that BASE and ASSERT are already defined, and that appropriate + headers are already included. If PRINT, warn before skipping + symlink tests with status 77. */ + +static int +test_symlink (int (*func) (char const *, char const *), bool print) +{ + if (func ("nowhere", BASE "link1")) + { + if (print) + fputs ("skipping test: symlinks not supported on this file system\n", + stderr); + return 77; + } + + /* Some systems allow the creation of 0-length symlinks as a synonym + for "."; but most reject it. */ + { + int status; + errno = 0; + status = func ("", BASE "link2"); + if (status == -1) + ASSERT (errno == ENOENT || errno == EINVAL); + else + { + ASSERT (status == 0); + ASSERT (unlink (BASE "link2") == 0); + } + } + + /* Sanity checks of failures. */ + errno = 0; + ASSERT (func ("nowhere", "") == -1); + ASSERT (errno == ENOENT); + errno = 0; + ASSERT (func ("nowhere", ".") == -1); + ASSERT (errno == EEXIST || errno == EINVAL); + errno = 0; + ASSERT (func ("somewhere", BASE "link1") == -1); + ASSERT (errno == EEXIST); + errno = 0; + ASSERT (func ("nowhere", BASE "link2/") == -1); + ASSERT (errno == ENOTDIR || errno == ENOENT); + ASSERT (mkdir (BASE "dir", 0700) == 0); + errno = 0; + ASSERT (func ("nowhere", BASE "dir") == -1); + ASSERT (errno == EEXIST); + errno = 0; + ASSERT (func ("nowhere", BASE "dir/") == -1); + ASSERT (errno == EEXIST || errno == EINVAL); + ASSERT (close (creat (BASE "file", 0600)) == 0); + errno = 0; + ASSERT (func ("nowhere", BASE "file") == -1); + ASSERT (errno == EEXIST); + errno = 0; + ASSERT (func ("nowhere", BASE "file/") == -1); + ASSERT (errno == EEXIST || errno == ENOTDIR || errno == ENOENT); + + /* Trailing slash must always be rejected. */ + ASSERT (unlink (BASE "link1") == 0); + ASSERT (func (BASE "link2", BASE "link1") == 0); + errno = 0; + ASSERT (func (BASE "nowhere", BASE "link1/") == -1); + ASSERT (errno == EEXIST || errno == ENOTDIR || errno == ENOENT); + errno = 0; + ASSERT (unlink (BASE "link2") == -1); + ASSERT (errno == ENOENT); + + /* Cleanup. */ + ASSERT (rmdir (BASE "dir") == 0); + ASSERT (unlink (BASE "file") == 0); + ASSERT (unlink (BASE "link1") == 0); + + return 0; +} diff --git a/gnulib-tests/test-sys_stat.c b/gnulib-tests/test-sys_stat.c new file mode 100644 index 0000000..43654e7 --- /dev/null +++ b/gnulib-tests/test-sys_stat.c @@ -0,0 +1,290 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <sys/stat.h> substitute. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <sys/stat.h> + +#include "verify.h" + +/* Check the existence of some macros. */ +int a[] = + { + S_IFMT, + S_IFBLK, S_IFCHR, S_IFDIR, S_IFIFO, S_IFREG, +#ifdef S_IFLNK /* missing on mingw and djgpp */ + S_IFLNK, +#endif +#ifdef S_IFSOCK /* missing on mingw and djgpp */ + S_IFSOCK, +#endif + S_IRWXU, S_IRUSR, S_IWUSR, S_IXUSR, + S_IRWXG, S_IRGRP, S_IWGRP, S_IXGRP, + S_IRWXO, S_IROTH, S_IWOTH, S_IXOTH, + S_ISUID, S_ISGID, S_ISVTX, + S_ISBLK (S_IFREG), + S_ISCHR (S_IFREG), + S_ISDIR (S_IFREG), + S_ISFIFO (S_IFREG), + S_ISREG (S_IFREG), + S_ISLNK (S_IFREG), + S_ISSOCK (S_IFREG), + S_ISDOOR (S_IFREG), + S_ISMPB (S_IFREG), + S_ISNAM (S_IFREG), + S_ISNWK (S_IFREG), + S_ISPORT (S_IFREG), + S_ISCTG (S_IFREG), + S_ISOFD (S_IFREG), + S_ISOFL (S_IFREG), + S_ISWHT (S_IFREG) + }; + +/* Sanity checks. */ + +verify (S_IRWXU == (S_IRUSR | S_IWUSR | S_IXUSR)); +verify (S_IRWXG == (S_IRGRP | S_IWGRP | S_IXGRP)); +verify (S_IRWXO == (S_IROTH | S_IWOTH | S_IXOTH)); + +verify (S_ISBLK (S_IFBLK)); +verify (!S_ISBLK (S_IFCHR)); +verify (!S_ISBLK (S_IFDIR)); +verify (!S_ISBLK (S_IFIFO)); +verify (!S_ISBLK (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISBLK (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISBLK (S_IFSOCK)); +#endif + +verify (!S_ISCHR (S_IFBLK)); +verify (S_ISCHR (S_IFCHR)); +verify (!S_ISCHR (S_IFDIR)); +verify (!S_ISCHR (S_IFIFO)); +verify (!S_ISCHR (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISCHR (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISCHR (S_IFSOCK)); +#endif + +verify (!S_ISDIR (S_IFBLK)); +verify (!S_ISDIR (S_IFCHR)); +verify (S_ISDIR (S_IFDIR)); +verify (!S_ISDIR (S_IFIFO)); +verify (!S_ISDIR (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISDIR (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISDIR (S_IFSOCK)); +#endif + +verify (!S_ISFIFO (S_IFBLK)); +verify (!S_ISFIFO (S_IFCHR)); +verify (!S_ISFIFO (S_IFDIR)); +verify (S_ISFIFO (S_IFIFO)); +verify (!S_ISFIFO (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISFIFO (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISFIFO (S_IFSOCK)); +#endif + +verify (!S_ISREG (S_IFBLK)); +verify (!S_ISREG (S_IFCHR)); +verify (!S_ISREG (S_IFDIR)); +verify (!S_ISREG (S_IFIFO)); +verify (S_ISREG (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISREG (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISREG (S_IFSOCK)); +#endif + +verify (!S_ISLNK (S_IFBLK)); +verify (!S_ISLNK (S_IFCHR)); +verify (!S_ISLNK (S_IFDIR)); +verify (!S_ISLNK (S_IFIFO)); +verify (!S_ISLNK (S_IFREG)); +#ifdef S_IFLNK +verify (S_ISLNK (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISLNK (S_IFSOCK)); +#endif + +verify (!S_ISSOCK (S_IFBLK)); +verify (!S_ISSOCK (S_IFCHR)); +verify (!S_ISSOCK (S_IFDIR)); +verify (!S_ISSOCK (S_IFIFO)); +verify (!S_ISSOCK (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISSOCK (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (S_ISSOCK (S_IFSOCK)); +#endif + +verify (!S_ISDOOR (S_IFBLK)); +verify (!S_ISDOOR (S_IFCHR)); +verify (!S_ISDOOR (S_IFDIR)); +verify (!S_ISDOOR (S_IFIFO)); +verify (!S_ISDOOR (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISDOOR (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISDOOR (S_IFSOCK)); +#endif + +verify (!S_ISMPB (S_IFBLK)); +verify (!S_ISMPB (S_IFCHR)); +verify (!S_ISMPB (S_IFDIR)); +verify (!S_ISMPB (S_IFIFO)); +verify (!S_ISMPB (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISMPB (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISMPB (S_IFSOCK)); +#endif + +verify (!S_ISNAM (S_IFBLK)); +verify (!S_ISNAM (S_IFCHR)); +verify (!S_ISNAM (S_IFDIR)); +verify (!S_ISNAM (S_IFIFO)); +verify (!S_ISNAM (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISNAM (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISNAM (S_IFSOCK)); +#endif + +verify (!S_ISNWK (S_IFBLK)); +verify (!S_ISNWK (S_IFCHR)); +verify (!S_ISNWK (S_IFDIR)); +verify (!S_ISNWK (S_IFIFO)); +verify (!S_ISNWK (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISNWK (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISNWK (S_IFSOCK)); +#endif + +verify (!S_ISPORT (S_IFBLK)); +verify (!S_ISPORT (S_IFCHR)); +verify (!S_ISPORT (S_IFDIR)); +verify (!S_ISPORT (S_IFIFO)); +verify (!S_ISPORT (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISPORT (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISPORT (S_IFSOCK)); +#endif + +verify (!S_ISCTG (S_IFBLK)); +verify (!S_ISCTG (S_IFCHR)); +verify (!S_ISCTG (S_IFDIR)); +verify (!S_ISCTG (S_IFIFO)); +verify (!S_ISCTG (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISCTG (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISCTG (S_IFSOCK)); +#endif + +verify (!S_ISOFD (S_IFBLK)); +verify (!S_ISOFD (S_IFCHR)); +verify (!S_ISOFD (S_IFDIR)); +verify (!S_ISOFD (S_IFIFO)); +verify (!S_ISOFD (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISOFD (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISOFD (S_IFSOCK)); +#endif + +verify (!S_ISOFL (S_IFBLK)); +verify (!S_ISOFL (S_IFCHR)); +verify (!S_ISOFL (S_IFDIR)); +verify (!S_ISOFL (S_IFIFO)); +verify (!S_ISOFL (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISOFL (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISOFL (S_IFSOCK)); +#endif + +verify (!S_ISWHT (S_IFBLK)); +verify (!S_ISWHT (S_IFCHR)); +verify (!S_ISWHT (S_IFDIR)); +verify (!S_ISWHT (S_IFIFO)); +verify (!S_ISWHT (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISWHT (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISWHT (S_IFSOCK)); +#endif + +/* POSIX 2008 requires traditional encoding of permission constants. */ +verify (S_IRWXU == 00700); +verify (S_IRUSR == 00400); +verify (S_IWUSR == 00200); +verify (S_IXUSR == 00100); +verify (S_IRWXG == 00070); +verify (S_IRGRP == 00040); +verify (S_IWGRP == 00020); +verify (S_IXGRP == 00010); +verify (S_IRWXO == 00007); +verify (S_IROTH == 00004); +verify (S_IWOTH == 00002); +verify (S_IXOTH == 00001); +verify (S_ISUID == 04000); +verify (S_ISGID == 02000); +verify (S_ISVTX == 01000); + +#if ((0 <= UTIME_NOW && UTIME_NOW < 1000000000) \ + || (0 <= UTIME_OMIT && UTIME_OMIT < 1000000000) \ + || UTIME_NOW == UTIME_OMIT) +invalid UTIME macros +#endif + +/* Check the existence of some types. */ +nlink_t t1; + +struct timespec t2; + +int +main (void) +{ + return 0; +} diff --git a/gnulib-tests/test-sys_time.c b/gnulib-tests/test-sys_time.c new file mode 100644 index 0000000..c9ee19a --- /dev/null +++ b/gnulib-tests/test-sys_time.c @@ -0,0 +1,31 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <sys/time.h> substitute. + Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <sys/time.h> + +struct timeval a; + +int +main (void) +{ + return 0; +} diff --git a/gnulib-tests/test-sys_wait.c b/gnulib-tests/test-sys_wait.c new file mode 100644 index 0000000..e4380d0 --- /dev/null +++ b/gnulib-tests/test-sys_wait.c @@ -0,0 +1,32 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <sys/wait.h> substitute. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +#include <config.h> + +#include <sys/wait.h> + +/* Check for existence of required types. */ +static pid_t a; + +int +main (void) +{ + return a; +} diff --git a/gnulib-tests/test-time.c b/gnulib-tests/test-time.c new file mode 100644 index 0000000..95db183 --- /dev/null +++ b/gnulib-tests/test-time.c @@ -0,0 +1,37 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <time.h> substitute. + Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <time.h> + +#include "verify.h" + +struct timespec a; + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +verify (sizeof NULL == sizeof (void *)); + +int +main (void) +{ + return 0; +} diff --git a/gnulib-tests/test-unistd.c b/gnulib-tests/test-unistd.c new file mode 100644 index 0000000..4ec1e74 --- /dev/null +++ b/gnulib-tests/test-unistd.c @@ -0,0 +1,58 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <unistd.h> substitute. + Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <unistd.h> + +#include "verify.h" + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +verify (sizeof NULL == sizeof (void *)); + +/* Check that the various SEEK_* macros are defined. */ +int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; + +/* Check that the various *_FILENO macros are defined. */ +#if ! (defined STDIN_FILENO \ + && (STDIN_FILENO + STDOUT_FILENO + STDERR_FILENO == 3)) +missing or broken *_FILENO macros +#endif + +/* Check that the types are all defined. */ +size_t t1; +ssize_t t2; +#ifdef TODO /* Not implemented in gnulib yet */ +uid_t t3; +gid_t t4; +#endif +off_t t5; +pid_t t6; +#ifdef TODO +useconds_t t7; +intptr_t t8; +#endif + +int +main (void) +{ + return 0; +} diff --git a/gnulib-tests/test-unsetenv.c b/gnulib-tests/test-unsetenv.c new file mode 100644 index 0000000..1afd150 --- /dev/null +++ b/gnulib-tests/test-unsetenv.c @@ -0,0 +1,63 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Tests of unsetenv. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +#include <config.h> + +#include <stdlib.h> + +#include "signature.h" +SIGNATURE_CHECK (unsetenv, int, (char const *)); + +#include <errno.h> +#include <string.h> +#include <unistd.h> + +#include "macros.h" + +int +main (void) +{ + char entry[] = "b=2"; + + /* Test removal when multiple entries present. */ + ASSERT (putenv ((char *) "a=1") == 0); + ASSERT (putenv (entry) == 0); + entry[0] = 'a'; /* Unspecified what getenv("a") would be at this point. */ + ASSERT (unsetenv ("a") == 0); /* Both entries will be removed. */ + ASSERT (getenv ("a") == NULL); + ASSERT (unsetenv ("a") == 0); + + /* Required to fail with EINVAL. */ + errno = 0; + ASSERT (unsetenv ("") == -1); + ASSERT (errno == EINVAL); + errno = 0; + ASSERT (unsetenv ("a=b") == -1); + ASSERT (errno == EINVAL); +#if 0 + /* glibc and gnulib's implementation guarantee this, but POSIX no + longer requires it: http://austingroupbugs.net/view.php?id=185 */ + errno = 0; + ASSERT (unsetenv (NULL) == -1); + ASSERT (errno == EINVAL); +#endif + + return 0; +} diff --git a/gnulib-tests/test-update-copyright.sh b/gnulib-tests/test-update-copyright.sh new file mode 100755 index 0000000..2d1022a --- /dev/null +++ b/gnulib-tests/test-update-copyright.sh @@ -0,0 +1,526 @@ +#!/bin/sh +# Test suite for update-copyright. +# Copyright (C) 2009-2010 Free Software Foundation, Inc. +# This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. + +diffout=`diff -u /dev/null /dev/null 2>&1` +if test x"$diffout" = x"" && test $? -eq 0; then + compare() { diff -u "$@"; } +else + compare() { cmp "$@"; } +fi + +TMP_BASE=update-copyright.test +trap 'rm -f $TMP_BASE*' 0 1 2 3 15 + +## --------------------------------- ## +## Skip if user does not have perl. ## +## --------------------------------- ## + +TMP=$TMP_BASE +s=$TMP-script +cat <<\EOF > $s +eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}' + & eval 'exec perl -wS -0777 -pi "$0" $argv:q' + if 0; +s/a/b/ +EOF +chmod a+x $s +echo a > $TMP-in +./$s $TMP-in 2>/dev/null && test b = "`cat $TMP-in 2>/dev/null`" || + { + printf '%s\n' "$0: skipping this test;" \ + 'your system has insufficient support for Perl' 1>&2 + exit 77 + } + +# Do not let a different envvar setting perturb results. +UPDATE_COPYRIGHT_MAX_LINE_LENGTH=72 +export UPDATE_COPYRIGHT_MAX_LINE_LENGTH + +## ----------------------------- ## +## Examples from documentation. ## +## ----------------------------- ## + +TMP=$TMP_BASE-ex +cat > $TMP.1 <<EOF +Copyright @copyright{} 1990-2005, 2007-2009 Free Software +Foundation, Inc. +EOF +cat > $TMP.2 <<EOF +# Copyright (C) 1990-2005, 2007-2009 Free Software +# Foundation, Inc. +EOF +cat > $TMP.3 <<EOF +/* + * Copyright © 90,2005,2007-2009 + * Free Software Foundation, Inc. + */ +EOF +cat > $TMP.4 <<EOF +## Copyright (C) 1990-2005, 2007-2009 Free Software +# Foundation, Inc. +EOF +cat > $TMP.5 <<EOF +Copyright (C) 1990-2005, 2007-2009 Acme, Inc. +EOF +cat > $TMP.6 <<EOF +## Copyright (C) 1990-2005, 2007-2009 Free Software +# Foundation, Inc. + +Copyright (C) 1990-2005, 2007-2009 Free Software Foundation, +Inc. +EOF +cat > $TMP.7 <<EOF +Copyright (C) 1990-2005, 2007-2009 Acme, Inc. + +# Copyright (C) 1990-2005, 2007-2009 Free Software +# Foundation, Inc. +EOF + +rm -f $TMP.*.bak +UPDATE_COPYRIGHT_YEAR=2009 \ + update-copyright $TMP.* 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare - $TMP-stderr <<EOF || exit 1 +$TMP.4: warning: FSF copyright statement not found +$TMP.5: warning: FSF copyright statement not found +EOF +compare - $TMP.1 <<EOF || exit 1 +Copyright @copyright{} 1990-2005, 2007-2009 Free Software +Foundation, Inc. +EOF +compare - $TMP.2 <<EOF || exit 1 +# Copyright (C) 1990-2005, 2007-2009 Free Software +# Foundation, Inc. +EOF +compare - $TMP.3 <<EOF || exit 1 +/* + * Copyright © 90,2005,2007-2009 + * Free Software Foundation, Inc. + */ +EOF +compare - $TMP.4 <<EOF || exit 1 +## Copyright (C) 1990-2005, 2007-2009 Free Software +# Foundation, Inc. +EOF +compare - $TMP.5 <<EOF || exit 1 +Copyright (C) 1990-2005, 2007-2009 Acme, Inc. +EOF +compare - $TMP.6 <<EOF || exit 1 +## Copyright (C) 1990-2005, 2007-2009 Free Software +# Foundation, Inc. + +Copyright (C) 1990-2005, 2007-2009 Free Software Foundation, +Inc. +EOF +compare - $TMP.7 <<EOF || exit 1 +Copyright (C) 1990-2005, 2007-2009 Acme, Inc. + +# Copyright (C) 1990-2005, 2007-2009 Free Software +# Foundation, Inc. +EOF + +rm -f $TMP.*.bak +UPDATE_COPYRIGHT_YEAR=2010 UPDATE_COPYRIGHT_USE_INTERVALS=1 \ + update-copyright $TMP.* 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare - $TMP-stderr <<EOF || exit 1 +$TMP.4: warning: FSF copyright statement not found +$TMP.5: warning: FSF copyright statement not found +EOF +compare - $TMP.1 <<EOF || exit 1 +Copyright @copyright{} 1990-2005, 2007-2010 Free Software Foundation, +Inc. +EOF +compare - $TMP.2 <<EOF || exit 1 +# Copyright (C) 1990-2005, 2007-2010 Free Software Foundation, Inc. +EOF +compare - $TMP.3 <<EOF || exit 1 +/* + * Copyright © 1990, 2005, 2007-2010 Free Software Foundation, Inc. + */ +EOF +compare - $TMP.4 <<EOF || exit 1 +## Copyright (C) 1990-2005, 2007-2009 Free Software +# Foundation, Inc. +EOF +compare - $TMP.5 <<EOF || exit 1 +Copyright (C) 1990-2005, 2007-2009 Acme, Inc. +EOF +compare - $TMP.6 <<EOF || exit 1 +## Copyright (C) 1990-2005, 2007-2009 Free Software +# Foundation, Inc. + +Copyright (C) 1990-2005, 2007-2010 Free Software Foundation, Inc. +EOF +compare - $TMP.7 <<EOF || exit 1 +Copyright (C) 1990-2005, 2007-2009 Acme, Inc. + +# Copyright (C) 1990-2005, 2007-2010 Free Software Foundation, Inc. +EOF + +rm -f $TMP.*.bak +UPDATE_COPYRIGHT_YEAR=2010 UPDATE_COPYRIGHT_FORCE=1 \ + update-copyright $TMP.* 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare - $TMP-stderr <<EOF || exit 1 +$TMP.4: warning: FSF copyright statement not found +$TMP.5: warning: FSF copyright statement not found +EOF +compare - $TMP.1 <<EOF || exit 1 +Copyright @copyright{} 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, +1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 +Free Software Foundation, Inc. +EOF +compare - $TMP.2 <<EOF || exit 1 +# Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, +# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free +# Software Foundation, Inc. +EOF +compare - $TMP.3 <<EOF || exit 1 +/* + * Copyright © 1990, 2005, 2007, 2008, 2009, 2010 Free Software + * Foundation, Inc. + */ +EOF +compare - $TMP.4 <<EOF || exit 1 +## Copyright (C) 1990-2005, 2007-2009 Free Software +# Foundation, Inc. +EOF +compare - $TMP.5 <<EOF || exit 1 +Copyright (C) 1990-2005, 2007-2009 Acme, Inc. +EOF +compare - $TMP.6 <<EOF || exit 1 +## Copyright (C) 1990-2005, 2007-2009 Free Software +# Foundation, Inc. + +Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, +1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc. +EOF +compare - $TMP.7 <<EOF || exit 1 +Copyright (C) 1990-2005, 2007-2009 Acme, Inc. + +# Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, +# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free +# Software Foundation, Inc. +EOF + +rm $TMP* + +## -------------- ## +## Current year. ## +## -------------- ## + +TMP=$TMP_BASE-current-year +YEAR=`date +%Y` +cat > $TMP <<EOF +'\" Copyright (C) 2006 +'\" Free Software Foundation, +'\" Inc. +EOF +update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare /dev/null $TMP-stderr || exit 1 +compare - $TMP <<EOF || exit 1 +'\" Copyright (C) 2006, $YEAR Free Software Foundation, Inc. +EOF +UPDATE_COPYRIGHT_USE_INTERVALS=1 \ + update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare /dev/null $TMP-stderr || exit 1 +compare - $TMP <<EOF || exit 1 +'\" Copyright (C) 2006, $YEAR Free Software Foundation, Inc. +EOF +rm $TMP* + +## ------------------ ## +## Surrounding text. ## +## ------------------ ## + +TMP=$TMP_BASE-surrounding-text +cat > $TMP <<EOF + Undisturbed text. +dnl Undisturbed text. +dnl Copyright (C) 89 +dnl Free Software Foundation, Inc. +dnl Undisturbed text. +EOF +UPDATE_COPYRIGHT_YEAR=2010 \ + update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare /dev/null $TMP-stderr || exit 1 +compare - $TMP <<EOF || exit 1 + Undisturbed text. +dnl Undisturbed text. +dnl Copyright (C) 1989, 2010 Free Software Foundation, Inc. +dnl Undisturbed text. +EOF +rm $TMP* + +## --------------- ## +## Widest prefix. ## +## --------------- ## + +TMP=$TMP_BASE-widest-prefix +cat > $TMP <<EOF +#### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, +#### 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +#### 2008 Free Software Foundation, Inc. +EOF +UPDATE_COPYRIGHT_YEAR=2010 \ + update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare /dev/null $TMP-stderr || exit 1 +compare - $TMP <<EOF || exit 1 +#### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, +#### 1985, 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, +#### 2006, 2007, 2008, 2010 Free Software Foundation, Inc. +EOF +UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=1 \ + update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare /dev/null $TMP-stderr || exit 1 +compare - $TMP <<EOF || exit 1 +#### Copyright (C) 1976-1988, 1999-2008, 2010-2011 Free Software +#### Foundation, Inc. +EOF +rm $TMP* + +## ------------------- ## +## Prefix too large. ## +## ------------------- ## + +TMP=$TMP_BASE-prefix-too-large +cat > $TMP <<EOF +#### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, +#### 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +#### 2008 Free Software Foundation, Inc. +EOF +UPDATE_COPYRIGHT_YEAR=2010 \ + update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare - $TMP-stderr <<EOF || exit 1 +$TMP: warning: FSF copyright statement not found +EOF +compare - $TMP <<EOF || exit 1 +#### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, +#### 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +#### 2008 Free Software Foundation, Inc. +EOF +rm $TMP* + +## ------------- ## +## Blank lines. ## +## ------------- ## + +TMP=$TMP_BASE-blank-lines +cat > $TMP <<EOF +#Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, +# +#1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +#2008 Free Software Foundation, Inc. + +Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, + +1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +2008 Free Software Foundation, Inc. +EOF +UPDATE_COPYRIGHT_YEAR=2010 \ + update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare - $TMP-stderr <<EOF || exit 1 +$TMP: warning: FSF copyright statement not found +EOF +compare - $TMP <<EOF || exit 1 +#Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, +# +#1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +#2008 Free Software Foundation, Inc. + +Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, + +1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +2008 Free Software Foundation, Inc. +EOF +rm $TMP* + +## -------------- ## +## Leading tabs. ## +## -------------- ## + +TMP=$TMP_BASE-leading-tabs +cat > $TMP <<EOF + Copyright (C) 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 98, + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free + Software Foundation, Inc. +EOF +UPDATE_COPYRIGHT_YEAR=2010 \ + update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare /dev/null $TMP-stderr || exit 1 +compare - $TMP <<EOF || exit 1 + Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, + 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +EOF +UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=1 \ + update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare /dev/null $TMP-stderr || exit 1 +compare - $TMP <<EOF || exit 1 + Copyright (C) 1987-1988, 1991-2011 Free Software Foundation, + Inc. +EOF +rm $TMP* + +## -------------------- ## +## Unusual whitespace. ## +## -------------------- ## + +TMP=$TMP_BASE-unusual-ws +cat > $TMP <<EOF + # Copyright (C) 87-88, 1991, 1992, 1993, 1994, 1995, 1996, 1997, + # 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + # 2009 Free Software Foundation, Inc. +EOF +UPDATE_COPYRIGHT_YEAR=2010 \ + update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare /dev/null $TMP-stderr || exit 1 +compare - $TMP <<EOF || exit 1 + # Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, + # 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, + # 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software + # Foundation, Inc. +EOF +UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=1 \ + update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare /dev/null $TMP-stderr || exit 1 +compare - $TMP <<EOF || exit 1 + # Copyright (C) 1987-1988, 1991-2011 Free Software + # Foundation, Inc. +EOF +rm $TMP* + +## --------- ## +## DOS EOL. ## +## --------- ## + +TMP=$TMP_BASE-dos-eol +tr @ '\015' > $TMP <<\EOF +Rem Copyright (C) 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997,@ +Rem 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,@ +Rem 2009 Free Software Foundation, Inc.@ +EOF +UPDATE_COPYRIGHT_YEAR=2010 \ + update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare /dev/null $TMP-stderr || exit 1 +tr @ '\015' > $TMP-exp <<\EOF +Rem Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,@ +Rem 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,@ +Rem 2009, 2010 Free Software Foundation, Inc.@ +EOF +compare $TMP-exp $TMP || exit 1 +rm $TMP* + +## --------------- ## +## Omitted "(C)". ## +## --------------- ## + +TMP=$TMP_BASE-omitted-circle-c +cat > $TMP <<EOF + Copyright 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997, + 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009 Free Software Foundation, Inc. +EOF +UPDATE_COPYRIGHT_YEAR=2010 \ + update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare /dev/null $TMP-stderr || exit 1 +compare - $TMP <<EOF || exit 1 + Copyright 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Free Software Foundation, Inc. +EOF +rm $TMP* + +## ------------------ ## +## C-style comments. ## +## ------------------ ## + +TMP=$TMP_BASE-c-style-comments +cat > $TMP.star <<EOF +/* Copyright 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997, + * 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + * 2009 Free Software Foundation, Inc. */ +EOF +cat > $TMP.space <<EOF + /*Copyright 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997, + 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009 Free Software Foundation, Inc. */ +EOF +cat > $TMP.single-line <<EOF +/* Copyright 87, 1991, 1992 Free Software Foundation, Inc. */ +EOF +cat > $TMP.single-line-wrapped <<EOF + /* Copyright 1988, 1991, 1992, 1993 Free Software Foundation, Inc. */ +EOF +cat > $TMP.extra-text-star <<EOF + /* Copyright 1987, 1988, 1991, 1992 Free Software Foundation, Inc. End + * More comments. */ +EOF +cat > $TMP.extra-text-space <<EOF + /* Copyright 1987, 1988, 1991, 1992 Free Software Foundation, Inc. *** + * End of comments. */ +EOF +UPDATE_COPYRIGHT_YEAR=2010 \ + update-copyright $TMP.* 1> $TMP-stdout 2> $TMP-stderr +compare /dev/null $TMP-stdout || exit 1 +compare /dev/null $TMP-stderr || exit 1 +compare - $TMP.star <<EOF || exit 1 +/* Copyright 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, + * 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + * 2009, 2010 Free Software Foundation, Inc. */ +EOF +compare - $TMP.space <<EOF || exit 1 + /*Copyright 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, + 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009, 2010 Free Software Foundation, Inc. */ +EOF +compare - $TMP.single-line <<EOF || exit 1 +/* Copyright 1987, 1991, 1992, 2010 Free Software Foundation, Inc. */ +EOF +compare - $TMP.single-line-wrapped <<EOF || exit 1 + /* Copyright 1988, 1991, 1992, 1993, 2010 Free Software Foundation, + * Inc. */ +EOF +compare - $TMP.extra-text-star <<EOF || exit 1 + /* Copyright 1987, 1988, 1991, 1992, 2010 Free Software Foundation, + * Inc. End + * More comments. */ +EOF +compare - $TMP.extra-text-space <<EOF || exit 1 + /* Copyright 1987, 1988, 1991, 1992, 2010 Free Software Foundation, + Inc. *** + * End of comments. */ +EOF +rm $TMP* + +exit 0 diff --git a/gnulib-tests/test-usleep.c b/gnulib-tests/test-usleep.c new file mode 100644 index 0000000..23ff171 --- /dev/null +++ b/gnulib-tests/test-usleep.c @@ -0,0 +1,42 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of usleep() function. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2009. */ + +#include <config.h> + +#include <unistd.h> + +#include "signature.h" +SIGNATURE_CHECK (usleep, int, (useconds_t)); + +#include <time.h> + +#include "macros.h" + +int +main (void) +{ + time_t start = time (NULL); + ASSERT (usleep (1000000) == 0); + ASSERT (start < time (NULL)); + + ASSERT (usleep (0) == 0); + + return 0; +} diff --git a/gnulib-tests/test-vc-list-files-cvs.sh b/gnulib-tests/test-vc-list-files-cvs.sh new file mode 100755 index 0000000..43a3b3f --- /dev/null +++ b/gnulib-tests/test-vc-list-files-cvs.sh @@ -0,0 +1,54 @@ +#!/bin/sh +# Unit tests for vc-list-files +# Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. +# This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. */ + +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ . + +tmpdir=vc-cvs +repo=`pwd`/$tmpdir/repo + +fail=0 +for i in with-cvsu without; do + # On the first iteration, test using cvsu, if it's in your path. + # On the second iteration, ensure that cvsu fails, so we'll + # exercise the awk-using code. + if test $i = without; then + printf '%s\n' '#!/bin/sh' 'exit 1' > cvsu + chmod a+x cvsu + PATH=`pwd`:$PATH + export PATH + fi + ok=0 + mkdir $tmpdir && cd $tmpdir && + # without cvs, skip the test + # The double use of 'exit' is needed for the reference to $? inside the trap. + { ( cvs -Q -d "$repo" init ) > /dev/null 2>&1 \ + || skip_ "cvs not found in PATH"; } && + mkdir w && cd w && + mkdir d && + touch d/a b c && + cvs -Q -d "$repo" import -m imp m M M0 && + cvs -Q -d "$repo" co m && cd m && + printf '%s\n' b c d/a > expected && + vc-list-files | sort > actual && + compare expected actual && + ok=1 + test $ok = 0 && fail=1 +done + +Exit $fail diff --git a/gnulib-tests/test-vc-list-files-git.sh b/gnulib-tests/test-vc-list-files-git.sh new file mode 100755 index 0000000..4757625 --- /dev/null +++ b/gnulib-tests/test-vc-list-files-git.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# Unit tests for vc-list-files +# Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. +# This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. */ + +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ . + +tmpdir=vc-git-$$ +GIT_DIR= GIT_WORK_TREE=; unset GIT_DIR GIT_WORK_TREE + +fail=1 +mkdir $tmpdir && cd $tmpdir && + # without git, skip the test + # The double use of 'exit' is needed for the reference to $? inside the trap. + { ( git init -q ) > /dev/null 2>&1 \ + || skip_ "git not found in PATH"; } && + mkdir d && + touch d/a b c && + git config user.email "you@example.com" && + git config user.name "Your Name" && + git add . > /dev/null && + git commit -q -a -m log && + printf '%s\n' b c d/a > expected && + vc-list-files > actual && + compare expected actual && + fail=0 + +Exit $fail diff --git a/gnulib-tests/test-version-etc.c b/gnulib-tests/test-version-etc.c new file mode 100644 index 0000000..6c2e7b0 --- /dev/null +++ b/gnulib-tests/test-version-etc.c @@ -0,0 +1,35 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test suite for version-etc. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "version-etc.h" + +#include "progname.h" + +#define AUTHORS "Sergey Poznyakoff", "Eric Blake" + +int +main (int argc _GL_UNUSED, char **argv) +{ + set_program_name (argv[0]); + version_etc (stdout, "test-version-etc", "dummy", "0", AUTHORS, + (const char *) NULL); + return 0; +} diff --git a/gnulib-tests/test-version-etc.sh b/gnulib-tests/test-version-etc.sh new file mode 100755 index 0000000..61d4046 --- /dev/null +++ b/gnulib-tests/test-version-etc.sh @@ -0,0 +1,43 @@ +#! /bin/sh +# Test suite for version-etc. +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. + +TMP=ve-expected.tmp +LC_ALL=C +export LC_ALL +ERR=0 + +cat > $TMP <<EOT +test-version-etc (PROJECT) VERSION +COPYRIGHT Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later <http://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. + +Written by Sergey Poznyakoff and Eric Blake. +EOT + +./test-version-etc${EXEEXT} --version | + sed '1s/test-version-etc (.*) .*/test-version-etc (PROJECT) VERSION/ + /^Packaged by/d + 2,3 s/Copyright (C) [0-9]\{4,4\}/COPYRIGHT/' | + tr -d '\015' | + diff -c $TMP - || ERR=1 + +rm $TMP + +exit $ERR diff --git a/gnulib-tests/test-wchar.c b/gnulib-tests/test-wchar.c new file mode 100644 index 0000000..d48908b --- /dev/null +++ b/gnulib-tests/test-wchar.c @@ -0,0 +1,39 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <wchar.h> substitute. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <wchar.h> + +#include "verify.h" + +/* Check that the types wchar_t and wint_t are defined. */ +wchar_t a = 'c'; +wint_t b = 'x'; + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +verify (sizeof NULL == sizeof (void *)); + +int +main (void) +{ + return 0; +} diff --git a/gnulib-tests/test-wcrtomb.c b/gnulib-tests/test-wcrtomb.c new file mode 100644 index 0000000..78b1277 --- /dev/null +++ b/gnulib-tests/test-wcrtomb.c @@ -0,0 +1,156 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of conversion of wide character to multibyte character. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include <config.h> + +#include <wchar.h> + +#include "signature.h" +SIGNATURE_CHECK (wcrtomb, size_t, (char *, wchar_t, mbstate_t *)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> + +#include "macros.h" + +/* Check the multibyte character s[0..n-1]. */ +static void +check_character (const char *s, size_t n) +{ + wchar_t wc; + char buf[64]; + int iret; + size_t ret; + + wc = (wchar_t) 0xBADFACE; + iret = mbtowc (&wc, s, n); + ASSERT (iret == n); + + ret = wcrtomb (buf, wc, NULL); + ASSERT (ret == n); + ASSERT (memcmp (buf, s, n) == 0); + + /* Test special calling convention, passing a NULL pointer. */ + ret = wcrtomb (NULL, wc, NULL); + ASSERT (ret == 1); +} + +int +main (int argc, char *argv[]) +{ + char buf[64]; + size_t ret; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test NUL character. */ + { + buf[0] = 'x'; + ret = wcrtomb (buf, 0, NULL); + ASSERT (ret == 1); + ASSERT (buf[0] == '\0'); + } + + /* Test single bytes. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': 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 ';': case '<': case '=': 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': + case '[': case '\\': case ']': 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': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + ret = wcrtomb (buf, btowc (c), NULL); + ASSERT (ret == 1); + ASSERT (buf[0] == (char) c); + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + const char input[] = "B\374\337er"; /* "Büßer" */ + + check_character (input + 1, 1); + check_character (input + 2, 1); + } + return 0; + + case '2': + /* Locale encoding is UTF-8. */ + { + const char input[] = "B\303\274\303\237er"; /* "Büßer" */ + + check_character (input + 1, 2); + check_character (input + 3, 2); + } + return 0; + + case '3': + /* Locale encoding is EUC-JP. */ + { + const char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ + + check_character (input + 1, 2); + check_character (input + 3, 2); + check_character (input + 5, 2); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + { + const char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + + check_character (input + 1, 2); + check_character (input + 3, 4); + } + return 0; + } + + return 1; +} diff --git a/gnulib-tests/test-wcrtomb.sh b/gnulib-tests/test-wcrtomb.sh new file mode 100755 index 0000000..3eda8f3 --- /dev/null +++ b/gnulib-tests/test-wcrtomb.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ./test-wcrtomb${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ./test-wcrtomb${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: ${LOCALE_JA=ja_JP} +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ./test-wcrtomb${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: ${LOCALE_ZH_CN=zh_CN.GB18030} +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ./test-wcrtomb${EXEEXT} 4 \ + || exit 1 +fi + +exit 0 diff --git a/gnulib-tests/test-wctype.c b/gnulib-tests/test-wctype.c new file mode 100644 index 0000000..151cf55 --- /dev/null +++ b/gnulib-tests/test-wctype.c @@ -0,0 +1,72 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of <wctype.h> substitute. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <wctype.h> + +#include "macros.h" + +/* Check that the type wint_t is defined. */ +wint_t a = 'x'; +/* Check that WEOF is defined. */ +wint_t e = WEOF; + +int +main (void) +{ + /* Check that the isw* functions exist as functions or as macros. */ + (void) iswalnum (0); + (void) iswalpha (0); + (void) iswblank (0); + (void) iswcntrl (0); + (void) iswdigit (0); + (void) iswgraph (0); + (void) iswlower (0); + (void) iswprint (0); + (void) iswpunct (0); + (void) iswspace (0); + (void) iswupper (0); + (void) iswxdigit (0); + + /* Check that the isw* functions map WEOF to 0. */ + ASSERT (!iswalnum (e)); + ASSERT (!iswalpha (e)); + ASSERT (!iswblank (e)); + ASSERT (!iswcntrl (e)); + ASSERT (!iswdigit (e)); + ASSERT (!iswgraph (e)); + ASSERT (!iswlower (e)); + ASSERT (!iswprint (e)); + ASSERT (!iswpunct (e)); + ASSERT (!iswspace (e)); + ASSERT (!iswupper (e)); + ASSERT (!iswxdigit (e)); + + /* Check that the tow* functions exist as functions or as macros. */ + (void) towlower (0); + (void) towupper (0); + + /* Check that the tow* functions map WEOF to WEOF. */ + ASSERT (towlower (e) == e); + ASSERT (towupper (e) == e); + + return 0; +} diff --git a/gnulib-tests/test-wcwidth.c b/gnulib-tests/test-wcwidth.c new file mode 100644 index 0000000..db75c51 --- /dev/null +++ b/gnulib-tests/test-wcwidth.c @@ -0,0 +1,83 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of wcwidth() function. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <wchar.h> + +#include "signature.h" +SIGNATURE_CHECK (wcwidth, int, (wchar_t)); + +#include <locale.h> +#include <string.h> + +#include "localcharset.h" +#include "macros.h" + +int +main () +{ + wchar_t wc; + + /* Test width of ASCII characters. */ + for (wc = 0x20; wc < 0x7F; wc++) + ASSERT (wcwidth (wc) == 1); + + /* Switch to an UTF-8 locale. */ + if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL + /* Check whether it's really an UTF-8 locale. + On OpenBSD 4.0, the setlocale call succeeds only for the LC_CTYPE + category and therefore returns "C/fr_FR.UTF-8/C/C/C/C", but the + LC_CTYPE category is effectively set to an ASCII LC_CTYPE category; + in particular, locale_charset() returns "ASCII". */ + && strcmp (locale_charset (), "UTF-8") == 0) + { + /* Test width of ASCII characters. */ + for (wc = 0x20; wc < 0x7F; wc++) + ASSERT (wcwidth (wc) == 1); + + /* Test width of some non-spacing characters. */ + ASSERT (wcwidth (0x0301) == 0); + ASSERT (wcwidth (0x05B0) == 0); + + /* Test width of some format control characters. */ + ASSERT (wcwidth (0x200E) <= 0); + ASSERT (wcwidth (0x2060) <= 0); +#if 0 /* wchar_t may be only 16 bits. */ + ASSERT (wcwidth (0xE0001) <= 0); + ASSERT (wcwidth (0xE0044) <= 0); +#endif + + /* Test width of some zero width characters. */ + ASSERT (wcwidth (0x200B) == 0); + ASSERT (wcwidth (0xFEFF) <= 0); + + /* Test width of some CJK characters. */ + ASSERT (wcwidth (0x3000) == 2); + ASSERT (wcwidth (0xB250) == 2); + ASSERT (wcwidth (0xFF1A) == 2); +#if 0 /* wchar_t may be only 16 bits. */ + ASSERT (wcwidth (0x20369) == 2); + ASSERT (wcwidth (0x2F876) == 2); +#endif + } + + return 0; +} diff --git a/gnulib-tests/test-xalloc-die.c b/gnulib-tests/test-xalloc-die.c new file mode 100644 index 0000000..1fd33b3 --- /dev/null +++ b/gnulib-tests/test-xalloc-die.c @@ -0,0 +1,32 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of xalloc_die() function. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Simon Josefsson <simon@josefsson.org>, 2009. */ + +#include <config.h> + +#include "xalloc.h" +#include "progname.h" + +int +main (int argc _GL_UNUSED, char **argv) +{ + set_program_name (argv[0]); + xalloc_die (); + return 0; +} diff --git a/gnulib-tests/test-xalloc-die.sh b/gnulib-tests/test-xalloc-die.sh new file mode 100755 index 0000000..375cd14 --- /dev/null +++ b/gnulib-tests/test-xalloc-die.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# Test suite for xalloc_die. +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# This file is part of the GNUlib 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 <http://www.gnu.org/licenses/>. + +. "${srcdir=.}/init.sh"; path_prepend_ . + +test-xalloc-die${EXEEXT} > out 2> err +case $? in + 1) ;; + *) Exit 1;; +esac + +tr -d '\015' < err \ + | sed 's,.*test-xalloc-die[.ex]*:,test-xalloc-die:,' > err2 || Exit 1 + +compare - err2 <<\EOF || Exit 1 +test-xalloc-die: memory exhausted +EOF + +test -s out && Exit 1 + +Exit $fail diff --git a/gnulib-tests/test-xstrtol.c b/gnulib-tests/test-xstrtol.c new file mode 100644 index 0000000..c8b9f63 --- /dev/null +++ b/gnulib-tests/test-xstrtol.c @@ -0,0 +1,68 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of xstrtol module. + Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 <inttypes.h> +#include <stdlib.h> +#include <stdio.h> + +#include "xstrtol.h" +#include "error.h" + +#ifndef __xstrtol +# define __xstrtol xstrtol +# define __strtol_t long int +# define __spec "ld" +#endif + +char *program_name; + +/* Don't show the program name in error messages. */ +static void +print_no_progname (void) +{ +} + +int +main (int argc, char **argv) +{ + strtol_error s_err; + int i; + + program_name = argv[0]; + error_print_progname = print_no_progname; + + for (i = 1; i < argc; i++) + { + char *p; + __strtol_t val; + + s_err = __xstrtol (argv[i], &p, 0, &val, "bckMw0"); + if (s_err == LONGINT_OK) + { + printf ("%s->%" __spec " (%s)\n", argv[i], val, p); + } + else + { + xstrtol_fatal (s_err, -2, 'X', NULL, argv[i]); + } + } + exit (0); +} diff --git a/gnulib-tests/test-xstrtol.sh b/gnulib-tests/test-xstrtol.sh new file mode 100755 index 0000000..1a2f7ca --- /dev/null +++ b/gnulib-tests/test-xstrtol.sh @@ -0,0 +1,67 @@ +#!/bin/sh +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ . + +too_big=99999999999999999999999999999999999999999999999999999999999999999999 +result=0 + +# test xstrtol +test-xstrtol 1 >> out 2>&1 || result=1 +test-xstrtol -1 >> out 2>&1 || result=1 +test-xstrtol 1k >> out 2>&1 || result=1 +test-xstrtol ${too_big}h >> out 2>&1 && result=1 +test-xstrtol $too_big >> out 2>&1 && result=1 +test-xstrtol x >> out 2>&1 && result=1 +test-xstrtol 9x >> out 2>&1 && result=1 +test-xstrtol 010 >> out 2>&1 || result=1 +# suffix without integer is valid +test-xstrtol MiB >> out 2>&1 || result=1 + +# test xstrtoul +test-xstrtoul 1 >> out 2>&1 || result=1 +test-xstrtoul -1 >> out 2>&1 && result=1 +test-xstrtoul 1k >> out 2>&1 || result=1 +test-xstrtoul ${too_big}h >> out 2>&1 && result=1 +test-xstrtoul $too_big >> out 2>&1 && result=1 +test-xstrtoul x >> out 2>&1 && result=1 +test-xstrtoul 9x >> out 2>&1 && result=1 +test-xstrtoul 010 >> out 2>&1 || result=1 +test-xstrtoul MiB >> out 2>&1 || result=1 + +# Find out how to remove carriage returns from output. Solaris /usr/ucb/tr +# does not understand '\r'. +if echo solaris | tr -d '\r' | grep solais > /dev/null; then + cr='\015' +else + cr='\r' +fi + +# normalize output +LC_ALL=C tr -d "$cr" < out > k +mv k out + +# compare expected output +cat > expected <<EOF +1->1 () +-1->-1 () +1k->1024 () +invalid suffix in X argument \`${too_big}h' +X argument \`$too_big' too large +invalid X argument \`x' +invalid suffix in X argument \`9x' +010->8 () +MiB->1048576 () +1->1 () +invalid X argument \`-1' +1k->1024 () +invalid suffix in X argument \`${too_big}h' +X argument \`$too_big' too large +invalid X argument \`x' +invalid suffix in X argument \`9x' +010->8 () +MiB->1048576 () +EOF + +compare expected out || result=1 + +Exit $result diff --git a/gnulib-tests/test-xstrtoul.c b/gnulib-tests/test-xstrtoul.c new file mode 100644 index 0000000..a6ba35f --- /dev/null +++ b/gnulib-tests/test-xstrtoul.c @@ -0,0 +1,6 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +#define __xstrtol xstrtoul +#define __strtol_t unsigned long int +#define __spec "lu" +#include "test-xstrtol.c" diff --git a/gnulib-tests/test-xstrtoumax.c b/gnulib-tests/test-xstrtoumax.c new file mode 100644 index 0000000..6583d27 --- /dev/null +++ b/gnulib-tests/test-xstrtoumax.c @@ -0,0 +1,6 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +#define __xstrtol xstrtoumax +#define __strtol_t uintmax_t +#define __spec PRIuMAX +#include "test-xstrtol.c" diff --git a/gnulib-tests/test-xstrtoumax.sh b/gnulib-tests/test-xstrtoumax.sh new file mode 100755 index 0000000..68abb93 --- /dev/null +++ b/gnulib-tests/test-xstrtoumax.sh @@ -0,0 +1,46 @@ +#!/bin/sh +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ . + +too_big=99999999999999999999999999999999999999999999999999999999999999999999 +result=0 + +# test xstrtoumax +test-xstrtoumax 1 >> out 2>&1 || result=1 +test-xstrtoumax -1 >> out 2>&1 && result=1 +test-xstrtoumax 1k >> out 2>&1 || result=1 +test-xstrtoumax ${too_big}h >> out 2>&1 && result=1 +test-xstrtoumax $too_big >> out 2>&1 && result=1 +test-xstrtoumax x >> out 2>&1 && result=1 +test-xstrtoumax 9x >> out 2>&1 && result=1 +test-xstrtoumax 010 >> out 2>&1 || result=1 +test-xstrtoumax MiB >> out 2>&1 || result=1 + +# Find out how to remove carriage returns from output. Solaris /usr/ucb/tr +# does not understand '\r'. +if echo solaris | tr -d '\r' | grep solais > /dev/null; then + cr='\015' +else + cr='\r' +fi + +# normalize output +LC_ALL=C tr -d "$cr" < out > k +mv k out + +# compare expected output +cat > exp <<EOF +1->1 () +invalid X argument \`-1' +1k->1024 () +invalid suffix in X argument \`${too_big}h' +X argument \`$too_big' too large +invalid X argument \`x' +invalid suffix in X argument \`9x' +010->8 () +MiB->1048576 () +EOF + +compare exp out || result=1 + +Exit $result diff --git a/gnulib-tests/uniwidth/test-uc_width.c b/gnulib-tests/uniwidth/test-uc_width.c new file mode 100644 index 0000000..d7eebd5 --- /dev/null +++ b/gnulib-tests/uniwidth/test-uc_width.c @@ -0,0 +1,58 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of uc_width() function. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include "uniwidth.h" + +#include "macros.h" + +int +main () +{ + ucs4_t uc; + + /* Test width of ASCII characters. */ + for (uc = 0x0020; uc < 0x007F; uc++) + ASSERT (uc_width (uc, "ISO-8859-2") == 1); + + /* Test width of some non-spacing characters. */ + ASSERT (uc_width (0x0301, "UTF-8") == 0); + ASSERT (uc_width (0x05B0, "UTF-8") == 0); + + /* Test width of some format control characters. */ + ASSERT (uc_width (0x200E, "UTF-8") == 0); + ASSERT (uc_width (0x2060, "UTF-8") == 0); + ASSERT (uc_width (0xE0001, "UTF-8") == 0); + ASSERT (uc_width (0xE0044, "UTF-8") == 0); + + /* Test width of some zero width characters. */ + ASSERT (uc_width (0x200B, "UTF-8") == 0); + ASSERT (uc_width (0xFEFF, "UTF-8") == 0); + + /* Test width of some CJK characters. */ + ASSERT (uc_width (0x3000, "UTF-8") == 2); + ASSERT (uc_width (0xB250, "UTF-8") == 2); + ASSERT (uc_width (0xFF1A, "UTF-8") == 2); + ASSERT (uc_width (0x20369, "UTF-8") == 2); + ASSERT (uc_width (0x2F876, "UTF-8") == 2); + + return 0; +} diff --git a/gnulib-tests/uniwidth/test-uc_width2.c b/gnulib-tests/uniwidth/test-uc_width2.c new file mode 100644 index 0000000..b82aae6 --- /dev/null +++ b/gnulib-tests/uniwidth/test-uc_width2.c @@ -0,0 +1,88 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test of uc_width() function. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include <config.h> + +#include "uniwidth.h" + +#include <stdio.h> + +#include "macros.h" + +/* One of 0, '0', '1', 'A', '2'. */ +static char current_width; +/* The interval for which the current_width holds. */ +static ucs4_t current_start; +static ucs4_t current_end; + +static void +finish_interval (void) +{ + if (current_width != 0) + { + if (current_start == current_end) + printf ("%04X\t\t%c\n", (unsigned) current_start, current_width); + else + printf ("%04X..%04X\t%c\n", (unsigned) current_start, + (unsigned) current_end, current_width); + current_width = 0; + } +} + +static void +add_to_interval (ucs4_t uc, char width) +{ + if (current_width == width && uc == current_end + 1) + current_end = uc; + else + { + finish_interval (); + current_width = width; + current_start = current_end = uc; + } +} + +int +main () +{ + ucs4_t uc; + + for (uc = 0; uc < 0x110000; uc++) + { + int w1 = uc_width (uc, "UTF-8"); + int w2 = uc_width (uc, "GBK"); + char width = + (w1 == 0 && w2 == 0 ? '0' : + w1 == 1 && w2 == 1 ? '1' : + w1 == 1 && w2 == 2 ? 'A' : + w1 == 2 && w2 == 2 ? '2' : + 0); + if (width == 0) + { + /* uc must be a control character. */ + ASSERT (w1 < 0 && w2 < 0); + } + else + add_to_interval (uc, width); + } + finish_interval (); + + return 0; +} diff --git a/gnulib-tests/uniwidth/test-uc_width2.sh b/gnulib-tests/uniwidth/test-uc_width2.sh new file mode 100755 index 0000000..484288c --- /dev/null +++ b/gnulib-tests/uniwidth/test-uc_width2.sh @@ -0,0 +1,382 @@ +#!/bin/sh + +tmpfiles="" +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="$tmpfiles uc_width.out" +./test-uc_width2${EXEEXT} | LC_ALL=C tr -d '\r' > uc_width.out + +tmpfiles="$tmpfiles uc_width.ok" +cat > uc_width.ok <<\EOF +0000 0 +0020..007E 1 +00A0 1 +00A1..00AC A +00AD 0 +00AE..02FF A +0300..036F 0 +0370..0482 A +0483..0489 0 +048A..0590 A +0591..05BD 0 +05BE A +05BF 0 +05C0 A +05C1..05C2 0 +05C3 A +05C4..05C5 0 +05C6 A +05C7 0 +05C8..05FF A +0600..0603 0 +0604..060F A +0610..061A 0 +061B..064A A +064B..065E 0 +065F..066F A +0670 0 +0671..06D5 A +06D6..06E4 0 +06E5..06E6 A +06E7..06E8 0 +06E9 A +06EA..06ED 0 +06EE..070E A +070F 0 +0710 A +0711 0 +0712..072F A +0730..074A 0 +074B..07A5 A +07A6..07B0 0 +07B1..07EA A +07EB..07F3 0 +07F4..0900 A +0901..0902 0 +0903..093B A +093C 0 +093D..0940 A +0941..0948 0 +0949..094C A +094D 0 +094E..0950 A +0951..0954 0 +0955..0961 A +0962..0963 0 +0964..0980 A +0981 0 +0982..09BB A +09BC 0 +09BD..09C0 A +09C1..09C4 0 +09C5..09CC A +09CD 0 +09CE..09E1 A +09E2..09E3 0 +09E4..0A00 A +0A01..0A02 0 +0A03..0A3B A +0A3C 0 +0A3D..0A40 A +0A41..0A42 0 +0A43..0A46 A +0A47..0A48 0 +0A49..0A4A A +0A4B..0A4D 0 +0A4E..0A50 A +0A51 0 +0A52..0A6F A +0A70..0A71 0 +0A72..0A74 A +0A75 0 +0A76..0A80 A +0A81..0A82 0 +0A83..0ABB A +0ABC 0 +0ABD..0AC0 A +0AC1..0AC5 0 +0AC6 A +0AC7..0AC8 0 +0AC9..0ACC A +0ACD 0 +0ACE..0AE1 A +0AE2..0AE3 0 +0AE4..0B00 A +0B01 0 +0B02..0B3B A +0B3C 0 +0B3D..0B3E A +0B3F 0 +0B40 A +0B41..0B44 0 +0B45..0B4C A +0B4D 0 +0B4E..0B55 A +0B56 0 +0B57..0B61 A +0B62..0B63 0 +0B64..0B81 A +0B82 0 +0B83..0BBF A +0BC0 0 +0BC1..0BCC A +0BCD 0 +0BCE..0C3D A +0C3E..0C40 0 +0C41..0C45 A +0C46..0C48 0 +0C49 A +0C4A..0C4D 0 +0C4E..0C54 A +0C55..0C56 0 +0C57..0C61 A +0C62..0C63 0 +0C64..0CBB A +0CBC 0 +0CBD..0CCB A +0CCC..0CCD 0 +0CCE..0CE1 A +0CE2..0CE3 0 +0CE4..0D40 A +0D41..0D44 0 +0D45..0D4C A +0D4D 0 +0D4E..0D61 A +0D62..0D63 0 +0D64..0DC9 A +0DCA 0 +0DCB..0DD1 A +0DD2..0DD4 0 +0DD5 A +0DD6 0 +0DD7..0E30 A +0E31 0 +0E32..0E33 A +0E34..0E3A 0 +0E3B..0E46 A +0E47..0E4E 0 +0E4F..0EB0 A +0EB1 0 +0EB2..0EB3 A +0EB4..0EB9 0 +0EBA A +0EBB..0EBC 0 +0EBD..0EC7 A +0EC8..0ECD 0 +0ECE..0F17 A +0F18..0F19 0 +0F1A..0F34 A +0F35 0 +0F36 A +0F37 0 +0F38 A +0F39 0 +0F3A..0F70 A +0F71..0F7E 0 +0F7F A +0F80..0F84 0 +0F85 A +0F86..0F87 0 +0F88..0F8F A +0F90..0F97 0 +0F98 A +0F99..0FBC 0 +0FBD..0FC5 A +0FC6 0 +0FC7..102C A +102D..1030 0 +1031 A +1032..1037 0 +1038 A +1039..103A 0 +103B..103C A +103D..103E 0 +103F..1057 A +1058..1059 0 +105A..105D A +105E..1060 0 +1061..1070 A +1071..1074 0 +1075..1081 A +1082 0 +1083..1084 A +1085..1086 0 +1087..108C A +108D 0 +108E..10FF A +1100..115F 2 +1160..135E A +135F 0 +1360..1711 A +1712..1714 0 +1715..1731 A +1732..1734 0 +1735..1751 A +1752..1753 0 +1754..1771 A +1772..1773 0 +1774..17B3 A +17B4..17B5 0 +17B6 A +17B7..17BD 0 +17BE..17C5 A +17C6 0 +17C7..17C8 A +17C9..17D3 0 +17D4..17DC A +17DD 0 +17DE..180A A +180B..180D 0 +180E..18A8 A +18A9 0 +18AA..191F A +1920..1922 0 +1923..1926 A +1927..1928 0 +1929..1931 A +1932 0 +1933..1938 A +1939..193B 0 +193C..1A16 A +1A17..1A18 0 +1A19..1AFF A +1B00..1B03 0 +1B04..1B33 A +1B34 0 +1B35 A +1B36..1B3A 0 +1B3B A +1B3C 0 +1B3D..1B41 A +1B42 0 +1B43..1B6A A +1B6B..1B73 0 +1B74..1B7F A +1B80..1B81 0 +1B82..1BA1 A +1BA2..1BA5 0 +1BA6..1BA7 A +1BA8..1BA9 0 +1BAA..1C2B A +1C2C..1C33 0 +1C34..1C35 A +1C36..1C37 0 +1C38..1DBF A +1DC0..1DE6 0 +1DE7..1DFD A +1DFE..1DFF 0 +1E00..200A A +200B..200F 0 +2010..2029 A +202A..202E 0 +202F..205F A +2060..2064 0 +2065..2069 A +206A..206F 0 +2070..20A8 A +20A9 1 +20AA..20CF A +20D0..20F0 0 +20F1..2328 A +2329..232A 2 +232B..2DDF A +2DE0..2DFF 0 +2E00..2E7F A +2E80..3029 2 +302A..302F 0 +3030..303E 2 +303F A +3040..3098 2 +3099..309A 0 +309B..4DBF 2 +4DC0..4DFF A +4E00..A4CF 2 +A4D0..A66E A +A66F..A672 0 +A673..A67B A +A67C..A67D 0 +A67E..A801 A +A802 0 +A803..A805 A +A806 0 +A807..A80A A +A80B 0 +A80C..A824 A +A825..A826 0 +A827..A8C3 A +A8C4 0 +A8C5..A925 A +A926..A92D 0 +A92E..A946 A +A947..A951 0 +A952..AA28 A +AA29..AA2E 0 +AA2F..AA30 A +AA31..AA32 0 +AA33..AA34 A +AA35..AA36 0 +AA37..AA42 A +AA43 0 +AA44..AA4B A +AA4C 0 +AA4D..ABFF A +AC00..D7A3 2 +D7A4..F8FF A +F900..FAFF 2 +FB00..FB1D A +FB1E 0 +FB1F..FDFF A +FE00..FE0F 0 +FE10..FE1F 2 +FE20..FE26 0 +FE27..FE2F A +FE30..FE6F 2 +FE70..FEFE A +FEFF 0 +FF00..FF60 2 +FF61..FFDF 1 +FFE0..FFE6 2 +FFE7..FFF8 1 +FFF9..FFFB 0 +FFFC..101FC 1 +101FD 0 +101FE..10A00 1 +10A01..10A03 0 +10A04 1 +10A05..10A06 0 +10A07..10A0B 1 +10A0C..10A0F 0 +10A10..10A37 1 +10A38..10A3A 0 +10A3B..10A3E 1 +10A3F 0 +10A40..1D166 1 +1D167..1D169 0 +1D16A..1D17A 1 +1D17B..1D182 0 +1D183..1D184 1 +1D185..1D18B 0 +1D18C..1D1A9 1 +1D1AA..1D1AD 0 +1D1AE..1D241 1 +1D242..1D244 0 +1D245..1FFFF 1 +20000..2A6D6 2 +2A6D7..2F7FF 1 +2F800..2FA1D 2 +2FA1E..E0000 1 +E0001 0 +E0002..E001F 1 +E0020..E007F 0 +E0080..E00FF 1 +E0100..E01EF 0 +E01F0..10FFFF 1 +EOF + +: ${DIFF=diff} +${DIFF} uc_width.ok uc_width.out +result=$? + +rm -fr $tmpfiles + +exit $result diff --git a/gnulib-tests/unsetenv.c b/gnulib-tests/unsetenv.c new file mode 100644 index 0000000..d22a29a --- /dev/null +++ b/gnulib-tests/unsetenv.c @@ -0,0 +1,122 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 1992, 1995-2002, 2005-2010 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc + optimizes away the name == NULL test below. */ +#define _GL_ARG_NONNULL(params) + +/* 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 + +/* 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/gnulib-tests/usleep.c b/gnulib-tests/usleep.c new file mode 100644 index 0000000..7df3501 --- /dev/null +++ b/gnulib-tests/usleep.c @@ -0,0 +1,60 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Pausing execution of the current thread. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + Written by Eric Blake <ebb9@byu.net>, 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 <http://www.gnu.org/licenses/>. */ + +/* This file is _intentionally_ light-weight. Rather than using + select or nanosleep, both of which drag in external libraries on + some platforms, this merely rounds up to the nearest second if + usleep() does not exist. If sub-second resolution is important, + then use a more powerful interface to begin with. */ + +#include <config.h> + +/* Specification. */ +#include <unistd.h> + +#include <errno.h> + +#ifndef HAVE_USLEEP +# define HAVE_USLEEP 0 +#endif + +/* Sleep for MICRO microseconds, which can be greater than 1 second. + Return -1 and set errno to EINVAL on range error (about 4295 + seconds), or 0 on success. Interaction with SIGALARM is + unspecified. */ + +int +usleep (useconds_t micro) +{ + unsigned int seconds = micro / 1000000; + if (sizeof seconds < sizeof micro && micro / 1000000 != seconds) + { + errno = EINVAL; + return -1; + } + if (!HAVE_USLEEP && micro % 1000000) + seconds++; + while ((seconds = sleep (seconds)) != 0); + +#undef usleep +#if !HAVE_USLEEP +# define usleep(x) 0 +#endif + return usleep (micro % 1000000); +} diff --git a/gnulib-tests/wctob.c b/gnulib-tests/wctob.c new file mode 100644 index 0000000..7c828c5 --- /dev/null +++ b/gnulib-tests/wctob.c @@ -0,0 +1,40 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Convert wide character to unibyte character. + Copyright (C) 2008, 2010 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 <http://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/gnulib-tests/zerosize-ptr.h b/gnulib-tests/zerosize-ptr.h new file mode 100644 index 0000000..201cf6e --- /dev/null +++ b/gnulib-tests/zerosize-ptr.h @@ -0,0 +1,70 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Return a pointer to a zero-size object in memory. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* ISO C 99 does not allow memcmp(), memchr() etc. to be invoked with a NULL + argument. Therefore this file produces a non-NULL pointer which cannot + be dereferenced, if possible. */ + +#include <stdlib.h> + +/* Test whether mmap() and mprotect() are available. + We don't use HAVE_MMAP, because AC_FUNC_MMAP would not define it on HP-UX. + HAVE_MPROTECT is not enough, because mingw does not have mmap() but has an + mprotect() function in libgcc.a. */ +#if HAVE_SYS_MMAN_H && HAVE_MPROTECT +# include <fcntl.h> +# include <unistd.h> +# include <sys/types.h> +# include <sys/mman.h> +/* Define MAP_FILE when it isn't otherwise. */ +# ifndef MAP_FILE +# define MAP_FILE 0 +# endif +#endif + +/* Return a pointer to a zero-size object in memory (that is, actually, a + pointer to a page boundary where the previous page is readable and writable + and the next page is neither readable not writable), if possible. + Return NULL otherwise. */ + +static void * +zerosize_ptr (void) +{ +/* Use mmap and mprotect when they exist. Don't test HAVE_MMAP, because it is + not defined on HP-UX 11 (since it does not support MAP_FIXED). */ +#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) + return two_pages + pagesize; + } +#endif + return NULL; +} diff --git a/lib/Makefile.am b/lib/Makefile.am new file mode 100644 index 0000000..0e31a45 --- /dev/null +++ b/lib/Makefile.am @@ -0,0 +1,23 @@ +# Automakefile for GNU Diffutils library. + +# Copyright (C) 2001-2002, 2004, 2006, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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 gnulib.mk + +noinst_HEADERS += cmpbuf.h prepargs.h +libdiffutils_a_SOURCES += cmpbuf.c prepargs.c + +AM_CFLAGS += $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS) diff --git a/lib/Makefile.in b/lib/Makefile.in new file mode 100644 index 0000000..00c4fba --- /dev/null +++ b/lib/Makefile.in @@ -0,0 +1,2555 @@ +# Makefile.in generated by automake 1.11a from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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@ + +# Automakefile for GNU Diffutils library. + +# Copyright (C) 2001-2002, 2004, 2006, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +# Copyright (C) 2002-2010 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. 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 --dir=. --local-dir=gl --lib=libdiffutils --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=gnulib-tests --aux-dir=build-aux --with-tests --no-libtool --macro-prefix=gl announce-gen c-stack config-h diffseq dirname do-release-commit-and-tag dup2 error exclude exit exitfail extensions fcntl fdl file-type fnmatch-gnu getopt gettext gettime git-version-gen gitlog-to-changelog gnu-make gnu-web-doc-update gnumakefile gnupload hard-locale inttostr inttypes maintainer-makefile manywarnings mbrtowc mkstemp mktime progname propername regex sh-quote stat-macros stat-time strcase strftime strptime strtoumax sys_wait timegm unistd unlocked-io update-copyright verify version-etc version-etc-fsf wcwidth xalloc xfreopen xstrtoumax + + + +VPATH = @srcdir@ +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@ +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.hin $(srcdir)/gnulib.mk \ + alloca.c +subdir = lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/c-stack.m4 \ + $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.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/exclude.m4 \ + $(top_srcdir)/m4/extensions.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/file-type.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/freopen.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21_gl.m4 $(top_srcdir)/m4/gnu-make.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \ + $(top_srcdir)/m4/iconv_open.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lib-ld_gl.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix_gl.m4 \ + $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-tr.m4 \ + $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/longlong_gl.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/manywarnings.m4 \ + $(top_srcdir)/m4/mbchar.m4 $(top_srcdir)/m4/mbiter.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbslen.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/memchr.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/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/onceonly.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po_gl.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/putenv.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.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/stdio-safer.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/strftime.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strptime.m4 \ + $(top_srcdir)/m4/strtoimax.m4 $(top_srcdir)/m4/strtol.m4 \ + $(top_srcdir)/m4/strtoll.m4 $(top_srcdir)/m4/strtoul.m4 \ + $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/strtoumax.m4 \ + $(top_srcdir)/m4/symlink.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/time_h.m4 \ + $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/vararrays.m4 \ + $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.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/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \ + $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xstrtol.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +AM_V_AR = $(am__v_AR_$(V)) +am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY)) +am__v_AR_0 = @echo " AR " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +libdiffutils_a_AR = $(AR) $(ARFLAGS) +am__DEPENDENCIES_1 = +am__dirstamp = $(am__leading_dot)dirstamp +am_libdiffutils_a_OBJECTS = c-ctype.$(OBJEXT) c-stack.$(OBJEXT) \ + c-strcasecmp.$(OBJEXT) c-strncasecmp.$(OBJEXT) \ + exitfail.$(OBJEXT) localcharset.$(OBJEXT) malloca.$(OBJEXT) \ + mbchar.$(OBJEXT) mbscasecmp.$(OBJEXT) mbslen.$(OBJEXT) \ + mbsstr.$(OBJEXT) progname.$(OBJEXT) propername.$(OBJEXT) \ + sh-quote.$(OBJEXT) striconv.$(OBJEXT) strnlen1.$(OBJEXT) \ + trim.$(OBJEXT) uniwidth/width.$(OBJEXT) version-etc.$(OBJEXT) \ + version-etc-fsf.$(OBJEXT) xalloc-die.$(OBJEXT) \ + xfreopen.$(OBJEXT) xstriconv.$(OBJEXT) xstrndup.$(OBJEXT) \ + xstrtoumax.$(OBJEXT) cmpbuf.$(OBJEXT) prepargs.$(OBJEXT) +libdiffutils_a_OBJECTS = $(am_libdiffutils_a_OBJECTS) +LTLIBRARIES = $(noinst_LTLIBRARIES) +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) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +CCLD = $(CC) +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_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libdiffutils_a_SOURCES) $(EXTRA_libdiffutils_a_SOURCES) +DIST_SOURCES = $(libdiffutils_a_SOURCES) \ + $(EXTRA_libdiffutils_a_SOURCES) +RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive +HEADERS = $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +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@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +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@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +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@ +FNMATCH_H = @FNMATCH_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +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_FFLUSH = @GNULIB_FFLUSH@ +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_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +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_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_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +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_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_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STAT = @GNULIB_STAT@ +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_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_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ +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_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WARN_CFLAGS = @GNULIB_WARN_CFLAGS@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +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_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +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_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_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +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_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +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_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LIBSIGSEGV = @HAVE_LIBSIGSEGV@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOCALTIME_R = @HAVE_LOCALTIME_R@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +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_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +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_SLEEP = @HAVE_SLEEP@ +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_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_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_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_TIMEGM = @HAVE_TIMEGM@ +HAVE_TTYNAME_R = @HAVE_TTYNAME_R@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +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_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HELP2MAN = @HELP2MAN@ +ICONV_H = @ICONV_H@ +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@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBDIFFUTILS_LIBDEPS = @LIBDIFFUTILS_LIBDEPS@ +LIBDIFFUTILS_LTLIBDEPS = @LIBDIFFUTILS_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSIGSEGV = @LIBSIGSEGV@ +LIBSIGSEGV_PREFIX = @LIBSIGSEGV_PREFIX@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +MAKEINFO = @MAKEINFO@ +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_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_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_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_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_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_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_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_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_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_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@ +OBJEXT = @OBJEXT@ +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@ +POSUB = @POSUB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PR_PROGRAM = @PR_PROGRAM@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +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_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +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_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_NANOSLEEP = @REPLACE_NANOSLEEP@ +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_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +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_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +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_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +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_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_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_aux_dir = @abs_aux_dir@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +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@ +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@ +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@ +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.5 gnits subdir-objects +SUBDIRS = +noinst_HEADERS = cmpbuf.h prepargs.h +noinst_LIBRARIES = libdiffutils.a +noinst_LTLIBRARIES = + +# This is for those projects which use "gettextize --intl" to put a source-code +# copy of libintl into their package. In such projects, every Makefile.am needs +# -I$(top_builddir)/intl, so that <libintl.h> can be found in this directory. +# For the Makefile.ams in other directories it is the maintainer's +# responsibility; for the one from gnulib we do it here. +# This option has no effect when the user disables NLS (because then the intl +# directory contains no libintl.h file) or when the project does not use +# "gettextize --intl". +#AM_CPPFLAGS += -I$(top_builddir)/intl + +#if GNU_MAKE +# [nicer features that work only with GNU Make] +#else +# [fallback features that work in any 'make' implementation; see +# http://www.opengroup.org/susv3/utilities/make.html +# for the 2004 POSIX specification] +#endif +EXTRA_DIST = alloca.c alloca.in.h $(top_srcdir)/build-aux/announce-gen \ + $(top_srcdir)/build-aux/arg-nonnull.h btowc.c \ + $(top_srcdir)/build-aux/c++defs.h basename.c dirname.c \ + stripslash.c basename-lgpl.c dirname-lgpl.c dirname.h \ + stripslash.c $(top_srcdir)/build-aux/do-release-commit-and-tag \ + dup2.c errno.in.h error.c error.h exclude.c exclude.h \ + exitfail.h fcntl.c fcntl.in.h file-type.c file-type.h \ + fnmatch.c fnmatch.in.h fnmatch_loop.c freopen.c \ + freopen-safer.c stdio--.h stdio-safer.h \ + $(top_srcdir)/build-aux/gendocs.sh getdtablesize.c getopt.c \ + getopt.in.h getopt1.c getopt_int.h \ + $(top_srcdir)/build-aux/config.rpath gettime.c gettimeofday.c \ + $(top_srcdir)/build-aux/git-version-gen \ + $(top_srcdir)/build-aux/gitlog-to-changelog \ + $(top_srcdir)/build-aux/gnu-web-doc-update \ + $(top_srcdir)/GNUmakefile $(top_srcdir)/build-aux/gnupload \ + hard-locale.c hard-locale.h hash.c hash.h \ + $(top_srcdir)/build-aux/config.rpath iconv.in.h \ + iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h \ + iconv_open-osf.h iconv_open-solaris.h iconv_open-aix.gperf \ + iconv_open-hpux.gperf iconv_open-irix.gperf \ + iconv_open-osf.gperf iconv_open-solaris.gperf iconv_open.c \ + intprops.h imaxtostr.c inttostr.c inttostr.h offtostr.c \ + uinttostr.c umaxtostr.c inttypes.in.h langinfo.in.h \ + config.charset ref-add.sin ref-del.sin lstat.c \ + $(top_srcdir)/maint.mk malloc.c malloc.c malloca.h \ + malloca.valgrind mbchar.h mbrlen.c mbrtowc.c mbsinit.c \ + mbsrtowcs-state.c mbsrtowcs.c str-kmp.h memchr.c \ + memchr.valgrind mkstemp.c mktime-internal.h mktime.c \ + nl_langinfo.c open.c quote.c quote.h quotearg.c quotearg.h \ + regcomp.c regex.c regex.h regex_internal.c regex_internal.h \ + regexec.c sig-handler.h sigaction.c signal.in.h sigprocmask.c \ + stat.c stat-macros.h stat-time.h stdarg.in.h stdbool.in.h \ + stddef.in.h stdint.in.h stdio-write.c stdio.in.h stdlib.in.h \ + strcasecmp.c strncasecmp.c streq.h strerror.c strftime.c \ + strftime.h string.in.h strings.in.h strndup.c strnlen.c \ + strptime.c strtoimax.c strtol.c strtoll.c strtoul.c strtoull.c \ + strtoumax.c sys_stat.in.h sys_time.in.h sys_wait.in.h \ + tempname.c tempname.h time.in.h time_r.c mktime-internal.h \ + timegm.c timespec.h trim.h unistd.in.h unitypes.h \ + localcharset.h uniwidth.h uniwidth/cjk.h unlocked-io.h \ + $(top_srcdir)/build-aux/update-copyright \ + $(top_srcdir)/build-aux/useless-if-before-free \ + $(top_srcdir)/build-aux/vc-list-files \ + $(top_srcdir)/build-aux/warn-on-use.h wchar.in.h wcrtomb.c \ + wctype.in.h wcwidth.c xalloc.h xmalloc.c xstrtol-error.c \ + xstrtol.c xstrtol.h xstrtoul.c + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. +BUILT_SOURCES = $(ALLOCA_H) arg-nonnull.h c++defs.h configmake.h \ + $(ERRNO_H) fcntl.h $(FNMATCH_H) $(GETOPT_H) $(ICONV_H) \ + iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h \ + iconv_open-osf.h iconv_open-solaris.h inttypes.h langinfo.h \ + signal.h $(STDARG_H) $(STDBOOL_H) $(STDDEF_H) $(STDINT_H) \ + stdio.h stdlib.h string.h strings.h sys/stat.h sys/time.h \ + sys/wait.h time.h unistd.h warn-on-use.h wchar.h wctype.h +SUFFIXES = .sed .sin +MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t arg-nonnull.h \ + arg-nonnull.h-t c++defs.h c++defs.h-t errno.h errno.h-t \ + fcntl.h fcntl.h-t fnmatch.h fnmatch.h-t getopt.h getopt.h-t \ + iconv.h iconv.h-t iconv_open-aix.h-t iconv_open-hpux.h-t \ + iconv_open-irix.h-t iconv_open-osf.h-t iconv_open-solaris.h-t \ + inttypes.h inttypes.h-t langinfo.h langinfo.h-t signal.h \ + signal.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/stat.h sys/stat.h-t sys/time.h sys/time.h-t sys/wait.h \ + sys/wait.h-t time.h time.h-t unistd.h unistd.h-t warn-on-use.h \ + warn-on-use.h-t wchar.h wchar.h-t wctype.h wctype.h-t +MOSTLYCLEANDIRS = sys sys +CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \ + ref-del.sed +DISTCLEANFILES = +MAINTAINERCLEANFILES = iconv_open-aix.h iconv_open-hpux.h \ + iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h +AM_CPPFLAGS = +AM_CFLAGS = $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS) +libdiffutils_a_SOURCES = bitrotate.h c-ctype.h c-ctype.c c-stack.h \ + c-stack.c c-strcase.h c-strcasecmp.c c-strncasecmp.c diffseq.h \ + exitfail.c gettext.h ignore-value.h localcharset.h \ + localcharset.c malloca.c mbchar.c mbiter.h mbscasecmp.c \ + mbslen.c mbsstr.c mbuiter.h progname.h progname.c propername.h \ + propername.c sh-quote.h sh-quote.c striconv.h striconv.c \ + strnlen1.h strnlen1.c trim.c uniwidth/width.c verify.h \ + version-etc.h version-etc.c version-etc-fsf.c xalloc-die.c \ + xfreopen.c xfreopen.h xstriconv.h xstriconv.c xstrndup.h \ + xstrndup.c xstrtoumax.c cmpbuf.c prepargs.c +libdiffutils_a_LIBADD = $(gl_LIBOBJS) @ALLOCA@ +libdiffutils_a_DEPENDENCIES = $(gl_LIBOBJS) @ALLOCA@ +EXTRA_libdiffutils_a_SOURCES = alloca.c btowc.c basename.c dirname.c \ + stripslash.c basename-lgpl.c dirname-lgpl.c stripslash.c \ + dup2.c error.c exclude.c fcntl.c file-type.c fnmatch.c \ + fnmatch_loop.c freopen.c freopen-safer.c getdtablesize.c \ + getopt.c getopt1.c gettime.c gettimeofday.c hard-locale.c \ + hash.c iconv_open.c imaxtostr.c inttostr.c offtostr.c \ + uinttostr.c umaxtostr.c lstat.c malloc.c malloc.c mbrlen.c \ + mbrtowc.c mbsinit.c mbsrtowcs-state.c mbsrtowcs.c memchr.c \ + mkstemp.c mktime.c nl_langinfo.c open.c quote.c quotearg.c \ + regcomp.c regex.c regex_internal.c regexec.c sigaction.c \ + sigprocmask.c stat.c stdio-write.c strcasecmp.c strncasecmp.c \ + strerror.c strftime.c strndup.c strnlen.c strptime.c \ + strtoimax.c strtol.c strtoll.c strtoul.c strtoull.c \ + strtoumax.c tempname.c time_r.c timegm.c wcrtomb.c wcwidth.c \ + xmalloc.c xstrtol-error.c xstrtol.c xstrtoul.c +ARG_NONNULL_H = arg-nonnull.h +CXXDEFS_H = c++defs.h +GPERF = gperf +charset_alias = $(DESTDIR)$(libdir)/charset.alias +charset_tmp = $(DESTDIR)$(libdir)/charset.tmp +WARN_ON_USE_H = warn-on-use.h +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .sed .sin .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/gnulib.mk $(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 +.PRECIOUS: 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 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.hin $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status lib/config.h +$(srcdir)/config.hin: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +uniwidth/$(am__dirstamp): + @$(MKDIR_P) uniwidth + @: > uniwidth/$(am__dirstamp) +uniwidth/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) uniwidth/$(DEPDIR) + @: > uniwidth/$(DEPDIR)/$(am__dirstamp) +uniwidth/width.$(OBJEXT): uniwidth/$(am__dirstamp) \ + uniwidth/$(DEPDIR)/$(am__dirstamp) +libdiffutils.a: $(libdiffutils_a_OBJECTS) $(libdiffutils_a_DEPENDENCIES) + $(AM_V_at)-rm -f libdiffutils.a + $(AM_V_AR)$(libdiffutils_a_AR) libdiffutils.a $(libdiffutils_a_OBJECTS) $(libdiffutils_a_LIBADD) + $(AM_V_at)$(RANLIB) libdiffutils.a + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f uniwidth/width.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alloca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-ctype.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-stack.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-strcasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-strncasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmpbuf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname-lgpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exclude.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exitfail.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file-type.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch_loop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/freopen-safer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/freopen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdtablesize.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hard-locale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iconv_open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imaxtostr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inttostr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbchar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbrlen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbrtowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbscasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbslen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsrtowcs-state.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsrtowcs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsstr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memchr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkstemp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mktime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nl_langinfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/offtostr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prepargs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/propername.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quote.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotearg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regcomp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex_internal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regexec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sh-quote.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigaction.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigprocmask.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdio-write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strftime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/striconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strncasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strndup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strptime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoimax.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtol.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoll.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoul.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoull.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoumax.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tempname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time_r.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timegm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trim.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uinttostr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umaxtostr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc-fsf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcrtomb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcwidth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xalloc-die.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfreopen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstriconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrndup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtol-error.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtol.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtoul.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtoumax.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/width.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) '$<'` + +# 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. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; 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" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done +cscopelist-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + 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; \ + list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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 +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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 $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP)'; \ + 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 \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + 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) config.h \ + all-local +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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 uniwidth/$(DEPDIR)/$(am__dirstamp) + -rm -f uniwidth/$(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." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) uniwidth/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr 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-exec-local + +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) uniwidth/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-local + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-local + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + cscopelist-recursive ctags-recursive install install-am \ + install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am all-local check check-am clean clean-generic \ + clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist \ + cscopelist-recursive ctags ctags-recursive distclean \ + distclean-compile distclean-generic distclean-hdr \ + 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-exec-local 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-local pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am uninstall-local + + +# 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 + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/alloca.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +# The arg-nonnull.h that gets inserted into generated .h files is the same as +# build-aux/arg-nonnull.h, except that it has the copyright header cut off. +arg-nonnull.h: $(top_srcdir)/build-aux/arg-nonnull.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/GL_ARG_NONNULL/,$$p' \ + < $(top_srcdir)/build-aux/arg-nonnull.h \ + > $@-t && \ + mv $@-t $@ +# The c++defs.h that gets inserted into generated .h files is the same as +# build-aux/c++defs.h, except that it has the copyright header cut off. +c++defs.h: $(top_srcdir)/build-aux/c++defs.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/_GL_CXXDEFS/,$$p' \ + < $(top_srcdir)/build-aux/c++defs.h \ + > $@-t && \ + mv $@-t $@ + +# Retrieve values of the variables through 'configure' followed by +# 'make', not directly through 'configure', so that a user who +# sets some of these variables consistently on the 'make' command +# line gets correct results. +# +# One advantage of this approach, compared to the classical +# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS, +# is that it protects against the use of undefined variables. +# If, say, $(libdir) is not set in the Makefile, LIBDIR is not +# defined by this module, and code using LIBDIR gives a +# compilation error. +# +# Another advantage is that 'make' output is shorter. +# +# Listed in the same order as the GNU makefile conventions. +# The Automake-defined pkg* macros are appended, in the order +# listed in the Automake 1.10a+ documentation. +configmake.h: Makefile + $(AM_V_GEN)rm -f $@-t && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#define PREFIX "$(prefix)"'; \ + echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ + echo '#define BINDIR "$(bindir)"'; \ + echo '#define SBINDIR "$(sbindir)"'; \ + echo '#define LIBEXECDIR "$(libexecdir)"'; \ + echo '#define DATAROOTDIR "$(datarootdir)"'; \ + echo '#define DATADIR "$(datadir)"'; \ + echo '#define SYSCONFDIR "$(sysconfdir)"'; \ + echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ + echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ + echo '#define INCLUDEDIR "$(includedir)"'; \ + echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ + echo '#define DOCDIR "$(docdir)"'; \ + echo '#define INFODIR "$(infodir)"'; \ + echo '#define HTMLDIR "$(htmldir)"'; \ + echo '#define DVIDIR "$(dvidir)"'; \ + echo '#define PDFDIR "$(pdfdir)"'; \ + echo '#define PSDIR "$(psdir)"'; \ + echo '#define LIBDIR "$(libdir)"'; \ + echo '#define LISPDIR "$(lispdir)"'; \ + echo '#define LOCALEDIR "$(localedir)"'; \ + echo '#define MANDIR "$(mandir)"'; \ + echo '#define MANEXT "$(manext)"'; \ + echo '#define PKGDATADIR "$(pkgdatadir)"'; \ + echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ + echo '#define PKGLIBDIR "$(pkglibdir)"'; \ + echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ + } | sed '/""/d' > $@-t && \ + if test -f $@ && cmp $@-t $@ > /dev/null; then \ + rm -f $@-t; \ + else \ + rm -f $@; mv $@-t $@; \ + fi + +# 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 + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|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 $@ + +# 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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ + -e 's|@''GNULIB_FCNTL''@|$(GNULIB_FCNTL)|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 <fnmatch.h> when the system +# doesn't have one that supports the required API. +fnmatch.h: fnmatch.in.h $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + < $(srcdir)/fnmatch.in.h; \ + } > $@-t && \ + mv -f $@-t $@ + +# 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 $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -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|@''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 $@ + +distclean-local: clean-GNUmakefile +clean-GNUmakefile: + test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || : + +# We need the following in order to create <iconv.h> when the system +# doesn't have one that works with the given compiler. +iconv.h: iconv.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_ICONV_H''@|$(NEXT_ICONV_H)|g' \ + -e 's|@''ICONV_CONST''@|$(ICONV_CONST)|g' \ + -e 's|@''REPLACE_ICONV''@|$(REPLACE_ICONV)|g' \ + -e 's|@''REPLACE_ICONV_OPEN''@|$(REPLACE_ICONV_OPEN)|g' \ + -e 's|@''REPLACE_ICONV_UTF''@|$(REPLACE_ICONV_UTF)|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)/iconv.in.h; \ + } > $@-t && \ + mv $@-t $@ + +iconv_open-aix.h: iconv_open-aix.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-aix.gperf > $(srcdir)/iconv_open-aix.h-t + mv $(srcdir)/iconv_open-aix.h-t $(srcdir)/iconv_open-aix.h +iconv_open-hpux.h: iconv_open-hpux.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-hpux.gperf > $(srcdir)/iconv_open-hpux.h-t + mv $(srcdir)/iconv_open-hpux.h-t $(srcdir)/iconv_open-hpux.h +iconv_open-irix.h: iconv_open-irix.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-irix.gperf > $(srcdir)/iconv_open-irix.h-t + mv $(srcdir)/iconv_open-irix.h-t $(srcdir)/iconv_open-irix.h +iconv_open-osf.h: iconv_open-osf.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-osf.gperf > $(srcdir)/iconv_open-osf.h-t + mv $(srcdir)/iconv_open-osf.h-t $(srcdir)/iconv_open-osf.h +iconv_open-solaris.h: iconv_open-solaris.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-solaris.gperf > $(srcdir)/iconv_open-solaris.h-t + mv $(srcdir)/iconv_open-solaris.h-t $(srcdir)/iconv_open-solaris.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 $(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|@''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/@''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 '/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 $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -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|@''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_ERA''@|$(HAVE_LANGINFO_ERA)|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 install a simple file in $(libdir) +# which is shared with other installed packages. We use a list of referencing +# packages so that "make uninstall" will remove the file if and only if it +# is not used by another installed package. +# On systems with glibc-2.1 or newer, the file is redundant, therefore we +# avoid installing it. + +all-local: charset.alias ref-add.sed ref-del.sed +install-exec-local: install-exec-localcharset +install-exec-localcharset: all-local + if test $(GLIBC21) = no; then \ + case '$(host_os)' in \ + darwin[56]*) \ + need_charset_alias=true ;; \ + darwin* | cygwin* | mingw* | pw32* | cegcc*) \ + need_charset_alias=false ;; \ + *) \ + need_charset_alias=true ;; \ + esac ; \ + else \ + need_charset_alias=false ; \ + fi ; \ + if $$need_charset_alias; then \ + $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ + fi ; \ + if test -f $(charset_alias); then \ + sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + else \ + if $$need_charset_alias; then \ + sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + fi ; \ + fi + +uninstall-local: uninstall-localcharset +uninstall-localcharset: all-local + if test -f $(charset_alias); then \ + sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ + if grep '^# Packages using this file: $$' $(charset_tmp) \ + > /dev/null; then \ + rm -f $(charset_alias); \ + else \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ + fi; \ + rm -f $(charset_tmp); \ + fi + +charset.alias: config.charset + $(AM_V_GEN)rm -f t-$@ $@ && \ + $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \ + mv t-$@ $@ +.sin.sed: + $(AM_V_GEN)rm -f t-$@ $@ && \ + sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \ + mv t-$@ $@ + +# We need the following in order to create <signal.h> when the system +# doesn't have a complete one. +signal.h: signal.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|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_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 '/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 <stdarg.h> when the system +# doesn't have one that works with the given compiler. +stdarg.h: stdarg.in.h + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ + < $(srcdir)/stdarg.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <stdbool.h> when the system +# doesn't have one that works. +stdbool.h: stdbool.in.h + $(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 $@ + +# 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 + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ + -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ + -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ + < $(srcdir)/stddef.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# 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 + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -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|@''NEXT_STDINT_H''@|$(NEXT_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_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' \ + < $(srcdir)/stdint.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# 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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|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_FFLUSH''@|$(GNULIB_FFLUSH)|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_FREOPEN''@|$(GNULIB_FREOPEN)|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_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_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_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \ + -e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|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_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_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_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_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_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 '/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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|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_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_PTSNAME''@|$(GNULIB_PTSNAME)|g' \ + -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \ + -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \ + -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \ + -e 's|@''GNULIB_REALPATH''@|$(GNULIB_REALPATH)|g' \ + -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|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_UNLOCKPT''@|$(GNULIB_UNLOCKPT)|g' \ + -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|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_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|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_PTSNAME''@|$(HAVE_PTSNAME)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \ + -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|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_UNSETENV''@|$(HAVE_UNSETENV)|g' \ + -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|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 '/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)/stdlib.in.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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|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_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \ + -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \ + < $(srcdir)/string.in.h | \ + sed -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_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ + -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|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_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|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 $(WARN_ON_USE_H) $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ + -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ + -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ + -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/stat.h> when the system +# has one that is incomplete. +sys/stat.h: sys_stat.in.h $(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|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ + -e 's|@''GNULIB_FCHMODAT''@|$(GNULIB_FCHMODAT)|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|@''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 $(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/@''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|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ + -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/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 '/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/wait.h> when the system +# has one that is incomplete. +sys/wait.h: sys_wait.in.h + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ + < $(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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ + -e 's|@''GNULIB_MKTIME''@|$(GNULIB_MKTIME)|g' \ + -e 's|@''GNULIB_NANOSLEEP''@|$(GNULIB_NANOSLEEP)|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|@''HAVE_LOCALTIME_R''@|$(HAVE_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|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ + -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ + -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ + -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|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 '/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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -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|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \ + -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|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_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_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|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_PIPE2''@|$(GNULIB_PIPE2)|g' \ + -e 's|@''GNULIB_PREAD''@|$(GNULIB_PREAD)|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_SLEEP''@|$(GNULIB_SLEEP)|g' \ + -e 's|@''GNULIB_SYMLINK''@|$(GNULIB_SYMLINK)|g' \ + -e 's|@''GNULIB_SYMLINKAT''@|$(GNULIB_SYMLINKAT)|g' \ + -e 's|@''GNULIB_TTYNAME_R''@|$(GNULIB_TTYNAME_R)|g' \ + -e 's|@''GNULIB_UNISTD_H_GETOPT''@|$(GNULIB_UNISTD_H_GETOPT)|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_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|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_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|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_PIPE2''@|$(HAVE_PIPE2)|g' \ + -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|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_TTYNAME_R''@|$(HAVE_TTYNAME_R)|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_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_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + -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_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|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_READLINK''@|$(REPLACE_READLINK)|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_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 $@ +# The warn-on-use.h that gets inserted into generated .h files is the same as +# build-aux/warn-on-use.h, except that it has the copyright header cut off. +warn-on-use.h: $(top_srcdir)/build-aux/warn-on-use.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/^.ifndef/,$$p' \ + < $(top_srcdir)/build-aux/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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|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|@''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_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + -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 '/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)/wchar.in.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 $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -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|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ + -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ + -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ + -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/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/lib/alloca.c b/lib/alloca.c new file mode 100644 index 0000000..8d98020 --- /dev/null +++ b/lib/alloca.c @@ -0,0 +1,491 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* 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 void +find_stack_direction (void) +{ + static char *addr = NULL; /* Address of first `dummy', once known. */ + auto char dummy; /* To get stack address. */ + + if (addr == NULL) + { /* Initial entry. */ + addr = ADDRESS_FUNCTION (dummy); + + find_stack_direction (); /* Recurse once. */ + } + else + { + /* Second entry. */ + if (ADDRESS_FUNCTION (dummy) > addr) + stack_dir = 1; /* Stack grew upward. */ + else + stack_dir = -1; /* Stack grew downward. */ + } +} + +# 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. */ + find_stack_direction (); +# 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 version 3 */ diff --git a/lib/alloca.in.h b/lib/alloca.in.h new file mode 100644 index 0000000..34f8fe5 --- /dev/null +++ b/lib/alloca.in.h @@ -0,0 +1,58 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Memory allocation on the stack. + + Copyright (C) 1995, 1999, 2001-2004, 2006-2010 Free Software Foundation, + Inc. + + This program is free software; you can redistribute 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + USA. */ + +/* 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 +# else +# include <stddef.h> +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +# endif +#endif + +#endif /* _GL_ALLOCA_H */ diff --git a/lib/basename-lgpl.c b/lib/basename-lgpl.c new file mode 100644 index 0000000..a35ff01 --- /dev/null +++ b/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-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "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/lib/basename.c b/lib/basename.c new file mode 100644 index 0000000..24da93a --- /dev/null +++ b/lib/basename.c @@ -0,0 +1,58 @@ +/* basename.c -- return the last element in a file name + + Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "dirname.h" + +#include <string.h> +#include "xalloc.h" +#include "xstrndup.h" + +char * +base_name (char const *name) +{ + char const *base = last_component (name); + size_t length; + + /* If there is no last component, then name is a file system root or the + empty string. */ + if (! *base) + return xstrndup (name, base_len (name)); + + /* Collapse a sequence of trailing slashes into one. */ + length = base_len (base); + if (ISSLASH (base[length])) + length++; + + /* On systems with drive letters, `a/b:c' must return `./b:c' rather + than `b:c' to avoid confusion with a drive letter. On systems + with pure POSIX semantics, this is not an issue. */ + if (FILE_SYSTEM_PREFIX_LEN (base)) + { + char *p = xmalloc (length + 3); + p[0] = '.'; + p[1] = '/'; + memcpy (p + 2, base, length); + p[length + 2] = '\0'; + return p; + } + + /* Finally, copy the basename. */ + return xstrndup (base, length); +} diff --git a/lib/bitrotate.h b/lib/bitrotate.h new file mode 100644 index 0000000..80e6ef5 --- /dev/null +++ b/lib/bitrotate.h @@ -0,0 +1,126 @@ +/* bitrotate.h - Rotate bits in integers + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Simon Josefsson <simon@josefsson.org>, 2008. */ + +#ifndef _GL_BITROTATE_H +#define _GL_BITROTATE_H + +#include <limits.h> +#include <stdint.h> +#include <sys/types.h> + +#ifdef UINT64_MAX +/* Given an unsigned 64-bit argument X, return the value corresponding + to rotating the bits N steps to the left. N must be between 1 and + 63 inclusive. */ +static inline uint64_t +rotl64 (uint64_t x, int n) +{ + return ((x << n) | (x >> (64 - n))) & UINT64_MAX; +} + +/* Given an unsigned 64-bit argument X, return the value corresponding + to rotating the bits N steps to the right. N must be between 1 to + 63 inclusive.*/ +static inline uint64_t +rotr64 (uint64_t x, int n) +{ + return ((x >> n) | (x << (64 - n))) & UINT64_MAX; +} +#endif + +/* Given an unsigned 32-bit argument X, return the value corresponding + to rotating the bits N steps to the left. N must be between 1 and + 31 inclusive. */ +static inline uint32_t +rotl32 (uint32_t x, int n) +{ + return ((x << n) | (x >> (32 - n))) & UINT32_MAX; +} + +/* Given an unsigned 32-bit argument X, return the value corresponding + to rotating the bits N steps to the right. N must be between 1 to + 31 inclusive.*/ +static inline uint32_t +rotr32 (uint32_t x, int n) +{ + return ((x >> n) | (x << (32 - n))) & UINT32_MAX; +} + +/* Given a size_t argument X, return the value corresponding + to rotating the bits N steps to the left. N must be between 1 and + (CHAR_BIT * sizeof (size_t) - 1) inclusive. */ +static inline size_t +rotl_sz (size_t x, int n) +{ + return ((x << n) | (x >> ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX; +} + +/* Given a size_t argument X, return the value corresponding + to rotating the bits N steps to the right. N must be between 1 to + (CHAR_BIT * sizeof (size_t) - 1) inclusive. */ +static inline size_t +rotr_sz (size_t x, int n) +{ + return ((x >> n) | (x << ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX; +} + +/* Given an unsigned 16-bit argument X, return the value corresponding + to rotating the bits N steps to the left. N must be between 1 to + 15 inclusive, but on most relevant targets N can also be 0 and 16 + because 'int' is at least 32 bits and the arguments must widen + before shifting. */ +static inline uint16_t +rotl16 (uint16_t x, int n) +{ + return ((x << n) | (x >> (16 - n))) & UINT16_MAX; +} + +/* Given an unsigned 16-bit argument X, return the value corresponding + to rotating the bits N steps to the right. N must be in 1 to 15 + inclusive, but on most relevant targets N can also be 0 and 16 + because 'int' is at least 32 bits and the arguments must widen + before shifting. */ +static inline uint16_t +rotr16 (uint16_t x, int n) +{ + return ((x >> n) | (x << (16 - n))) & UINT16_MAX; +} + +/* Given an unsigned 8-bit argument X, return the value corresponding + to rotating the bits N steps to the left. N must be between 1 to 7 + inclusive, but on most relevant targets N can also be 0 and 8 + because 'int' is at least 32 bits and the arguments must widen + before shifting. */ +static inline uint8_t +rotl8 (uint8_t x, int n) +{ + return ((x << n) | (x >> (8 - n))) & UINT8_MAX; +} + +/* Given an unsigned 8-bit argument X, return the value corresponding + to rotating the bits N steps to the right. N must be in 1 to 7 + inclusive, but on most relevant targets N can also be 0 and 8 + because 'int' is at least 32 bits and the arguments must widen + before shifting. */ +static inline uint8_t +rotr8 (uint8_t x, int n) +{ + return ((x >> n) | (x << (8 - n))) & UINT8_MAX; +} + +#endif /* _GL_BITROTATE_H */ diff --git a/lib/btowc.c b/lib/btowc.c new file mode 100644 index 0000000..8744602 --- /dev/null +++ b/lib/btowc.c @@ -0,0 +1,39 @@ +/* Convert unibyte character to wide character. + Copyright (C) 2008, 2010 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 <http://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/lib/c-ctype.c b/lib/c-ctype.c new file mode 100644 index 0000000..48baa72 --- /dev/null +++ b/lib/c-ctype.c @@ -0,0 +1,398 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Character handling in C locale. + + Copyright 2000-2003, 2006, 2009-2010 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include <config.h> + +/* Specification. */ +#define NO_C_CTYPE_MACROS +#include "c-ctype.h" + +/* The function isascii is not locale dependent. Its use in EBCDIC is + questionable. */ +bool +c_isascii (int c) +{ + return (c >= 0x00 && c <= 0x7f); +} + +bool +c_isalnum (int c) +{ +#if C_CTYPE_CONSECUTIVE_DIGITS \ + && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII + return ((c >= '0' && c <= '9') + || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')); +#else + return ((c >= '0' && c <= '9') + || (c >= 'A' && c <= 'Z') + || (c >= 'a' && c <= 'z')); +#endif +#else + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + 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 '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': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isalpha (int c) +{ +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII + return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'); +#else + return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')); +#endif +#else + switch (c) + { + 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 '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': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isblank (int c) +{ + return (c == ' ' || c == '\t'); +} + +bool +c_iscntrl (int c) +{ +#if C_CTYPE_ASCII + return ((c & ~0x1f) == 0 || c == 0x7f); +#else + switch (c) + { + case ' ': case '!': case '"': case '#': case '$': case '%': + case '&': case '\'': case '(': case ')': 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 ';': case '<': case '=': case '>': 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': + case '[': case '\\': case ']': case '^': 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': + case '{': case '|': case '}': case '~': + return 0; + default: + return 1; + } +#endif +} + +bool +c_isdigit (int c) +{ +#if C_CTYPE_CONSECUTIVE_DIGITS + return (c >= '0' && c <= '9'); +#else + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + return 1; + default: + return 0; + } +#endif +} + +bool +c_islower (int c) +{ +#if C_CTYPE_CONSECUTIVE_LOWERCASE + return (c >= 'a' && c <= 'z'); +#else + switch (c) + { + 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': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isgraph (int c) +{ +#if C_CTYPE_ASCII + return (c >= '!' && c <= '~'); +#else + switch (c) + { + case '!': case '"': case '#': case '$': case '%': case '&': + case '\'': case '(': case ')': 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 ';': case '<': case '=': case '>': 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': + case '[': case '\\': case ']': case '^': 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': + case '{': case '|': case '}': case '~': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isprint (int c) +{ +#if C_CTYPE_ASCII + return (c >= ' ' && c <= '~'); +#else + switch (c) + { + case ' ': case '!': case '"': case '#': case '$': case '%': + case '&': case '\'': case '(': case ')': 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 ';': case '<': case '=': case '>': 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': + case '[': case '\\': case ']': case '^': 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': + case '{': case '|': case '}': case '~': + return 1; + default: + return 0; + } +#endif +} + +bool +c_ispunct (int c) +{ +#if C_CTYPE_ASCII + return ((c >= '!' && c <= '~') + && !((c >= '0' && c <= '9') + || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'))); +#else + switch (c) + { + 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 '~': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isspace (int c) +{ + return (c == ' ' || c == '\t' + || c == '\n' || c == '\v' || c == '\f' || c == '\r'); +} + +bool +c_isupper (int c) +{ +#if C_CTYPE_CONSECUTIVE_UPPERCASE + return (c >= 'A' && c <= 'Z'); +#else + switch (c) + { + 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': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isxdigit (int c) +{ +#if C_CTYPE_CONSECUTIVE_DIGITS \ + && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII + return ((c >= '0' && c <= '9') + || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F')); +#else + return ((c >= '0' && c <= '9') + || (c >= 'A' && c <= 'F') + || (c >= 'a' && c <= 'f')); +#endif +#else + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + return 1; + default: + return 0; + } +#endif +} + +int +c_tolower (int c) +{ +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE + return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c); +#else + switch (c) + { + case 'A': return 'a'; + case 'B': return 'b'; + case 'C': return 'c'; + case 'D': return 'd'; + case 'E': return 'e'; + case 'F': return 'f'; + case 'G': return 'g'; + case 'H': return 'h'; + case 'I': return 'i'; + case 'J': return 'j'; + case 'K': return 'k'; + case 'L': return 'l'; + case 'M': return 'm'; + case 'N': return 'n'; + case 'O': return 'o'; + case 'P': return 'p'; + case 'Q': return 'q'; + case 'R': return 'r'; + case 'S': return 's'; + case 'T': return 't'; + case 'U': return 'u'; + case 'V': return 'v'; + case 'W': return 'w'; + case 'X': return 'x'; + case 'Y': return 'y'; + case 'Z': return 'z'; + default: return c; + } +#endif +} + +int +c_toupper (int c) +{ +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE + return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c); +#else + switch (c) + { + case 'a': return 'A'; + case 'b': return 'B'; + case 'c': return 'C'; + case 'd': return 'D'; + case 'e': return 'E'; + case 'f': return 'F'; + case 'g': return 'G'; + case 'h': return 'H'; + case 'i': return 'I'; + case 'j': return 'J'; + case 'k': return 'K'; + case 'l': return 'L'; + case 'm': return 'M'; + case 'n': return 'N'; + case 'o': return 'O'; + case 'p': return 'P'; + case 'q': return 'Q'; + case 'r': return 'R'; + case 's': return 'S'; + case 't': return 'T'; + case 'u': return 'U'; + case 'v': return 'V'; + case 'w': return 'W'; + case 'x': return 'X'; + case 'y': return 'Y'; + case 'z': return 'Z'; + default: return c; + } +#endif +} diff --git a/lib/c-ctype.h b/lib/c-ctype.h new file mode 100644 index 0000000..26c89b8 --- /dev/null +++ b/lib/c-ctype.h @@ -0,0 +1,297 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* 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-2010 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef C_CTYPE_H +#define C_CTYPE_H + +#include <stdbool.h> + + +#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. */ + + +/* Check whether the ASCII optimizations apply. */ + +/* ANSI C89 (and ISO C99 5.2.1.3 too) already guarantees that + '0', '1', ..., '9' have consecutive integer values. */ +#define C_CTYPE_CONSECUTIVE_DIGITS 1 + +#if ('A' <= 'Z') \ + && ('A' + 1 == 'B') && ('B' + 1 == 'C') && ('C' + 1 == 'D') \ + && ('D' + 1 == 'E') && ('E' + 1 == 'F') && ('F' + 1 == 'G') \ + && ('G' + 1 == 'H') && ('H' + 1 == 'I') && ('I' + 1 == 'J') \ + && ('J' + 1 == 'K') && ('K' + 1 == 'L') && ('L' + 1 == 'M') \ + && ('M' + 1 == 'N') && ('N' + 1 == 'O') && ('O' + 1 == 'P') \ + && ('P' + 1 == 'Q') && ('Q' + 1 == 'R') && ('R' + 1 == 'S') \ + && ('S' + 1 == 'T') && ('T' + 1 == 'U') && ('U' + 1 == 'V') \ + && ('V' + 1 == 'W') && ('W' + 1 == 'X') && ('X' + 1 == 'Y') \ + && ('Y' + 1 == 'Z') +#define C_CTYPE_CONSECUTIVE_UPPERCASE 1 +#endif + +#if ('a' <= 'z') \ + && ('a' + 1 == 'b') && ('b' + 1 == 'c') && ('c' + 1 == 'd') \ + && ('d' + 1 == 'e') && ('e' + 1 == 'f') && ('f' + 1 == 'g') \ + && ('g' + 1 == 'h') && ('h' + 1 == 'i') && ('i' + 1 == 'j') \ + && ('j' + 1 == 'k') && ('k' + 1 == 'l') && ('l' + 1 == 'm') \ + && ('m' + 1 == 'n') && ('n' + 1 == 'o') && ('o' + 1 == 'p') \ + && ('p' + 1 == 'q') && ('q' + 1 == 'r') && ('r' + 1 == 's') \ + && ('s' + 1 == 't') && ('t' + 1 == 'u') && ('u' + 1 == 'v') \ + && ('v' + 1 == 'w') && ('w' + 1 == 'x') && ('x' + 1 == 'y') \ + && ('y' + 1 == 'z') +#define C_CTYPE_CONSECUTIVE_LOWERCASE 1 +#endif + +#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 +#endif + + +/* Function declarations. */ + +/* 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)) ... + */ + +extern bool c_isascii (int c); /* not locale dependent */ + +extern bool c_isalnum (int c); +extern bool c_isalpha (int c); +extern bool c_isblank (int c); +extern bool c_iscntrl (int c); +extern bool c_isdigit (int c); +extern bool c_islower (int c); +extern bool c_isgraph (int c); +extern bool c_isprint (int c); +extern bool c_ispunct (int c); +extern bool c_isspace (int c); +extern bool c_isupper (int c); +extern bool c_isxdigit (int c); + +extern int c_tolower (int c); +extern int c_toupper (int c); + + +#if defined __GNUC__ && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS + +/* ASCII optimizations. */ + +#undef c_isascii +#define c_isascii(c) \ + ({ int __c = (c); \ + (__c >= 0x00 && __c <= 0x7f); \ + }) + +#if C_CTYPE_CONSECUTIVE_DIGITS \ + && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII +#undef c_isalnum +#define c_isalnum(c) \ + ({ int __c = (c); \ + ((__c >= '0' && __c <= '9') \ + || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z')); \ + }) +#else +#undef c_isalnum +#define c_isalnum(c) \ + ({ int __c = (c); \ + ((__c >= '0' && __c <= '9') \ + || (__c >= 'A' && __c <= 'Z') \ + || (__c >= 'a' && __c <= 'z')); \ + }) +#endif +#endif + +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII +#undef c_isalpha +#define c_isalpha(c) \ + ({ int __c = (c); \ + ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z'); \ + }) +#else +#undef c_isalpha +#define c_isalpha(c) \ + ({ int __c = (c); \ + ((__c >= 'A' && __c <= 'Z') || (__c >= 'a' && __c <= 'z')); \ + }) +#endif +#endif + +#undef c_isblank +#define c_isblank(c) \ + ({ int __c = (c); \ + (__c == ' ' || __c == '\t'); \ + }) + +#if C_CTYPE_ASCII +#undef c_iscntrl +#define c_iscntrl(c) \ + ({ int __c = (c); \ + ((__c & ~0x1f) == 0 || __c == 0x7f); \ + }) +#endif + +#if C_CTYPE_CONSECUTIVE_DIGITS +#undef c_isdigit +#define c_isdigit(c) \ + ({ int __c = (c); \ + (__c >= '0' && __c <= '9'); \ + }) +#endif + +#if C_CTYPE_CONSECUTIVE_LOWERCASE +#undef c_islower +#define c_islower(c) \ + ({ int __c = (c); \ + (__c >= 'a' && __c <= 'z'); \ + }) +#endif + +#if C_CTYPE_ASCII +#undef c_isgraph +#define c_isgraph(c) \ + ({ int __c = (c); \ + (__c >= '!' && __c <= '~'); \ + }) +#endif + +#if C_CTYPE_ASCII +#undef c_isprint +#define c_isprint(c) \ + ({ int __c = (c); \ + (__c >= ' ' && __c <= '~'); \ + }) +#endif + +#if C_CTYPE_ASCII +#undef c_ispunct +#define c_ispunct(c) \ + ({ int _c = (c); \ + (c_isgraph (_c) && ! c_isalnum (_c)); \ + }) +#endif + +#undef c_isspace +#define c_isspace(c) \ + ({ int __c = (c); \ + (__c == ' ' || __c == '\t' \ + || __c == '\n' || __c == '\v' || __c == '\f' || __c == '\r'); \ + }) + +#if C_CTYPE_CONSECUTIVE_UPPERCASE +#undef c_isupper +#define c_isupper(c) \ + ({ int __c = (c); \ + (__c >= 'A' && __c <= 'Z'); \ + }) +#endif + +#if C_CTYPE_CONSECUTIVE_DIGITS \ + && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII +#undef c_isxdigit +#define c_isxdigit(c) \ + ({ int __c = (c); \ + ((__c >= '0' && __c <= '9') \ + || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'F')); \ + }) +#else +#undef c_isxdigit +#define c_isxdigit(c) \ + ({ int __c = (c); \ + ((__c >= '0' && __c <= '9') \ + || (__c >= 'A' && __c <= 'F') \ + || (__c >= 'a' && __c <= 'f')); \ + }) +#endif +#endif + +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#undef c_tolower +#define c_tolower(c) \ + ({ int __c = (c); \ + (__c >= 'A' && __c <= 'Z' ? __c - 'A' + 'a' : __c); \ + }) +#undef c_toupper +#define c_toupper(c) \ + ({ int __c = (c); \ + (__c >= 'a' && __c <= 'z' ? __c - 'a' + 'A' : __c); \ + }) +#endif + +#endif /* optimizing for speed */ + + +#ifdef __cplusplus +} +#endif + +#endif /* C_CTYPE_H */ diff --git a/lib/c-stack.c b/lib/c-stack.c new file mode 100644 index 0000000..4657548 --- /dev/null +++ b/lib/c-stack.c @@ -0,0 +1,342 @@ +/* Stack overflow handling. + + Copyright (C) 2002, 2004, 2006, 2008, 2009, 2010 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert. */ + +/* NOTES: + + A program that uses alloca, dynamic arrays, or large local + variables may extend the stack by more than a page at a time. If + so, when the stack overflows the operating system may not detect + the overflow until the program uses the array, and this module may + incorrectly report a program error instead of a stack overflow. + + To avoid this problem, allocate only small objects on the stack; a + program should be OK if it limits single allocations to a page or + less. Allocate larger arrays in static storage, or on the heap + (e.g., with malloc). Yes, this is a pain, but we don't know of any + better solution that is portable. + + No attempt has been made to deal with multithreaded applications. */ + +#include <config.h> + +#ifndef __attribute__ +# if __GNUC__ < 3 +# define __attribute__(x) +# endif +#endif + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +#include <errno.h> + +#include <signal.h> +#if ! HAVE_STACK_T && ! defined stack_t +typedef struct sigaltstack stack_t; +#endif +#ifndef SIGSTKSZ +# define SIGSTKSZ 16384 +#endif + +#include <stdlib.h> +#include <string.h> + +/* Posix 2001 declares ucontext_t in <ucontext.h>, Posix 200x in + <signal.h>. */ +#if HAVE_UCONTEXT_H +# include <ucontext.h> +#endif + +#include <unistd.h> + +#if HAVE_LIBSIGSEGV +# include <sigsegv.h> +#endif + +#include "c-stack.h" +#include "exitfail.h" +#include "ignore-value.h" + +#if defined SA_ONSTACK && defined SA_SIGINFO +# define SIGACTION_WORKS 1 +#else +# define SIGACTION_WORKS 0 +# ifndef SA_ONSTACK +# define SA_ONSTACK 0 +# endif +#endif + +extern char *program_name; + +/* The user-specified action to take when a SEGV-related program error + or stack overflow occurs. */ +static void (* volatile segv_action) (int); + +/* Translated messages for program errors and stack overflow. Do not + translate them in the signal handler, since gettext is not + async-signal-safe. */ +static char const * volatile program_error_message; +static char const * volatile stack_overflow_message; + +/* Output an error message, then exit with status EXIT_FAILURE if it + appears to have been a stack overflow, or with a core dump + otherwise. This function is async-signal-safe. */ + +static void die (int) __attribute__ ((noreturn)); +static void +die (int signo) +{ + char const *message; + segv_action (signo); + message = signo ? program_error_message : stack_overflow_message; + ignore_value (write (STDERR_FILENO, program_name, strlen (program_name))); + ignore_value (write (STDERR_FILENO, ": ", 2)); + ignore_value (write (STDERR_FILENO, message, strlen (message))); + ignore_value (write (STDERR_FILENO, "\n", 1)); + if (! signo) + _exit (exit_failure); + raise (signo); + abort (); +} + +#if (HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK \ + && HAVE_STACK_OVERFLOW_HANDLING) || HAVE_LIBSIGSEGV + +/* Storage for the alternate signal stack. */ +static union +{ + char buffer[SIGSTKSZ]; + + /* These other members are for proper alignment. There's no + standard way to guarantee stack alignment, but this seems enough + in practice. */ + long double ld; + long l; + void *p; +} alternate_signal_stack; + +static void +null_action (int signo __attribute__ ((unused))) +{ +} + +#endif /* SIGALTSTACK || LIBSIGSEGV */ + +/* Only use libsigsegv if we need it; platforms like Solaris can + detect stack overflow without the overhead of an external + library. */ +#if HAVE_LIBSIGSEGV && ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC + +/* Nonzero if general segv handler could not be installed. */ +static volatile int segv_handler_missing; + +/* Handle a segmentation violation and exit if it cannot be stack + overflow. This function is async-signal-safe. */ + +static int segv_handler (void *address __attribute__ ((unused)), + int serious) +{ +# if DEBUG + { + char buf[1024]; + sprintf (buf, "segv_handler serious=%d\n", serious); + write (STDERR_FILENO, buf, strlen (buf)); + } +# endif + + /* If this fault is not serious, return 0 to let the stack overflow + handler take a shot at it. */ + if (!serious) + return 0; + die (SIGSEGV); +} + +/* Handle a segmentation violation that is likely to be a stack + overflow and exit. This function is async-signal-safe. */ + +static void overflow_handler (int, stackoverflow_context_t) + __attribute__ ((noreturn)); +static void +overflow_handler (int emergency, + stackoverflow_context_t context __attribute__ ((unused))) +{ +# if DEBUG + { + char buf[1024]; + sprintf (buf, "overflow_handler emergency=%d segv_handler_missing=%d\n", + emergency, segv_handler_missing); + write (STDERR_FILENO, buf, strlen (buf)); + } +# endif + + die ((!emergency || segv_handler_missing) ? 0 : SIGSEGV); +} + +int +c_stack_action (void (*action) (int)) +{ + segv_action = action ? action : null_action; + program_error_message = _("program error"); + stack_overflow_message = _("stack overflow"); + + /* Always install the overflow handler. */ + if (stackoverflow_install_handler (overflow_handler, + alternate_signal_stack.buffer, + sizeof alternate_signal_stack.buffer)) + { + errno = ENOTSUP; + return -1; + } + /* Try installing a general handler; if it fails, then treat all + segv as stack overflow. */ + segv_handler_missing = sigsegv_install_handler (segv_handler); + return 0; +} + +#elif HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK && HAVE_STACK_OVERFLOW_HANDLING + +/* Direction of the C runtime stack. This function is + async-signal-safe. */ + +# if STACK_DIRECTION +# define find_stack_direction(ptr) STACK_DIRECTION +# else +# if ! SIGACTION_WORKS || HAVE_XSI_STACK_OVERFLOW_HEURISTIC +static int +find_stack_direction (char const *addr) +{ + char dummy; + return ! addr ? find_stack_direction (&dummy) : addr < &dummy ? 1 : -1; +} +# endif +# endif + +# if SIGACTION_WORKS + +/* Handle a segmentation violation and exit. This function is + async-signal-safe. */ + +static void segv_handler (int, siginfo_t *, void *) __attribute__((noreturn)); +static void +segv_handler (int signo, siginfo_t *info, + void *context __attribute__ ((unused))) +{ + /* Clear SIGNO if it seems to have been a stack overflow. */ +# if ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC + /* We can't easily determine whether it is a stack overflow; so + assume that the rest of our program is perfect (!) and that + this segmentation violation is a stack overflow. + + Note that although both Linux and Solaris provide + sigaltstack, SA_ONSTACK, and SA_SIGINFO, currently only + Solaris satisfies the XSI heueristic. This is because + Solaris populates uc_stack with the details of the + interrupted stack, while Linux populates it with the details + of the current stack. */ + signo = 0; +# else + if (0 < info->si_code) + { + /* If the faulting address is within the stack, or within one + page of the stack end, assume that it is a stack + overflow. */ + ucontext_t const *user_context = context; + char const *stack_base = user_context->uc_stack.ss_sp; + size_t stack_size = user_context->uc_stack.ss_size; + char const *faulting_address = info->si_addr; + size_t s = faulting_address - stack_base; + size_t page_size = sysconf (_SC_PAGESIZE); + if (find_stack_direction (NULL) < 0) + s += page_size; + if (s < stack_size + page_size) + signo = 0; + +# if DEBUG + { + char buf[1024]; + sprintf (buf, + "segv_handler fault=%p base=%p size=%lx page=%lx signo=%d\n", + faulting_address, stack_base, (unsigned long) stack_size, + (unsigned long) page_size, signo); + write (STDERR_FILENO, buf, strlen (buf)); + } +# endif + } +# endif + + die (signo); +} +# endif + +int +c_stack_action (void (*action) (int)) +{ + int r; + stack_t st; + struct sigaction act; + st.ss_flags = 0; +# if SIGALTSTACK_SS_REVERSED + /* Irix mistakenly treats ss_sp as the upper bound, rather than + lower bound, of the alternate stack. */ + st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ - sizeof (void *); + st.ss_size = sizeof alternate_signal_stack.buffer - sizeof (void *); +# else + st.ss_sp = alternate_signal_stack.buffer; + st.ss_size = sizeof alternate_signal_stack.buffer; +# endif + r = sigaltstack (&st, NULL); + if (r != 0) + return r; + + segv_action = action ? action : null_action; + program_error_message = _("program error"); + stack_overflow_message = _("stack overflow"); + + sigemptyset (&act.sa_mask); + +# if SIGACTION_WORKS + /* POSIX 1003.1-2001 says SA_RESETHAND implies SA_NODEFER, but + this is not true on Solaris 8 at least. It doesn't hurt to use + SA_NODEFER here, so leave it in. */ + act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND | SA_SIGINFO; + act.sa_sigaction = segv_handler; +# else + act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND; + act.sa_handler = die; +# endif + +# if FAULT_YIELDS_SIGBUS + if (sigaction (SIGBUS, &act, NULL) < 0) + return -1; +# endif + return sigaction (SIGSEGV, &act, NULL); +} + +#else /* ! ((HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK + && HAVE_STACK_OVERFLOW_HANDLING) || HAVE_LIBSIGSEGV) */ + +int +c_stack_action (void (*action) (int) __attribute__ ((unused))) +{ + errno = ENOTSUP; + return -1; +} + +#endif diff --git a/lib/c-stack.h b/lib/c-stack.h new file mode 100644 index 0000000..910bb68 --- /dev/null +++ b/lib/c-stack.h @@ -0,0 +1,44 @@ +/* Stack overflow handling. + + Copyright (C) 2002, 2004, 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + + +/* Set up ACTION so that it is invoked on C stack overflow and on other, + stack-unrelated, segmentation violation. + Return -1 (setting errno) if this cannot be done. + + When a stack overflow or segmentation violation occurs: + 1) ACTION is called. It is passed an argument equal to + - 0, for a stack overflow, + - SIGSEGV, for a segmentation violation that does not appear related + to stack overflow. + On many platforms the two cases are hard to distinguish; when in doubt, + zero is passed. + 2) If ACTION returns, a message is written to standard error, and the + program is terminated: in the case of stack overflow, with exit code + exit_failure (see "exitfail.h"), otherwise through a signal SIGSEGV. + + A null ACTION acts like an action that does nothing. + + ACTION must be async-signal-safe. ACTION together with its callees + must not require more than SIGSTKSZ bytes of stack space. Also, + ACTION should not call longjmp, because this implementation does + not guarantee that it is safe to return to the original stack. + + This function may install a handler for the SIGSEGV signal or for the SIGBUS + signal or exercise other system dependent exception handling APIs. */ + +extern int c_stack_action (void (* /*action*/) (int)); diff --git a/lib/c-strcase.h b/lib/c-strcase.h new file mode 100644 index 0000000..2f129e6 --- /dev/null +++ b/lib/c-strcase.h @@ -0,0 +1,58 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Case-insensitive string comparison functions in C locale. + Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2010 Free Software + Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#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); + +/* 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); + + +#ifdef __cplusplus +} +#endif + + +#endif /* C_STRCASE_H */ diff --git a/lib/c-strcasecmp.c b/lib/c-strcasecmp.c new file mode 100644 index 0000000..b4113a9 --- /dev/null +++ b/lib/c-strcasecmp.c @@ -0,0 +1,59 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* c-strcasecmp.c -- case insensitive string comparator in C locale + Copyright (C) 1998-1999, 2005-2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#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/lib/c-strncasecmp.c b/lib/c-strncasecmp.c new file mode 100644 index 0000000..7c2e519 --- /dev/null +++ b/lib/c-strncasecmp.c @@ -0,0 +1,59 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* c-strncasecmp.c -- case insensitive string comparator in C locale + Copyright (C) 1998-1999, 2005-2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#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/lib/cmpbuf.c b/lib/cmpbuf.c new file mode 100644 index 0000000..7413210 --- /dev/null +++ b/lib/cmpbuf.c @@ -0,0 +1,123 @@ +/* Buffer primitives for comparison operations. + + Copyright (C) 1993, 1995, 1998, 2001-2002, 2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 <errno.h> +#include <limits.h> + +#include <signal.h> +#ifndef SA_RESTART +# ifdef SA_INTERRUPT /* e.g. SunOS 4.1.x */ +# define SA_RESTART SA_INTERRUPT +# else +# define SA_RESTART 0 +# endif +#endif + +#include <unistd.h> +#include <inttypes.h> +#include <sys/types.h> +#include "cmpbuf.h" +#include "intprops.h" + +#ifndef PTRDIFF_MAX +# define PTRDIFF_MAX TYPE_MAXIMUM (ptrdiff_t) +#endif +#ifndef SIZE_MAX +# define SIZE_MAX TYPE_MAXIMUM (size_t) +#endif +#ifndef SSIZE_MAX +# define SSIZE_MAX TYPE_MAXIMUM (ssize_t) +#endif + +#undef MIN +#define MIN(a, b) ((a) <= (b) ? (a) : (b)) + +/* Read NBYTES bytes from descriptor FD into BUF. + NBYTES must not be SIZE_MAX. + Return the number of characters successfully read. + On error, return SIZE_MAX, setting errno. + The number returned is always NBYTES unless end-of-file or error. */ + +size_t +block_read (int fd, char *buf, size_t nbytes) +{ + char *bp = buf; + char const *buflim = buf + nbytes; + size_t readlim = MIN (SSIZE_MAX, SIZE_MAX); + + do + { + size_t bytes_remaining = buflim - bp; + size_t bytes_to_read = MIN (bytes_remaining, readlim); + ssize_t nread = read (fd, bp, bytes_to_read); + if (nread <= 0) + { + if (nread == 0) + break; + + /* Accommodate Tru64 5.1, which can't read more than INT_MAX + bytes at a time. They call that a 64-bit OS? */ + if (errno == EINVAL && INT_MAX < bytes_to_read) + { + readlim = INT_MAX; + continue; + } + + /* This is needed for programs that have signal handlers on + older hosts without SA_RESTART. It also accommodates + ancient AIX hosts that set errno to EINTR after uncaught + SIGCONT. See <news:1r77ojINN85n@ftp.UU.NET> + (1993-04-22). */ + if (! SA_RESTART && errno == EINTR) + continue; + + return SIZE_MAX; + } + bp += nread; + } + while (bp < buflim); + + return bp - buf; +} + +/* Least common multiple of two buffer sizes A and B. However, if + either A or B is zero, or if the multiple is greater than LCM_MAX, + return a reasonable buffer size. */ + +size_t +buffer_lcm (size_t a, size_t b, size_t lcm_max) +{ + size_t lcm, m, n, q, r; + + /* Yield reasonable values if buffer sizes are zero. */ + if (!a) + return b ? b : 8 * 1024; + if (!b) + return a; + + /* n = gcd (a, b) */ + for (m = a, n = b; (r = m % n) != 0; m = n, n = r) + continue; + + /* Yield a if there is an overflow. */ + q = a / n; + lcm = q * b; + return lcm <= lcm_max && lcm / b == q ? lcm : a; +} diff --git a/lib/cmpbuf.h b/lib/cmpbuf.h new file mode 100644 index 0000000..9d155f4 --- /dev/null +++ b/lib/cmpbuf.h @@ -0,0 +1,19 @@ +/* Buffer primitives for comparison operations. + + Copyright (C) 2002, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +size_t block_read (int, char *, size_t); +size_t buffer_lcm (size_t, size_t, size_t); diff --git a/lib/config.charset b/lib/config.charset new file mode 100644 index 0000000..2959df8 --- /dev/null +++ b/lib/config.charset @@ -0,0 +1,683 @@ +#! /bin/sh +# Output a system dependent table of character encoding aliases. +# +# Copyright (C) 2000-2004, 2006-2010 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute 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, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# The table consists of lines of the form +# ALIAS CANONICAL +# +# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". +# ALIAS is compared in a case sensitive way. +# +# CANONICAL is the GNU canonical name for this character encoding. +# It must be an encoding supported by libiconv. Support by GNU libc is +# also desirable. CANONICAL is case insensitive. Usually an upper case +# MIME charset name is preferred. +# The current list of GNU canonical charset names is as follows. +# +# name MIME? used by which systems +# ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin +# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin +# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin +# ISO-8859-3 Y glibc solaris +# ISO-8859-4 Y osf solaris freebsd netbsd openbsd darwin +# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin +# ISO-8859-6 Y glibc aix hpux solaris +# ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd openbsd darwin +# ISO-8859-8 Y glibc aix hpux osf solaris +# ISO-8859-9 Y glibc aix hpux irix osf solaris darwin +# ISO-8859-13 glibc netbsd openbsd darwin +# ISO-8859-14 glibc +# ISO-8859-15 glibc aix osf solaris freebsd netbsd openbsd darwin +# KOI8-R Y glibc solaris freebsd netbsd openbsd darwin +# KOI8-U Y glibc freebsd netbsd openbsd darwin +# 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 woe32 dos +# CP922 aix +# CP932 aix woe32 dos +# CP943 aix +# CP949 osf darwin woe32 dos +# CP950 woe32 dos +# CP1046 aix +# CP1124 aix +# CP1125 dos +# CP1129 aix +# CP1131 darwin +# CP1250 woe32 +# CP1251 glibc solaris netbsd openbsd darwin woe32 +# CP1252 aix woe32 +# CP1253 woe32 +# CP1254 woe32 +# CP1255 glibc woe32 +# CP1256 woe32 +# CP1257 woe32 +# GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin +# EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin +# EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin +# EUC-TW glibc aix hpux irix osf solaris netbsd +# BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin +# BIG5-HKSCS glibc solaris darwin +# GBK glibc aix osf solaris darwin woe32 dos +# GB18030 glibc solaris netbsd darwin +# SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin +# JOHAB glibc solaris woe32 +# TIS-620 glibc aix hpux osf solaris +# VISCII Y glibc +# TCVN5712-1 glibc +# ARMSCII-8 glibc darwin +# GEORGIAN-PS glibc +# PT154 glibc +# 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 +# +# 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. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM + +host="$1" +os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` +echo "# This file contains a table of character encoding aliases," +echo "# suitable for operating system '${os}'." +echo "# It was automatically generated from config.charset." +# List of references, updated during installation: +echo "# Packages using this file: " +case "$os" in + linux-gnulibc1*) + # Linux libc5 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "C ASCII" + echo "POSIX ASCII" + for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \ + en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \ + en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \ + es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \ + et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \ + fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \ + it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \ + sv_FI sv_SE; do + echo "$l ISO-8859-1" + echo "$l.iso-8859-1 ISO-8859-1" + echo "$l.iso-8859-15 ISO-8859-15" + echo "$l.iso-8859-15@euro ISO-8859-15" + echo "$l@euro ISO-8859-15" + echo "$l.cp-437 CP437" + echo "$l.cp-850 CP850" + echo "$l.cp-1252 CP1252" + echo "$l.cp-1252@euro CP1252" + #echo "$l.atari-st ATARI-ST" # not a commonly used encoding + echo "$l.utf-8 UTF-8" + echo "$l.utf-8@euro UTF-8" + done + for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \ + sl_SI sr sr_CS sr_YU; do + echo "$l ISO-8859-2" + echo "$l.iso-8859-2 ISO-8859-2" + echo "$l.cp-852 CP852" + echo "$l.cp-1250 CP1250" + echo "$l.utf-8 UTF-8" + done + for l in mk mk_MK ru ru_RU; do + echo "$l ISO-8859-5" + echo "$l.iso-8859-5 ISO-8859-5" + echo "$l.koi8-r KOI8-R" + echo "$l.cp-866 CP866" + echo "$l.cp-1251 CP1251" + echo "$l.utf-8 UTF-8" + done + for l in ar ar_SA; do + echo "$l ISO-8859-6" + echo "$l.iso-8859-6 ISO-8859-6" + echo "$l.cp-864 CP864" + #echo "$l.cp-868 CP868" # not a commonly used encoding + echo "$l.cp-1256 CP1256" + echo "$l.utf-8 UTF-8" + done + for l in el el_GR gr gr_GR; do + echo "$l ISO-8859-7" + echo "$l.iso-8859-7 ISO-8859-7" + echo "$l.cp-869 CP869" + echo "$l.cp-1253 CP1253" + echo "$l.cp-1253@euro CP1253" + echo "$l.utf-8 UTF-8" + echo "$l.utf-8@euro UTF-8" + done + for l in he he_IL iw iw_IL; do + echo "$l ISO-8859-8" + echo "$l.iso-8859-8 ISO-8859-8" + echo "$l.cp-862 CP862" + echo "$l.cp-1255 CP1255" + echo "$l.utf-8 UTF-8" + done + for l in tr tr_TR; do + echo "$l ISO-8859-9" + echo "$l.iso-8859-9 ISO-8859-9" + echo "$l.cp-857 CP857" + echo "$l.cp-1254 CP1254" + echo "$l.utf-8 UTF-8" + done + for l in lt lt_LT lv lv_LV; do + #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name + echo "$l ISO-8859-13" + done + for l in ru_UA uk uk_UA; do + echo "$l KOI8-U" + done + for l in zh zh_CN; do + #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name + echo "$l GB2312" + done + for l in ja ja_JP ja_JP.EUC; do + echo "$l EUC-JP" + done + for l in ko ko_KR; do + echo "$l EUC-KR" + done + for l in th th_TH; do + echo "$l TIS-620" + done + for l in fa fa_IR; do + #echo "$l ISIRI-3342" # a broken encoding + echo "$l.utf-8 UTF-8" + done + ;; + linux* | *-gnu*) + # 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. Therefore, the Makefile does not + # need to install the alias file at all. + # The following applies only to glibc-2.0.x and older libcs. + echo "ISO_646.IRV:1983 ASCII" + ;; + aix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "IBM-850 CP850" + echo "IBM-856 CP856" + echo "IBM-921 ISO-8859-13" + echo "IBM-922 CP922" + echo "IBM-932 CP932" + echo "IBM-943 CP943" + echo "IBM-1046 CP1046" + echo "IBM-1124 CP1124" + echo "IBM-1129 CP1129" + echo "IBM-1252 CP1252" + echo "IBM-eucCN GB2312" + echo "IBM-eucJP EUC-JP" + echo "IBM-eucKR EUC-KR" + echo "IBM-eucTW EUC-TW" + echo "big5 BIG5" + echo "GBK GBK" + echo "TIS-620 TIS-620" + echo "UTF-8 UTF-8" + ;; + hpux*) + echo "iso88591 ISO-8859-1" + echo "iso88592 ISO-8859-2" + echo "iso88595 ISO-8859-5" + echo "iso88596 ISO-8859-6" + echo "iso88597 ISO-8859-7" + echo "iso88598 ISO-8859-8" + echo "iso88599 ISO-8859-9" + echo "iso885915 ISO-8859-15" + echo "roman8 HP-ROMAN8" + echo "arabic8 HP-ARABIC8" + echo "greek8 HP-GREEK8" + echo "hebrew8 HP-HEBREW8" + echo "turkish8 HP-TURKISH8" + echo "kana8 HP-KANA8" + echo "tis620 TIS-620" + echo "big5 BIG5" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "hp15CN GB2312" + #echo "ccdc ?" # what is this? + echo "SJIS SHIFT_JIS" + echo "utf8 UTF-8" + ;; + irix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-9 ISO-8859-9" + echo "eucCN GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + ;; + osf*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "cp850 CP850" + echo "big5 BIG5" + echo "dechanyu DEC-HANYU" + echo "dechanzi GB2312" + echo "deckanji DEC-KANJI" + echo "deckorean EUC-KR" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "GBK GBK" + echo "KSC5601 CP949" + echo "sdeckanji EUC-JP" + echo "SJIS SHIFT_JIS" + echo "TACTIS TIS-620" + echo "UTF-8 UTF-8" + ;; + solaris*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-3 ISO-8859-3" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "koi8-r KOI8-R" + echo "ansi-1251 CP1251" + echo "BIG5 BIG5" + echo "Big5-HKSCS BIG5-HKSCS" + echo "gb2312 GB2312" + echo "GBK GBK" + echo "GB18030 GB18030" + echo "cns11643 EUC-TW" + echo "5601 EUC-KR" + echo "ko_KR.johap92 JOHAB" + echo "eucJP EUC-JP" + echo "PCK SHIFT_JIS" + echo "TIS620.2533 TIS-620" + #echo "sun_eu_greek ?" # what is this? + echo "UTF-8 UTF-8" + ;; + freebsd* | os2*) + # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just + # reuse FreeBSD's locale data for OS/2. + echo "C ASCII" + echo "US-ASCII ASCII" + for l in la_LN lt_LN; do + echo "$l.ASCII ASCII" + done + for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ + fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ + lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do + echo "$l.ISO_8859-1 ISO-8859-1" + echo "$l.DIS_8859-15 ISO-8859-15" + done + for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do + echo "$l.ISO_8859-2 ISO-8859-2" + done + for l in la_LN lt_LT; do + echo "$l.ISO_8859-4 ISO-8859-4" + done + for l in ru_RU ru_SU; do + echo "$l.KOI8-R KOI8-R" + echo "$l.ISO_8859-5 ISO-8859-5" + echo "$l.CP866 CP866" + done + echo "uk_UA.KOI8-U KOI8-U" + echo "zh_TW.BIG5 BIG5" + echo "zh_TW.Big5 BIG5" + echo "zh_CN.EUC GB2312" + echo "ja_JP.EUC EUC-JP" + echo "ja_JP.SJIS SHIFT_JIS" + echo "ja_JP.Shift_JIS SHIFT_JIS" + echo "ko_KR.EUC EUC-KR" + ;; + netbsd*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + echo "eucCN GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "BIG5 BIG5" + echo "SJIS SHIFT_JIS" + ;; + openbsd*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + ;; + darwin[56]*) + # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "C ASCII" + for l in en_AU en_CA en_GB en_US la_LN; do + echo "$l.US-ASCII ASCII" + done + for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ + fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \ + nl_NL no_NO pt_PT sv_SE; do + echo "$l ISO-8859-1" + echo "$l.ISO8859-1 ISO-8859-1" + echo "$l.ISO8859-15 ISO-8859-15" + done + for l in la_LN; do + echo "$l.ISO8859-1 ISO-8859-1" + echo "$l.ISO8859-15 ISO-8859-15" + done + for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do + echo "$l.ISO8859-2 ISO-8859-2" + done + for l in la_LN lt_LT; do + echo "$l.ISO8859-4 ISO-8859-4" + done + for l in ru_RU; do + echo "$l.KOI8-R KOI8-R" + echo "$l.ISO8859-5 ISO-8859-5" + echo "$l.CP866 CP866" + done + for l in bg_BG; do + echo "$l.CP1251 CP1251" + done + echo "uk_UA.KOI8-U KOI8-U" + echo "zh_TW.BIG5 BIG5" + echo "zh_TW.Big5 BIG5" + echo "zh_CN.EUC GB2312" + echo "ja_JP.EUC EUC-JP" + echo "ja_JP.SJIS SHIFT_JIS" + echo "ko_KR.EUC EUC-KR" + ;; + darwin*) + # 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. + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + echo "KOI8-R KOI8-R" + echo "KOI8-U KOI8-U" + echo "CP866 CP866" + echo "CP949 CP949" + echo "CP1131 CP1131" + echo "CP1251 CP1251" + echo "eucCN GB2312" + echo "GB2312 GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "Big5 BIG5" + echo "Big5HKSCS BIG5-HKSCS" + echo "GBK GBK" + echo "GB18030 GB18030" + echo "SJIS SHIFT_JIS" + echo "ARMSCII-8 ARMSCII-8" + echo "PT154 PT154" + #echo "ISCII-DEV ?" + echo "* UTF-8" + ;; + beos* | haiku*) + # BeOS and Haiku have a single locale, and it has UTF-8 encoding. + echo "* UTF-8" + ;; + msdosdjgpp*) + # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "#" + echo "# The encodings given here may not all be correct." + echo "# If you find that the encoding given for your language and" + echo "# country is not the one your DOS machine actually uses, just" + echo "# correct it in this file, and send a mail to" + echo "# Juan Manuel Guerrero <juan.guerrero@gmx.de>" + echo "# and Bruno Haible <bruno@clisp.org>." + echo "#" + echo "C ASCII" + # ISO-8859-1 languages + echo "ca CP850" + echo "ca_ES CP850" + echo "da CP865" # not CP850 ?? + echo "da_DK CP865" # not CP850 ?? + echo "de CP850" + echo "de_AT CP850" + echo "de_CH CP850" + echo "de_DE CP850" + echo "en CP850" + echo "en_AU CP850" # not CP437 ?? + echo "en_CA CP850" + echo "en_GB CP850" + echo "en_NZ CP437" + echo "en_US CP437" + echo "en_ZA CP850" # not CP437 ?? + echo "es CP850" + echo "es_AR CP850" + echo "es_BO CP850" + echo "es_CL CP850" + echo "es_CO CP850" + echo "es_CR CP850" + echo "es_CU CP850" + echo "es_DO CP850" + echo "es_EC CP850" + echo "es_ES CP850" + echo "es_GT CP850" + echo "es_HN CP850" + echo "es_MX CP850" + echo "es_NI CP850" + echo "es_PA CP850" + echo "es_PY CP850" + echo "es_PE CP850" + echo "es_SV CP850" + echo "es_UY CP850" + echo "es_VE CP850" + echo "et CP850" + echo "et_EE CP850" + echo "eu CP850" + echo "eu_ES CP850" + echo "fi CP850" + echo "fi_FI CP850" + echo "fr CP850" + echo "fr_BE CP850" + echo "fr_CA CP850" + echo "fr_CH CP850" + echo "fr_FR CP850" + echo "ga CP850" + echo "ga_IE CP850" + echo "gd CP850" + echo "gd_GB CP850" + echo "gl CP850" + echo "gl_ES CP850" + echo "id CP850" # not CP437 ?? + echo "id_ID CP850" # not CP437 ?? + echo "is CP861" # not CP850 ?? + echo "is_IS CP861" # not CP850 ?? + echo "it CP850" + echo "it_CH CP850" + echo "it_IT CP850" + echo "lt CP775" + echo "lt_LT CP775" + echo "lv CP775" + echo "lv_LV CP775" + echo "nb CP865" # not CP850 ?? + echo "nb_NO CP865" # not CP850 ?? + echo "nl CP850" + echo "nl_BE CP850" + echo "nl_NL CP850" + echo "nn CP865" # not CP850 ?? + echo "nn_NO CP865" # not CP850 ?? + echo "no CP865" # not CP850 ?? + echo "no_NO CP865" # not CP850 ?? + echo "pt CP850" + echo "pt_BR CP850" + echo "pt_PT CP850" + echo "sv CP850" + echo "sv_SE CP850" + # ISO-8859-2 languages + echo "cs CP852" + echo "cs_CZ CP852" + echo "hr CP852" + echo "hr_HR CP852" + echo "hu CP852" + echo "hu_HU CP852" + echo "pl CP852" + echo "pl_PL CP852" + echo "ro CP852" + echo "ro_RO CP852" + echo "sk CP852" + echo "sk_SK CP852" + echo "sl CP852" + echo "sl_SI CP852" + echo "sq CP852" + echo "sq_AL CP852" + echo "sr CP852" # CP852 or CP866 or CP855 ?? + echo "sr_CS CP852" # CP852 or CP866 or CP855 ?? + echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? + # ISO-8859-3 languages + echo "mt CP850" + echo "mt_MT CP850" + # ISO-8859-5 languages + echo "be CP866" + echo "be_BE CP866" + echo "bg CP866" # not CP855 ?? + echo "bg_BG CP866" # not CP855 ?? + echo "mk CP866" # not CP855 ?? + echo "mk_MK CP866" # not CP855 ?? + echo "ru CP866" + echo "ru_RU CP866" + echo "uk CP1125" + echo "uk_UA CP1125" + # ISO-8859-6 languages + echo "ar CP864" + echo "ar_AE CP864" + echo "ar_DZ CP864" + echo "ar_EG CP864" + echo "ar_IQ CP864" + echo "ar_IR CP864" + echo "ar_JO CP864" + echo "ar_KW CP864" + echo "ar_MA CP864" + echo "ar_OM CP864" + echo "ar_QA CP864" + echo "ar_SA CP864" + echo "ar_SY CP864" + # ISO-8859-7 languages + echo "el CP869" + echo "el_GR CP869" + # ISO-8859-8 languages + echo "he CP862" + echo "he_IL CP862" + # ISO-8859-9 languages + echo "tr CP857" + echo "tr_TR CP857" + # Japanese + echo "ja CP932" + echo "ja_JP CP932" + # Chinese + echo "zh_CN GBK" + echo "zh_TW CP950" # not CP938 ?? + # Korean + echo "kr CP949" # not CP934 ?? + echo "kr_KR CP949" # not CP934 ?? + # Thai + echo "th CP874" + echo "th_TH CP874" + # Other + echo "eo CP850" + echo "eo_EO CP850" + ;; +esac diff --git a/lib/config.hin b/lib/config.hin new file mode 100644 index 0000000..a0365b0 --- /dev/null +++ b/lib/config.hin @@ -0,0 +1,1582 @@ +/* lib/config.hin. Generated from configure.ac by autoheader. */ + +/* Define if the compiler is building for multiple architectures of Apple + platforms at once. */ +#undef AA_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 to 1 if the `closedir' function returns void instead of `int'. */ +#undef CLOSEDIR_VOID + +/* 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 + +/* Name of editor program, unless overridden. */ +#undef DEFAULT_EDITOR_PROGRAM + +/* 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 to 1 if an invalid memory address access may yield a SIGBUS. */ +#undef FAULT_YIELDS_SIGBUS + +/* Define this to 1 if F_DUPFD behavior does not match POSIX */ +#undef FCNTL_DUPFD_BUGGY + +/* Define on systems for which file names may have a so-called `drive letter' + prefix, define this to compute the length of that prefix, including the + colon. */ +#undef FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX + +/* Define if the backslash character may also serve as a file name component + separator. */ +#undef FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR + +/* Define if a drive letter prefix denotes a relative path if it is not + followed by a file name component separator. */ +#undef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + +/* 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 make the limit macros in <stdint.h> visible. */ +#undef GL_TRIGGER_STDC_LIMIT_MACROS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module dirname shall be considered present. */ +#undef GNULIB_DIRNAME + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module freopen-safer shall be considered present. */ +#undef GNULIB_FREOPEN_SAFER + +/* Define to indicate the 'malloc' module. */ +#undef GNULIB_MALLOC_GNU + +/* enable some gnulib portability checks */ +#undef GNULIB_PORTCHECK + +/* Define to 1 when the gnulib module btowc should be tested. */ +#undef GNULIB_TEST_BTOWC + +/* 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 fcntl should be tested. */ +#undef GNULIB_TEST_FCNTL + +/* Define to 1 when the gnulib module freopen should be tested. */ +#undef GNULIB_TEST_FREOPEN + +/* Define to 1 when the gnulib module getdtablesize should be tested. */ +#undef GNULIB_TEST_GETDTABLESIZE + +/* Define to 1 when the gnulib module getopt-gnu should be tested. */ +#undef GNULIB_TEST_GETOPT_GNU + +/* Define to 1 when the gnulib module gettimeofday should be tested. */ +#undef GNULIB_TEST_GETTIMEOFDAY + +/* 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 mbscasecmp should be tested. */ +#undef GNULIB_TEST_MBSCASECMP + +/* Define to 1 when the gnulib module mbsinit should be tested. */ +#undef GNULIB_TEST_MBSINIT + +/* Define to 1 when the gnulib module mbslen should be tested. */ +#undef GNULIB_TEST_MBSLEN + +/* Define to 1 when the gnulib module mbsrtowcs should be tested. */ +#undef GNULIB_TEST_MBSRTOWCS + +/* Define to 1 when the gnulib module mbsstr should be tested. */ +#undef GNULIB_TEST_MBSSTR + +/* Define to 1 when the gnulib module memchr should be tested. */ +#undef GNULIB_TEST_MEMCHR + +/* 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 putenv should be tested. */ +#undef GNULIB_TEST_PUTENV + +/* 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 sigprocmask should be tested. */ +#undef GNULIB_TEST_SIGPROCMASK + +/* Define to 1 when the gnulib module sleep should be tested. */ +#undef GNULIB_TEST_SLEEP + +/* Define to 1 when the gnulib module stat should be tested. */ +#undef GNULIB_TEST_STAT + +/* Define to 1 when the gnulib module strerror should be tested. */ +#undef GNULIB_TEST_STRERROR + +/* Define to 1 when the gnulib module strndup should be tested. */ +#undef GNULIB_TEST_STRNDUP + +/* Define to 1 when the gnulib module strnlen should be tested. */ +#undef GNULIB_TEST_STRNLEN + +/* Define to 1 when the gnulib module strptime should be tested. */ +#undef GNULIB_TEST_STRPTIME + +/* Define to 1 when the gnulib module strtoll should be tested. */ +#undef GNULIB_TEST_STRTOLL + +/* Define to 1 when the gnulib module strtoull should be tested. */ +#undef GNULIB_TEST_STRTOULL + +/* Define to 1 when the gnulib module symlink should be tested. */ +#undef GNULIB_TEST_SYMLINK + +/* 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 unsetenv should be tested. */ +#undef GNULIB_TEST_UNSETENV + +/* Define to 1 when the gnulib module usleep should be tested. */ +#undef GNULIB_TEST_USLEEP + +/* 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 wcwidth should be tested. */ +#undef GNULIB_TEST_WCWIDTH + +/* Define to 1 if you have the `alarm' function. */ +#undef HAVE_ALARM + +/* 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 MacOS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYCURRENT + +/* Define to 1 if you have the MacOS 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 to 1 if C supports variable-length arrays. */ +#undef HAVE_C_VARARRAYS + +/* 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 `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 `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 `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 `getenv', and to 0 if you don't. + */ +#undef HAVE_DECL_GETENV + +/* Define to 1 if you have the declaration of `getopt_clip', and to 0 if you + don't. */ +#undef HAVE_DECL_GETOPT_CLIP + +/* Define to 1 if you have the declaration of `imaxabs', and to 0 if you + don't. */ +#undef HAVE_DECL_IMAXABS + +/* Define to 1 if you have the declaration of `imaxdiv', and to 0 if you + don't. */ +#undef HAVE_DECL_IMAXDIV + +/* 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 `optreset', and to 0 if you + don't. */ +#undef HAVE_DECL_OPTRESET + +/* 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 `sigaltstack', and to 0 if you + don't. */ +#undef HAVE_DECL_SIGALTSTACK + +/* Define to 1 if you have the declaration of `sleep', and to 0 if you don't. + */ +#undef HAVE_DECL_SLEEP + +/* Define to 1 if you have the declaration of `strerror', and to 0 if you + don't. */ +#undef HAVE_DECL_STRERROR + +/* 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 `strndup', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNDUP + +/* Define to 1 if you have the declaration of `strnlen', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNLEN + +/* Define to 1 if you have the declaration of `strtoimax', and to 0 if you + don't. */ +#undef HAVE_DECL_STRTOIMAX + +/* Define to 1 if you have the declaration of `strtoll', and to 0 if you + don't. */ +#undef HAVE_DECL_STRTOLL + +/* Define to 1 if you have the declaration of `strtoull', and to 0 if you + don't. */ +#undef HAVE_DECL_STRTOULL + +/* Define to 1 if you have the declaration of `strtoumax', and to 0 if you + don't. */ +#undef HAVE_DECL_STRTOUMAX + +/* 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 `wctob', and to 0 if you don't. + */ +#undef HAVE_DECL_WCTOB + +/* Define to 1 if you have the declaration of `wcwidth', and to 0 if you + don't. */ +#undef HAVE_DECL_WCWIDTH + +/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. + */ +#undef HAVE_DIRENT_H + +/* Define to 1 if you have the `dup2' function. */ +#undef HAVE_DUP2 + +/* Define if you have the declaration of environ. */ +#undef HAVE_ENVIRON_DECL + +/* Define to 1 if you have the <errno.h> header file. */ +#undef HAVE_ERRNO_H + +/* Define to 1 if you have the `fcntl' function. */ +#undef HAVE_FCNTL + +/* Define to 1 if you have the <fcntl.h> header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + +/* Define to 1 if you have the `getdtablesize' function. */ +#undef HAVE_GETDTABLESIZE + +/* 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 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 if you have the iconv() function and it works. */ +#undef HAVE_ICONV + +/* Define to 1 if you have the <iconv.h> header file. */ +#undef HAVE_ICONV_H + +/* Define to 1 if the compiler supports one of the keywords 'inline', + '__inline__', '__inline' and effectively inlines functions marked as such. + */ +#undef HAVE_INLINE + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `isblank' function. */ +#undef HAVE_ISBLANK + +/* Define to 1 if you have the `iswblank' function. */ +#undef HAVE_ISWBLANK + +/* 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 to 1 if you have the <libintl.h> header file. */ +#undef HAVE_LIBINTL_H + +/* Define if you have the libsigsegv library. */ +#undef HAVE_LIBSIGSEGV + +/* Define to 1 if you have the <locale.h> header file. */ +#undef HAVE_LOCALE_H + +/* 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 your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC + +/* 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 `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 you have the `mbslen' function. */ +#undef HAVE_MBSLEN + +/* Define to 1 if you have the `mbsrtowcs' function. */ +#undef HAVE_MBSRTOWCS + +/* Define to 1 if <wchar.h> declares mbstate_t. */ +#undef HAVE_MBSTATE_T + +/* Define to 1 if you have the `memchr' function. */ +#undef HAVE_MEMCHR + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mempcpy' function. */ +#undef HAVE_MEMPCPY + +/* 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 if you have the `nanotime' function. */ +#undef HAVE_NANOTIME + +/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ +#undef HAVE_NDIR_H + +/* Define to 1 if you have the `nl_langinfo' function. */ +#undef HAVE_NL_LANGINFO + +/* Define to 1 if you have the `pathconf' function. */ +#undef HAVE_PATHCONF + +/* Define to 1 if you have the <random.h> header file. */ +#undef HAVE_RANDOM_H + +/* Define to 1 if atoll is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_ATOLL + +/* Define to 1 if btowc is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_BTOWC + +/* Define to 1 if canonicalize_file_name is declared even after undefining + macros. */ +#undef HAVE_RAW_DECL_CANONICALIZE_FILE_NAME + +/* Define to 1 if chown is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_CHOWN + +/* Define to 1 if dprintf is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_DPRINTF + +/* Define to 1 if dup2 is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_DUP2 + +/* Define to 1 if dup3 is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_DUP3 + +/* Define to 1 if endusershell is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_ENDUSERSHELL + +/* Define to 1 if environ is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_ENVIRON + +/* Define to 1 if euidaccess is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_EUIDACCESS + +/* Define to 1 if faccessat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FACCESSAT + +/* Define to 1 if fchdir is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FCHDIR + +/* Define to 1 if fchmodat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FCHMODAT + +/* Define to 1 if fchownat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FCHOWNAT + +/* Define to 1 if fcntl is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FCNTL + +/* Define to 1 if fpurge is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FPURGE + +/* Define to 1 if fseeko is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FSEEKO + +/* Define to 1 if fstatat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FSTATAT + +/* Define to 1 if fsync is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FSYNC + +/* Define to 1 if ftello is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FTELLO + +/* Define to 1 if ftruncate is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FTRUNCATE + +/* Define to 1 if futimens is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FUTIMENS + +/* Define to 1 if getcwd is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETCWD + +/* Define to 1 if getdelim is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETDELIM + +/* Define to 1 if getdomainname is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETDOMAINNAME + +/* Define to 1 if getdtablesize is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETDTABLESIZE + +/* Define to 1 if getgroups is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETGROUPS + +/* Define to 1 if gethostname is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETHOSTNAME + +/* Define to 1 if getline is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETLINE + +/* Define to 1 if getloadavg is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETLOADAVG + +/* Define to 1 if getlogin is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETLOGIN + +/* Define to 1 if getlogin_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETLOGIN_R + +/* Define to 1 if getpagesize is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETPAGESIZE + +/* Define to 1 if getsubopt is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETSUBOPT + +/* Define to 1 if gettimeofday is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETTIMEOFDAY + +/* Define to 1 if getusershell is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETUSERSHELL + +/* Define to 1 if grantpt is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GRANTPT + +/* Define to 1 if imaxabs is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_IMAXABS + +/* Define to 1 if imaxdiv is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_IMAXDIV + +/* Define to 1 if initstat_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_INITSTAT_R + +/* Define to 1 if lchmod is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_LCHMOD + +/* Define to 1 if lchown is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_LCHOWN + +/* Define to 1 if link is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_LINK + +/* Define to 1 if linkat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_LINKAT + +/* Define to 1 if lseek is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_LSEEK + +/* Define to 1 if lstat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_LSTAT + +/* Define to 1 if mbrlen is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MBRLEN + +/* Define to 1 if mbrtowc is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MBRTOWC + +/* Define to 1 if mbsinit is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MBSINIT + +/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MBSNRTOWCS + +/* Define to 1 if mbsrtowcs is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MBSRTOWCS + +/* Define to 1 if memmem is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MEMMEM + +/* Define to 1 if mempcpy is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MEMPCPY + +/* Define to 1 if memrchr is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MEMRCHR + +/* Define to 1 if mkdirat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKDIRAT + +/* Define to 1 if mkdtemp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKDTEMP + +/* Define to 1 if mkfifo is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKFIFO + +/* Define to 1 if mkfifoat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKFIFOAT + +/* Define to 1 if mknod is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKNOD + +/* Define to 1 if mknodat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKNODAT + +/* Define to 1 if mkostemp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKOSTEMP + +/* Define to 1 if mkostemps is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKOSTEMPS + +/* Define to 1 if mkstemp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKSTEMP + +/* Define to 1 if mkstemps is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKSTEMPS + +/* Define to 1 if nl_langinfo is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_NL_LANGINFO + +/* Define to 1 if openat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_OPENAT + +/* Define to 1 if pipe2 is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_PIPE2 + +/* Define to 1 if popen is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_POPEN + +/* Define to 1 if pread is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_PREAD + +/* Define to 1 if ptsname is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_PTSNAME + +/* Define to 1 if random_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_RANDOM_R + +/* Define to 1 if rawmemchr is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_RAWMEMCHR + +/* Define to 1 if readlink is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_READLINK + +/* Define to 1 if readlinkat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_READLINKAT + +/* Define to 1 if realpath is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_REALPATH + +/* Define to 1 if renameat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_RENAMEAT + +/* Define to 1 if rmdir is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_RMDIR + +/* Define to 1 if rpmatch is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_RPMATCH + +/* Define to 1 if setenv is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SETENV + +/* Define to 1 if setstate_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SETSTATE_R + +/* Define to 1 if setusershell is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SETUSERSHELL + +/* Define to 1 if sigaction is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SIGACTION + +/* Define to 1 if sigaddset is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SIGADDSET + +/* Define to 1 if sigdelset is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SIGDELSET + +/* Define to 1 if sigemptyset is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SIGEMPTYSET + +/* Define to 1 if sigfillset is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SIGFILLSET + +/* Define to 1 if sigismember is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SIGISMEMBER + +/* Define to 1 if sigpending is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SIGPENDING + +/* Define to 1 if sigprocmask is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SIGPROCMASK + +/* Define to 1 if sleep is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SLEEP + +/* Define to 1 if snprintf is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SNPRINTF + +/* Define to 1 if srandom_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SRANDOM_R + +/* Define to 1 if stat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STAT + +/* Define to 1 if stpcpy is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STPCPY + +/* Define to 1 if stpncpy is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STPNCPY + +/* Define to 1 if strcasecmp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRCASECMP + +/* Define to 1 if strcasestr is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRCASESTR + +/* Define to 1 if strchrnul is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRCHRNUL + +/* Define to 1 if strdup is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRDUP + +/* Define to 1 if strncasecmp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRNCASECMP + +/* Define to 1 if strncat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRNCAT + +/* Define to 1 if strndup is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRNDUP + +/* Define to 1 if strnlen is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRNLEN + +/* Define to 1 if strpbrk is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRPBRK + +/* Define to 1 if strsep is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRSEP + +/* Define to 1 if strsignal is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRSIGNAL + +/* Define to 1 if strtod is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRTOD + +/* Define to 1 if strtoimax is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRTOIMAX + +/* Define to 1 if strtok_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRTOK_R + +/* Define to 1 if strtoll is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRTOLL + +/* Define to 1 if strtoull is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRTOULL + +/* Define to 1 if strtoumax is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRTOUMAX + +/* Define to 1 if strverscmp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRVERSCMP + +/* Define to 1 if symlink is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SYMLINK + +/* Define to 1 if symlinkat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SYMLINKAT + +/* Define to 1 if tmpfile is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_TMPFILE + +/* Define to 1 if ttyname_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_TTYNAME_R + +/* Define to 1 if unlink is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_UNLINK + +/* Define to 1 if unlinkat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_UNLINKAT + +/* Define to 1 if unlockpt is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_UNLOCKPT + +/* Define to 1 if unsetenv is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_UNSETENV + +/* Define to 1 if usleep is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_USLEEP + +/* Define to 1 if utimensat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_UTIMENSAT + +/* Define to 1 if vdprintf is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_VDPRINTF + +/* Define to 1 if vsnprintf is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_VSNPRINTF + +/* Define to 1 if wcrtomb is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCRTOMB + +/* Define to 1 if wcsnrtombs is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSNRTOMBS + +/* Define to 1 if wcsrtombs is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSRTOMBS + +/* Define to 1 if wctob is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCTOB + +/* Define to 1 if wcwidth is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCWIDTH + +/* Define to 1 if you have the <search.h> header file. */ +#undef HAVE_SEARCH_H + +/* Define to 1 if you have the `setenv' function. */ +#undef HAVE_SETENV + +/* Define to 1 if you have the `setrlimit' function. */ +#undef HAVE_SETRLIMIT + +/* 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 you have the `sigblock' function. */ +#undef HAVE_SIGBLOCK + +/* 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 you have the <signal.h> header file. */ +#undef HAVE_SIGNAL_H + +/* 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 you have the `sigprocmask' function. */ +#undef HAVE_SIGPROCMASK + +/* Define to 1 if the system has the type `sigset_t'. */ +#undef HAVE_SIGSET_T + +/* Define to 1 if you have the `sleep' function. */ +#undef HAVE_SLEEP + +/* Define to 1 if extending the stack slightly past the limit causes a SIGSEGV + which can be handled on an alternate stack established with sigaltstack. */ +#undef HAVE_STACK_OVERFLOW_HANDLING + +/* Define to 1 if the system has the type `stack_t'. */ +#undef HAVE_STACK_T + +/* Define to 1 if you have the <stdarg.h> header file. */ +#undef HAVE_STDARG_H + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the <stddef.h> header file. */ +#undef HAVE_STDDEF_H + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdio.h> header file. */ +#undef HAVE_STDIO_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 `strcasecoll' function. */ +#undef HAVE_STRCASECOLL + +/* Define to 1 if you have the `strerror_r' function. */ +#undef HAVE_STRERROR_R + +/* Define to 1 if you have the `stricoll' function. */ +#undef HAVE_STRICOLL + +/* 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 `strndup' function. */ +#undef HAVE_STRNDUP + +/* Define to 1 if you have the `strptime' function. */ +#undef HAVE_STRPTIME + +/* Define to 1 if you have the `strtoimax' function. */ +#undef HAVE_STRTOIMAX + +/* Define to 1 if you have the `strtol' function. */ +#undef HAVE_STRTOL + +/* Define to 1 if you have the `strtoll' function. */ +#undef HAVE_STRTOLL + +/* Define to 1 if you have the `strtoul' function. */ +#undef HAVE_STRTOUL + +/* Define to 1 if you have the `strtoull' function. */ +#undef HAVE_STRTOULL + +/* Define to 1 if you have the `strtoumax' function. */ +#undef HAVE_STRTOUMAX + +/* 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 `st_blksize' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BLKSIZE + +/* Define to 1 if `st_rdev' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_RDEV + +/* 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 `symlink' function. */ +#undef HAVE_SYMLINK + +/* 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/dir.h> header file, and it defines `DIR'. + */ +#undef HAVE_SYS_DIR_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/ndir.h> header file, and it defines `DIR'. + */ +#undef HAVE_SYS_NDIR_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/timeb.h> header file. */ +#undef HAVE_SYS_TIMEB_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 <sys/wait.h> that is POSIX.1 compatible. */ +#undef HAVE_SYS_WAIT_H + +/* Define to 1 if you have the `timegm' function. */ +#undef HAVE_TIMEGM + +/* Define to 1 if you have the <time.h> header file. */ +#undef HAVE_TIME_H + +/* 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 `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 <ucontext.h> header file. */ +#undef HAVE_UCONTEXT_H + +/* 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 to 1 if you have the `usleep' function. */ +#undef HAVE_USLEEP + +/* Define to 1 if you have the `vfork' function. */ +#undef HAVE_VFORK + +/* Define to 1 if you have the <vfork.h> header file. */ +#undef HAVE_VFORK_H + +/* 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 `wcscoll' function. */ +#undef HAVE_WCSCOLL + +/* 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 `wcwidth' function. */ +#undef HAVE_WCWIDTH + +/* 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 you have the `wmemchr' function. */ +#undef HAVE_WMEMCHR + +/* Define to 1 if you have the `wmemcpy' function. */ +#undef HAVE_WMEMCPY + +/* Define to 1 if you have the `wmempcpy' function. */ +#undef HAVE_WMEMPCPY + +/* Define to 1 if `fork' works. */ +#undef HAVE_WORKING_FORK + +/* 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 `vfork' works. */ +#undef HAVE_WORKING_VFORK + +/* Define to 1 if extending the stack slightly past the limit causes a + SIGSEGV, and an alternate stack can be established with sigaltstack, and + the signal handler is passed a context that specifies the run time stack. + This behavior is defined by POSIX 1003.1-2001 with the X/Open System + Interface (XSI) option and is a standardized way to implement a SEGV-based + stack overflow detection heuristic. */ +#undef HAVE_XSI_STACK_OVERFLOW_HEURISTIC + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* Define to 1 if you have the `_ftime' function. */ +#undef HAVE__FTIME + +/* Define as const if the declaration of iconv() needs const. */ +#undef ICONV_CONST + +/* Define to a symbolic name denoting the flavor of iconv_open() + implementation. */ +#undef ICONV_FLAVOR + +#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#else +# define ISSLASH(C) ((C) == '/') +#endif + +/* Define to 1 if `lstat' dereferences a symlink specified with a trailing + slash. */ +#undef LSTAT_FOLLOWS_SLASHED_SYMLINK + +/* 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 has the NULL string argument bug. */ +#undef MBRTOWC_NULL_ARG_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 + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* 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 + +/* Name of "pr" program. */ +#undef PR_PROGRAM + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'ptrdiff_t'. */ +#undef PTRDIFF_T_SUFFIX + +/* Define to 1 if stat needs help when passed a directory name with a trailing + slash */ +#undef REPLACE_FUNC_STAT_DIR + +/* 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 this to 1 if strerror is broken. */ +#undef REPLACE_STRERROR + +/* Define if sigaltstack() interprets the stack_t.ss_sp field incorrectly, as + the highest address of the alternate stack range rather than as the lowest + address. */ +#undef SIGALTSTACK_SS_REVERSED + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'sig_atomic_t'. */ +#undef SIG_ATOMIC_T_SUFFIX + +/* 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 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 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 + +/* 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 + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* enable compile-time and run-time bounds-checking, and some warnings */ +#undef _FORTIFY_SOURCE + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* 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 regoff_t to be at least as wide POSIX requires. */ +#undef _REGEX_LARGE_OFFSETS + +/* Define to 500 only on HP-UX. */ +#undef _XOPEN_SOURCE + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Define to rpl_ if the getopt replacement functions and variables should be + used. */ +#undef __GETOPT_PREFIX + +/* Ensure that <stdint.h> defines the limit macros, since gnulib's + <inttypes.h> relies on them. */ +#if defined __cplusplus && !defined __STDC_LIMIT_MACROS && GL_TRIGGER_STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS 1 +#endif + + +/* Define to a replacement function name for fnmatch(). */ +#undef fnmatch + +/* 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 rpl_gmtime if the replacement function should be used. */ +#undef gmtime + +/* 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 + +/* 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 MacOS 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 + +/* Define to 1 if the compiler is checking for lint. */ +#undef lint + +/* Define to rpl_localtime if the replacement function should be used. */ +#undef localtime + +/* Define to rpl_malloc if the replacement function should be used. */ +#undef malloc + +/* Define to a type if <wchar.h> does not define. */ +#undef mbstate_t + +/* Define to rpl_mktime if the replacement function should be used. */ +#undef mktime + +/* 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 int' if <sys/types.h> does not define. */ +#undef off_t + +/* Define to `int' if <sys/types.h> does not define. */ +#undef pid_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 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 + + +/* Define to an unsigned 32-bit type if <sys/types.h> lacks this type. */ +#undef useconds_t + +/* Define as a macro for copying va_list variables. */ +#undef va_copy + +/* Define as `fork' if `vfork' does not work. */ +#undef vfork diff --git a/lib/diffseq.h b/lib/diffseq.h new file mode 100644 index 0000000..6370221 --- /dev/null +++ b/lib/diffseq.h @@ -0,0 +1,523 @@ +/* Analyze differences between two vectors. + + Copyright (C) 1988-1989, 1992-1995, 2001-2004, 2006-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 basic idea is to consider two vectors as similar if, when + transforming the first vector into the second vector through a + sequence of edits (inserts and deletes of one element each), + this sequence is short - or equivalently, if the ordered list + of elements that are untouched by these edits is long. For a + good introduction to the subject, read about the "Levenshtein + distance" in Wikipedia. + + The basic algorithm is described in: + "An O(ND) Difference Algorithm and its Variations", Eugene Myers, + Algorithmica Vol. 1 No. 2, 1986, pp. 251-266; + see especially section 4.2, which describes the variation used below. + + The basic algorithm was independently discovered as described in: + "Algorithms for Approximate String Matching", E. Ukkonen, + Information and Control Vol. 64, 1985, pp. 100-118. + + Unless the 'find_minimal' flag is set, this code uses the TOO_EXPENSIVE + heuristic, by Paul Eggert, to limit the cost to O(N**1.5 log N) + at the price of producing suboptimal output for large inputs with + many differences. */ + +/* Before including this file, you need to define: + ELEMENT The element type of the vectors being compared. + EQUAL A two-argument macro that tests two elements for + equality. + OFFSET A signed integer type sufficient to hold the + difference between two indices. Usually + something like ssize_t. + EXTRA_CONTEXT_FIELDS Declarations of fields for 'struct context'. + NOTE_DELETE(ctxt, xoff) Record the removal of the object xvec[xoff]. + NOTE_INSERT(ctxt, yoff) Record the insertion of the object yvec[yoff]. + EARLY_ABORT(ctxt) (Optional) A boolean expression that triggers an + early abort of the computation. + USE_HEURISTIC (Optional) Define if you want to support the + heuristic for large vectors. + It is also possible to use this file with abstract arrays. In this case, + xvec and yvec are not represented in memory. They only exist conceptually. + In this case, the list of defines above is amended as follows: + ELEMENT Undefined. + EQUAL Undefined. + XVECREF_YVECREF_EQUAL(ctxt, xoff, yoff) + A three-argument macro: References xvec[xoff] and + yvec[yoff] and tests these elements for equality. + Before including this file, you also need to include: + #include <limits.h> + #include <stdbool.h> + #include "minmax.h" + */ + +/* Maximum value of type OFFSET. */ +#define OFFSET_MAX \ + ((((OFFSET)1 << (sizeof (OFFSET) * CHAR_BIT - 2)) - 1) * 2 + 1) + +/* Default to no early abort. */ +#ifndef EARLY_ABORT +# define EARLY_ABORT(ctxt) false +#endif + +/* Use this to suppress gcc's `...may be used before initialized' warnings. + Beware: The Code argument must not contain commas. */ +#ifndef IF_LINT +# ifdef lint +# define IF_LINT(Code) Code +# else +# define IF_LINT(Code) /* empty */ +# endif +#endif + +/* As above, but when Code must contain one comma. */ +#ifndef IF_LINT2 +# ifdef lint +# define IF_LINT2(Code1, Code2) Code1, Code2 +# else +# define IF_LINT2(Code1, Code2) /* empty */ +# endif +#endif + +/* + * Context of comparison operation. + */ +struct context +{ + #ifdef ELEMENT + /* Vectors being compared. */ + ELEMENT const *xvec; + ELEMENT const *yvec; + #endif + + /* Extra fields. */ + EXTRA_CONTEXT_FIELDS + + /* Vector, indexed by diagonal, containing 1 + the X coordinate of the point + furthest along the given diagonal in the forward search of the edit + matrix. */ + OFFSET *fdiag; + + /* Vector, indexed by diagonal, containing the X coordinate of the point + furthest along the given diagonal in the backward search of the edit + matrix. */ + OFFSET *bdiag; + + #ifdef USE_HEURISTIC + /* This corresponds to the diff -H flag. With this heuristic, for + vectors with a constant small density of changes, the algorithm is + linear in the vectors size. */ + bool heuristic; + #endif + + /* Edit scripts longer than this are too expensive to compute. */ + OFFSET too_expensive; + + /* Snakes bigger than this are considered `big'. */ + #define SNAKE_LIMIT 20 +}; + +struct partition +{ + /* Midpoints of this partition. */ + OFFSET xmid; + OFFSET ymid; + + /* True if low half will be analyzed minimally. */ + bool lo_minimal; + + /* Likewise for high half. */ + bool hi_minimal; +}; + + +/* Find the midpoint of the shortest edit script for a specified portion + of the two vectors. + + Scan from the beginnings of the vectors, and simultaneously from the ends, + doing a breadth-first search through the space of edit-sequence. + When the two searches meet, we have found the midpoint of the shortest + edit sequence. + + If FIND_MINIMAL is true, find the minimal edit script regardless of + expense. Otherwise, if the search is too expensive, use heuristics to + stop the search and report a suboptimal answer. + + Set PART->(xmid,ymid) to the midpoint (XMID,YMID). The diagonal number + XMID - YMID equals the number of inserted elements minus the number + of deleted elements (counting only elements before the midpoint). + + Set PART->lo_minimal to true iff the minimal edit script for the + left half of the partition is known; similarly for PART->hi_minimal. + + This function assumes that the first elements of the specified portions + of the two vectors do not match, and likewise that the last elements do not + match. The caller must trim matching elements from the beginning and end + of the portions it is going to specify. + + If we return the "wrong" partitions, the worst this can do is cause + suboptimal diff output. It cannot cause incorrect diff output. */ + +static void +diag (OFFSET xoff, OFFSET xlim, OFFSET yoff, OFFSET ylim, bool find_minimal, + struct partition *part, struct context *ctxt) +{ + OFFSET *const fd = ctxt->fdiag; /* Give the compiler a chance. */ + OFFSET *const bd = ctxt->bdiag; /* Additional help for the compiler. */ +#ifdef ELEMENT + ELEMENT const *const xv = ctxt->xvec; /* Still more help for the compiler. */ + ELEMENT const *const yv = ctxt->yvec; /* And more and more . . . */ + #define XREF_YREF_EQUAL(x,y) EQUAL (xv[x], yv[y]) +#else + #define XREF_YREF_EQUAL(x,y) XVECREF_YVECREF_EQUAL (ctxt, x, y) +#endif + const OFFSET dmin = xoff - ylim; /* Minimum valid diagonal. */ + const OFFSET dmax = xlim - yoff; /* Maximum valid diagonal. */ + const OFFSET fmid = xoff - yoff; /* Center diagonal of top-down search. */ + const OFFSET bmid = xlim - ylim; /* Center diagonal of bottom-up search. */ + OFFSET fmin = fmid; + OFFSET fmax = fmid; /* Limits of top-down search. */ + OFFSET bmin = bmid; + OFFSET bmax = bmid; /* Limits of bottom-up search. */ + OFFSET c; /* Cost. */ + bool odd = (fmid - bmid) & 1; /* True if southeast corner is on an odd + diagonal with respect to the northwest. */ + + fd[fmid] = xoff; + bd[bmid] = xlim; + + for (c = 1;; ++c) + { + OFFSET d; /* Active diagonal. */ + bool big_snake = false; + + /* Extend the top-down search by an edit step in each diagonal. */ + if (fmin > dmin) + fd[--fmin - 1] = -1; + else + ++fmin; + if (fmax < dmax) + fd[++fmax + 1] = -1; + else + --fmax; + for (d = fmax; d >= fmin; d -= 2) + { + OFFSET x; + OFFSET y; + OFFSET tlo = fd[d - 1]; + OFFSET thi = fd[d + 1]; + OFFSET x0 = tlo < thi ? thi : tlo + 1; + + for (x = x0, y = x0 - d; + x < xlim && y < ylim && XREF_YREF_EQUAL (x, y); + x++, y++) + continue; + if (x - x0 > SNAKE_LIMIT) + big_snake = true; + fd[d] = x; + if (odd && bmin <= d && d <= bmax && bd[d] <= x) + { + part->xmid = x; + part->ymid = y; + part->lo_minimal = part->hi_minimal = true; + return; + } + } + + /* Similarly extend the bottom-up search. */ + if (bmin > dmin) + bd[--bmin - 1] = OFFSET_MAX; + else + ++bmin; + if (bmax < dmax) + bd[++bmax + 1] = OFFSET_MAX; + else + --bmax; + for (d = bmax; d >= bmin; d -= 2) + { + OFFSET x; + OFFSET y; + OFFSET tlo = bd[d - 1]; + OFFSET thi = bd[d + 1]; + OFFSET x0 = tlo < thi ? tlo : thi - 1; + + for (x = x0, y = x0 - d; + xoff < x && yoff < y && XREF_YREF_EQUAL (x - 1, y - 1); + x--, y--) + continue; + if (x0 - x > SNAKE_LIMIT) + big_snake = true; + bd[d] = x; + if (!odd && fmin <= d && d <= fmax && x <= fd[d]) + { + part->xmid = x; + part->ymid = y; + part->lo_minimal = part->hi_minimal = true; + return; + } + } + + if (find_minimal) + continue; + +#ifdef USE_HEURISTIC + /* Heuristic: check occasionally for a diagonal that has made lots + of progress compared with the edit distance. If we have any + such, find the one that has made the most progress and return it + as if it had succeeded. + + With this heuristic, for vectors with a constant small density + of changes, the algorithm is linear in the vector size. */ + + if (200 < c && big_snake && ctxt->heuristic) + { + { + OFFSET best = 0; + + for (d = fmax; d >= fmin; d -= 2) + { + OFFSET dd = d - fmid; + OFFSET x = fd[d]; + OFFSET y = x - d; + OFFSET v = (x - xoff) * 2 - dd; + + if (v > 12 * (c + (dd < 0 ? -dd : dd))) + { + if (v > best + && xoff + SNAKE_LIMIT <= x && x < xlim + && yoff + SNAKE_LIMIT <= y && y < ylim) + { + /* We have a good enough best diagonal; now insist + that it end with a significant snake. */ + int k; + + for (k = 1; XREF_YREF_EQUAL (x - k, y - k); k++) + if (k == SNAKE_LIMIT) + { + best = v; + part->xmid = x; + part->ymid = y; + break; + } + } + } + } + if (best > 0) + { + part->lo_minimal = true; + part->hi_minimal = false; + return; + } + } + + { + OFFSET best = 0; + + for (d = bmax; d >= bmin; d -= 2) + { + OFFSET dd = d - bmid; + OFFSET x = bd[d]; + OFFSET y = x - d; + OFFSET v = (xlim - x) * 2 + dd; + + if (v > 12 * (c + (dd < 0 ? -dd : dd))) + { + if (v > best + && xoff < x && x <= xlim - SNAKE_LIMIT + && yoff < y && y <= ylim - SNAKE_LIMIT) + { + /* We have a good enough best diagonal; now insist + that it end with a significant snake. */ + int k; + + for (k = 0; XREF_YREF_EQUAL (x + k, y + k); k++) + if (k == SNAKE_LIMIT - 1) + { + best = v; + part->xmid = x; + part->ymid = y; + break; + } + } + } + } + if (best > 0) + { + part->lo_minimal = false; + part->hi_minimal = true; + return; + } + } + } +#endif /* USE_HEURISTIC */ + + /* Heuristic: if we've gone well beyond the call of duty, give up + and report halfway between our best results so far. */ + if (c >= ctxt->too_expensive) + { + OFFSET fxybest; + OFFSET fxbest IF_LINT (= 0); + OFFSET bxybest; + OFFSET bxbest IF_LINT (= 0); + + /* Find forward diagonal that maximizes X + Y. */ + fxybest = -1; + for (d = fmax; d >= fmin; d -= 2) + { + OFFSET x = MIN (fd[d], xlim); + OFFSET y = x - d; + if (ylim < y) + { + x = ylim + d; + y = ylim; + } + if (fxybest < x + y) + { + fxybest = x + y; + fxbest = x; + } + } + + /* Find backward diagonal that minimizes X + Y. */ + bxybest = OFFSET_MAX; + for (d = bmax; d >= bmin; d -= 2) + { + OFFSET x = MAX (xoff, bd[d]); + OFFSET y = x - d; + if (y < yoff) + { + x = yoff + d; + y = yoff; + } + if (x + y < bxybest) + { + bxybest = x + y; + bxbest = x; + } + } + + /* Use the better of the two diagonals. */ + if ((xlim + ylim) - bxybest < fxybest - (xoff + yoff)) + { + part->xmid = fxbest; + part->ymid = fxybest - fxbest; + part->lo_minimal = true; + part->hi_minimal = false; + } + else + { + part->xmid = bxbest; + part->ymid = bxybest - bxbest; + part->lo_minimal = false; + part->hi_minimal = true; + } + return; + } + } + #undef XREF_YREF_EQUAL +} + + +/* Compare in detail contiguous subsequences of the two vectors + which are known, as a whole, to match each other. + + The subsequence of vector 0 is [XOFF, XLIM) and likewise for vector 1. + + Note that XLIM, YLIM are exclusive bounds. All indices into the vectors + are origin-0. + + If FIND_MINIMAL, find a minimal difference no matter how + expensive it is. + + The results are recorded by invoking NOTE_DELETE and NOTE_INSERT. + + Return false if terminated normally, or true if terminated through early + abort. */ + +static bool +compareseq (OFFSET xoff, OFFSET xlim, OFFSET yoff, OFFSET ylim, + bool find_minimal, struct context *ctxt) +{ +#ifdef ELEMENT + ELEMENT const *xv = ctxt->xvec; /* Help the compiler. */ + ELEMENT const *yv = ctxt->yvec; + #define XREF_YREF_EQUAL(x,y) EQUAL (xv[x], yv[y]) +#else + #define XREF_YREF_EQUAL(x,y) XVECREF_YVECREF_EQUAL (ctxt, x, y) +#endif + + /* Slide down the bottom initial diagonal. */ + while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xoff, yoff)) + { + xoff++; + yoff++; + } + + /* Slide up the top initial diagonal. */ + while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xlim - 1, ylim - 1)) + { + xlim--; + ylim--; + } + + /* Handle simple cases. */ + if (xoff == xlim) + while (yoff < ylim) + { + NOTE_INSERT (ctxt, yoff); + if (EARLY_ABORT (ctxt)) + return true; + yoff++; + } + else if (yoff == ylim) + while (xoff < xlim) + { + NOTE_DELETE (ctxt, xoff); + if (EARLY_ABORT (ctxt)) + return true; + xoff++; + } + else + { + struct partition part IF_LINT2 (= { .xmid = 0, .ymid = 0 }); + + /* Find a point of correspondence in the middle of the vectors. */ + diag (xoff, xlim, yoff, ylim, find_minimal, &part, ctxt); + + /* Use the partitions to split this problem into subproblems. */ + if (compareseq (xoff, part.xmid, yoff, part.ymid, part.lo_minimal, ctxt)) + return true; + if (compareseq (part.xmid, xlim, part.ymid, ylim, part.hi_minimal, ctxt)) + return true; + } + + return false; + #undef XREF_YREF_EQUAL +} + +#undef ELEMENT +#undef EQUAL +#undef OFFSET +#undef EXTRA_CONTEXT_FIELDS +#undef NOTE_DELETE +#undef NOTE_INSERT +#undef EARLY_ABORT +#undef USE_HEURISTIC +#undef XVECREF_YVECREF_EQUAL +#undef OFFSET_MAX diff --git a/lib/dirname-lgpl.c b/lib/dirname-lgpl.c new file mode 100644 index 0000000..d4506e0 --- /dev/null +++ b/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-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "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/lib/dirname.c b/lib/dirname.c new file mode 100644 index 0000000..953a9ac --- /dev/null +++ b/lib/dirname.c @@ -0,0 +1,38 @@ +/* dirname.c -- return all but the last element in a file name + + Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "dirname.h" + +#include <stdlib.h> +#include <string.h> +#include "xalloc.h" + +/* Just like mdir_name (dirname-lgpl.c), except, rather than + returning NULL upon malloc failure, here, we report the + "memory exhausted" condition and exit. */ + +char * +dir_name (char const *file) +{ + char *result = mdir_name (file); + if (!result) + xalloc_die (); + return result; +} diff --git a/lib/dirname.h b/lib/dirname.h new file mode 100644 index 0000000..fb19508 --- /dev/null +++ b/lib/dirname.h @@ -0,0 +1,74 @@ +/* Take file names apart into directory and base names. + + Copyright (C) 1998, 2001, 2003-2006, 2009-2010 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 DIRNAME_H_ +# define DIRNAME_H_ 1 + +# include <stdbool.h> +# include <stddef.h> + +# ifndef DIRECTORY_SEPARATOR +# define DIRECTORY_SEPARATOR '/' +# endif + +# ifndef ISSLASH +# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) +# endif + +# ifndef FILE_SYSTEM_PREFIX_LEN +# if FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX + /* 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) +# else +# define FILE_SYSTEM_PREFIX_LEN(Filename) 0 +# endif +# endif + +# ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +# endif + +# ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT +# define DOUBLE_SLASH_IS_DISTINCT_ROOT 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]) || 0 < FILE_SYSTEM_PREFIX_LEN (F)) +# endif +# define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) + +# if GNULIB_DIRNAME +char *base_name (char const *file); +char *dir_name (char const *file); +# endif + +char *mdir_name (char const *file); +size_t base_len (char const *file); +size_t dir_len (char const *file); +char *last_component (char const *file); + +bool strip_trailing_slashes (char *file); + +#endif /* not DIRNAME_H_ */ diff --git a/lib/dup2.c b/lib/dup2.c new file mode 100644 index 0000000..a4422bf --- /dev/null +++ b/lib/dup2.c @@ -0,0 +1,128 @@ +/* Duplicate an open file descriptor to a specified file descriptor. + + Copyright (C) 1999, 2004-2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* written by Paul Eggert */ + +#include <config.h> + +/* Specification. */ +#include <unistd.h> + +#include <errno.h> +#include <fcntl.h> + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* Get declarations of the Win32 API functions. */ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +#endif + +#if HAVE_DUP2 + +# undef dup2 + +int +rpl_dup2 (int fd, int desired_fd) +{ + int result; +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* 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: + http://bugs.winehq.org/show_bug.cgi?id=21289 */ + if (desired_fd < 0) + { + errno = EBADF; + return -1; + } +# endif + result = dup2 (fd, desired_fd); +# ifdef __linux__ + /* Correct a Linux return value. + <http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.30.y.git;a=commitdiff;h=2b79bc4f7ebbd5af3c8b867968f9f15602d5f802> + */ + if (fd == desired_fd && result == (unsigned int) -EBADF) + { + errno = EBADF; + result = -1; + } +# endif + if (result == 0) + result = desired_fd; + /* Correct a cygwin 1.5.x errno value. */ + else 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/lib/errno.in.h b/lib/errno.in.h new file mode 100644 index 0000000..f613d26 --- /dev/null +++ b/lib/errno.in.h @@ -0,0 +1,162 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A POSIX-like <errno.h>. + + Copyright (C) 2008-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_ERRNO_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_ERRNO_H@ + +#ifndef _GL_ERRNO_H +#define _GL_ERRNO_H + + +/* On native Windows platforms, many macros are not defined. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +/* POSIX says that EAGAIN and EWOULDBLOCK may have the same value. */ +# define EWOULDBLOCK EAGAIN + +/* Values >= 100 seem safe to use. */ +# define ETXTBSY 100 +# define GNULIB_defined_ETXTBSY 1 + +/* These are intentionally the same values as the WSA* error numbers, defined + in <winsock2.h>. */ +# define EINPROGRESS 10036 +# define EALREADY 10037 +# define ENOTSOCK 10038 +# define EDESTADDRREQ 10039 +# define EMSGSIZE 10040 +# define EPROTOTYPE 10041 +# define ENOPROTOOPT 10042 +# define EPROTONOSUPPORT 10043 +# define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ +# define EOPNOTSUPP 10045 +# define EPFNOSUPPORT 10046 /* not required by POSIX */ +# define EAFNOSUPPORT 10047 +# define EADDRINUSE 10048 +# define EADDRNOTAVAIL 10049 +# define ENETDOWN 10050 +# define ENETUNREACH 10051 +# define ENETRESET 10052 +# define ECONNABORTED 10053 +# define ECONNRESET 10054 +# define ENOBUFS 10055 +# define EISCONN 10056 +# define ENOTCONN 10057 +# define ESHUTDOWN 10058 /* not required by POSIX */ +# define ETOOMANYREFS 10059 /* not required by POSIX */ +# define ETIMEDOUT 10060 +# define ECONNREFUSED 10061 +# define ELOOP 10062 +# define EHOSTDOWN 10064 /* not required by POSIX */ +# define EHOSTUNREACH 10065 +# 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_ESOCK 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. + 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 ESTALE +# define ESTALE 2009 +# define GNULIB_defined_ESTALE 1 +# endif + +# ifndef ECANCELED +# define ECANCELED 2008 +# define GNULIB_defined_ECANCELED 1 +# endif + + +#endif /* _GL_ERRNO_H */ +#endif /* _GL_ERRNO_H */ diff --git a/lib/error.c b/lib/error.c new file mode 100644 index 0000000..c79e8d4 --- /dev/null +++ b/lib/error.c @@ -0,0 +1,366 @@ +/* Error handler for noninteractive utilities + Copyright (C) 1990-1998, 2000-2007, 2009-2010 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 <http://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 +#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) INTUSE(_IO_fflush) (s) +# undef putc +# define putc(c, fp) INTUSE(_IO_putc) (c, fp) + +# include <bits/libc-lock.h> + +#else /* not _LIBC */ + +# include <fcntl.h> +# include <unistd.h> + +# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P +# ifndef HAVE_DECL_STRERROR_R +"this configure-time declaration test was not run" +# endif +char *strerror_r (); +# endif + +/* The calling program should define program_name and set it to the + name of the executing program. */ +extern char *program_name; + +# if HAVE_STRERROR_R || defined strerror_r +# define __strerror_r strerror_r +# endif /* HAVE_STRERROR_R || defined strerror_r */ +#endif /* not _LIBC */ + +static inline void +flush_stdout (void) +{ +#if !_LIBC && defined F_GETFL + 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 && 0 <= fcntl (stdout_fd, F_GETFL)) +#endif + fflush (stdout); +} + +static void +print_errno_message (int errnum) +{ + char const *s; + +#if defined HAVE_STRERROR_R || _LIBC + char errbuf[1024]; +# if STRERROR_R_CHAR_P || _LIBC + 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 +error_tail (int status, int errnum, const char *message, va_list args) +{ +#if _LIBC + if (_IO_fwide (stderr, 0) > 0) + { +# define ALLOCA_LIMIT 2000 + 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 / 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); + va_end (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); + +#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 + || 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:%d: " : " ", + file_name, line_number); +#else + fprintf (stderr, file_name != NULL ? "%s:%d: " : " ", + file_name, line_number); +#endif + + va_start (args, message); + error_tail (status, errnum, message, 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/lib/error.h b/lib/error.h new file mode 100644 index 0000000..9deef02 --- /dev/null +++ b/lib/error.h @@ -0,0 +1,65 @@ +/* Declaration for error-reporting function + Copyright (C) 1995, 1996, 1997, 2003, 2006, 2008, 2009, 2010 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _ERROR_H +#define _ERROR_H 1 + +#ifndef __attribute__ +/* 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 __attribute__ 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 __attribute__(Spec) /* empty */ +# 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, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); + +extern void error_at_line (int __status, int __errnum, const char *__fname, + unsigned int __lineno, const char *__format, ...) + __attribute__ ((__format__ (__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/lib/exclude.c b/lib/exclude.c new file mode 100644 index 0000000..34b5636 --- /dev/null +++ b/lib/exclude.c @@ -0,0 +1,556 @@ +/* exclude.c -- exclude file names + + Copyright (C) 1992, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003, 2004, + 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert <eggert@twinsun.com> + and Sergey Poznyakoff <gray@gnu.org>. + Thanks to Phil Proudman <phil@proudman51.freeserve.co.uk> + for improvement suggestions. */ + +#include <config.h> + +#include <stdbool.h> + +#include <ctype.h> +#include <errno.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <wctype.h> + +#include "exclude.h" +#include "hash.h" +#include "mbuiter.h" +#include "fnmatch.h" +#include "xalloc.h" +#include "verify.h" + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +/* Non-GNU systems lack these options, so we don't need to check them. */ +#ifndef FNM_CASEFOLD +# define FNM_CASEFOLD 0 +#endif +#ifndef FNM_EXTMATCH +# define FNM_EXTMATCH 0 +#endif +#ifndef FNM_LEADING_DIR +# define FNM_LEADING_DIR 0 +#endif + +verify (((EXCLUDE_ANCHORED | EXCLUDE_INCLUDE | EXCLUDE_WILDCARDS) + & (FNM_PATHNAME | FNM_NOESCAPE | FNM_PERIOD | FNM_LEADING_DIR + | FNM_CASEFOLD | FNM_EXTMATCH)) + == 0); + + +/* Exclusion patterns are grouped into a singly-linked list of + "exclusion segments". Each segment represents a set of patterns + that can be matches using the same algorithm. Non-wildcard + patterns are kept in hash tables, to speed up searches. Wildcard + patterns are stored as arrays of patterns. */ + + +/* An exclude pattern-options pair. The options are fnmatch options + ORed with EXCLUDE_* options. */ + +struct patopts + { + char const *pattern; + int options; + }; + +/* An array of pattern-options pairs. */ + +struct exclude_pattern + { + struct patopts *exclude; + size_t exclude_alloc; + size_t exclude_count; + }; + +enum exclude_type + { + exclude_hash, /* a hash table of excluded names */ + exclude_pattern /* an array of exclude patterns */ + }; + +struct exclude_segment + { + struct exclude_segment *next; /* next segment in list */ + enum exclude_type type; /* type of this segment */ + int options; /* common options for this segment */ + union + { + Hash_table *table; /* for type == exclude_hash */ + struct exclude_pattern pat; /* for type == exclude_pattern */ + } v; + }; + +/* The exclude structure keeps a singly-linked list of exclude segments */ +struct exclude + { + struct exclude_segment *head, *tail; + }; + +/* Return true if str has wildcard characters */ +bool +fnmatch_pattern_has_wildcards (const char *str, int options) +{ + const char *cset = "\\?*[]"; + if (options & FNM_NOESCAPE) + cset++; + while (*str) + { + size_t n = strcspn (str, cset); + if (str[n] == 0) + break; + else if (str[n] == '\\') + { + str += n + 1; + if (*str) + str++; + } + else + return true; + } + return false; +} + +/* Return a newly allocated and empty exclude list. */ + +struct exclude * +new_exclude (void) +{ + return xzalloc (sizeof *new_exclude ()); +} + +/* Calculate the hash of string. */ +static size_t +string_hasher (void const *data, size_t n_buckets) +{ + char const *p = data; + return hash_string (p, n_buckets); +} + +/* Ditto, for case-insensitive hashes */ +static size_t +string_hasher_ci (void const *data, size_t n_buckets) +{ + char const *p = data; + mbui_iterator_t iter; + size_t value = 0; + + for (mbui_init (iter, p); mbui_avail (iter); mbui_advance (iter)) + { + mbchar_t m = mbui_cur (iter); + wchar_t wc; + + if (m.wc_valid) + wc = towlower (m.wc); + else + wc = *m.ptr; + + value = (value * 31 + wc) % n_buckets; + } + + return value; +} + +/* compare two strings for equality */ +static bool +string_compare (void const *data1, void const *data2) +{ + char const *p1 = data1; + char const *p2 = data2; + return strcmp (p1, p2) == 0; +} + +/* compare two strings for equality, case-insensitive */ +static bool +string_compare_ci (void const *data1, void const *data2) +{ + char const *p1 = data1; + char const *p2 = data2; + return mbscasecmp (p1, p2) == 0; +} + +static void +string_free (void *data) +{ + free (data); +} + +/* Create new exclude segment of given TYPE and OPTIONS, and attach it + to the tail of list in EX */ +static struct exclude_segment * +new_exclude_segment (struct exclude *ex, enum exclude_type type, int options) +{ + struct exclude_segment *sp = xzalloc (sizeof (struct exclude_segment)); + sp->type = type; + sp->options = options; + switch (type) + { + case exclude_pattern: + break; + + case exclude_hash: + sp->v.table = hash_initialize (0, NULL, + (options & FNM_CASEFOLD) ? + string_hasher_ci + : string_hasher, + (options & FNM_CASEFOLD) ? + string_compare_ci + : string_compare, + string_free); + break; + } + if (ex->tail) + ex->tail->next = sp; + else + ex->head = sp; + ex->tail = sp; + return sp; +} + +/* Free a single exclude segment */ +static void +free_exclude_segment (struct exclude_segment *seg) +{ + switch (seg->type) + { + case exclude_pattern: + free (seg->v.pat.exclude); + break; + + case exclude_hash: + hash_free (seg->v.table); + break; + } + free (seg); +} + +/* Free the storage associated with an exclude list. */ +void +free_exclude (struct exclude *ex) +{ + struct exclude_segment *seg; + for (seg = ex->head; seg; ) + { + struct exclude_segment *next = seg->next; + free_exclude_segment (seg); + seg = next; + } + free (ex); +} + +/* Return zero if PATTERN matches F, obeying OPTIONS, except that + (unlike fnmatch) wildcards are disabled in PATTERN. */ + +static int +fnmatch_no_wildcards (char const *pattern, char const *f, int options) +{ + if (! (options & FNM_LEADING_DIR)) + return ((options & FNM_CASEFOLD) + ? mbscasecmp (pattern, f) + : strcmp (pattern, f)); + else if (! (options & FNM_CASEFOLD)) + { + size_t patlen = strlen (pattern); + int r = strncmp (pattern, f, patlen); + if (! r) + { + r = f[patlen]; + if (r == '/') + r = 0; + } + return r; + } + else + { + /* Walk through a copy of F, seeing whether P matches any prefix + of F. + + FIXME: This is an O(N**2) algorithm; it should be O(N). + Also, the copy should not be necessary. However, fixing this + will probably involve a change to the mbs* API. */ + + char *fcopy = xstrdup (f); + char *p; + int r; + for (p = fcopy; ; *p++ = '/') + { + p = strchr (p, '/'); + if (p) + *p = '\0'; + r = mbscasecmp (pattern, fcopy); + if (!p || r <= 0) + break; + } + free (fcopy); + return r; + } +} + +bool +exclude_fnmatch (char const *pattern, char const *f, int options) +{ + int (*matcher) (char const *, char const *, int) = + (options & EXCLUDE_WILDCARDS + ? fnmatch + : fnmatch_no_wildcards); + bool matched = ((*matcher) (pattern, f, options) == 0); + char const *p; + + if (! (options & EXCLUDE_ANCHORED)) + for (p = f; *p && ! matched; p++) + if (*p == '/' && p[1] != '/') + matched = ((*matcher) (pattern, p + 1, options) == 0); + + return matched; +} + +/* Return true if the exclude_pattern segment SEG excludes F. */ + +static bool +excluded_file_pattern_p (struct exclude_segment const *seg, char const *f) +{ + size_t exclude_count = seg->v.pat.exclude_count; + struct patopts const *exclude = seg->v.pat.exclude; + size_t i; + bool excluded = !! (exclude[0].options & EXCLUDE_INCLUDE); + + /* Scan through the options, until they change excluded */ + for (i = 0; i < exclude_count; i++) + { + char const *pattern = exclude[i].pattern; + int options = exclude[i].options; + if (exclude_fnmatch (pattern, f, options)) + return !excluded; + } + return excluded; +} + +/* Return true if the exclude_hash segment SEG excludes F. + BUFFER is an auxiliary storage of the same length as F (with nul + terminator included) */ +static bool +excluded_file_name_p (struct exclude_segment const *seg, char const *f, + char *buffer) +{ + int options = seg->options; + bool excluded = !! (options & EXCLUDE_INCLUDE); + Hash_table *table = seg->v.table; + + do + { + /* initialize the pattern */ + strcpy (buffer, f); + + while (1) + { + if (hash_lookup (table, buffer)) + return !excluded; + if (options & FNM_LEADING_DIR) + { + char *p = strrchr (buffer, '/'); + if (p) + { + *p = 0; + continue; + } + } + break; + } + + if (!(options & EXCLUDE_ANCHORED)) + { + f = strchr (f, '/'); + if (f) + f++; + } + else + break; + } + while (f); + return excluded; +} + +/* Return true if EX excludes F. */ + +bool +excluded_file_name (struct exclude const *ex, char const *f) +{ + struct exclude_segment *seg; + bool excluded; + char *filename = NULL; + + /* If no patterns are given, the default is to include. */ + if (!ex->head) + return false; + + /* Otherwise, the default is the opposite of the first option. */ + excluded = !! (ex->head->options & EXCLUDE_INCLUDE); + /* Scan through the segments, seeing whether they change status from + excluded to included or vice versa. */ + for (seg = ex->head; seg; seg = seg->next) + { + bool rc; + + switch (seg->type) + { + case exclude_pattern: + rc = excluded_file_pattern_p (seg, f); + break; + + case exclude_hash: + if (!filename) + filename = xmalloc (strlen (f) + 1); + rc = excluded_file_name_p (seg, f, filename); + break; + + default: + abort (); + } + if (rc != excluded) + { + excluded = rc; + break; + } + } + free (filename); + return excluded; +} + +/* Append to EX the exclusion PATTERN with OPTIONS. */ + +void +add_exclude (struct exclude *ex, char const *pattern, int options) +{ + struct exclude_segment *seg; + + if ((options & EXCLUDE_WILDCARDS) + && fnmatch_pattern_has_wildcards (pattern, options)) + { + struct exclude_pattern *pat; + struct patopts *patopts; + + if (ex->tail && ex->tail->type == exclude_pattern + && ((ex->tail->options & EXCLUDE_INCLUDE) == + (options & EXCLUDE_INCLUDE))) + seg = ex->tail; + else + seg = new_exclude_segment (ex, exclude_pattern, options); + + pat = &seg->v.pat; + if (pat->exclude_count == pat->exclude_alloc) + pat->exclude = x2nrealloc (pat->exclude, &pat->exclude_alloc, + sizeof *pat->exclude); + patopts = &pat->exclude[pat->exclude_count++]; + patopts->pattern = pattern; + patopts->options = options; + } + else + { + char *str, *p; +#define EXCLUDE_HASH_FLAGS (EXCLUDE_INCLUDE|EXCLUDE_ANCHORED|\ + FNM_LEADING_DIR|FNM_CASEFOLD) + if (ex->tail && ex->tail->type == exclude_hash + && ((ex->tail->options & EXCLUDE_HASH_FLAGS) == + (options & EXCLUDE_HASH_FLAGS))) + seg = ex->tail; + else + seg = new_exclude_segment (ex, exclude_hash, options); + + str = xstrdup (pattern); + p = hash_insert (seg->v.table, str); + if (p != str) + free (str); + } +} + +/* Use ADD_FUNC to append to EX the patterns in FILE_NAME, each with + OPTIONS. LINE_END terminates each pattern in the file. If + LINE_END is a space character, ignore trailing spaces and empty + lines in FILE. Return -1 on failure, 0 on success. */ + +int +add_exclude_file (void (*add_func) (struct exclude *, char const *, int), + struct exclude *ex, char const *file_name, int options, + char line_end) +{ + bool use_stdin = file_name[0] == '-' && !file_name[1]; + FILE *in; + char *buf = NULL; + char *p; + char const *pattern; + char const *lim; + size_t buf_alloc = 0; + size_t buf_count = 0; + int c; + int e = 0; + + if (use_stdin) + in = stdin; + else if (! (in = fopen (file_name, "r"))) + return -1; + + while ((c = getc (in)) != EOF) + { + if (buf_count == buf_alloc) + buf = x2realloc (buf, &buf_alloc); + buf[buf_count++] = c; + } + + if (ferror (in)) + e = errno; + + if (!use_stdin && fclose (in) != 0) + e = errno; + + buf = xrealloc (buf, buf_count + 1); + buf[buf_count] = line_end; + lim = buf + buf_count + ! (buf_count == 0 || buf[buf_count - 1] == line_end); + pattern = buf; + + for (p = buf; p < lim; p++) + if (*p == line_end) + { + char *pattern_end = p; + + if (isspace ((unsigned char) line_end)) + { + for (; ; pattern_end--) + if (pattern_end == pattern) + goto next_pattern; + else if (! isspace ((unsigned char) pattern_end[-1])) + break; + } + + *pattern_end = '\0'; + (*add_func) (ex, pattern, options); + + next_pattern: + pattern = p + 1; + } + + errno = e; + return e ? -1 : 0; +} diff --git a/lib/exclude.h b/lib/exclude.h new file mode 100644 index 0000000..65d3128 --- /dev/null +++ b/lib/exclude.h @@ -0,0 +1,52 @@ +/* exclude.h -- declarations for excluding file names + + Copyright (C) 1992, 1993, 1994, 1997, 1999, 2001, 2002, 2003, 2005, 2006, + 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 _GL_EXCLUDE_H +#define _GL_EXCLUDE_H 1 + +#include <stdbool.h> + +/* Written by Paul Eggert <eggert@twinsun.com> + and Sergey Poznyakoff <gray@gnu.org> */ + +/* Exclude options, which can be ORed with fnmatch options. */ + +/* Patterns must match the start of file names, instead of matching + anywhere after a '/'. */ +#define EXCLUDE_ANCHORED (1 << 30) + +/* Include instead of exclude. */ +#define EXCLUDE_INCLUDE (1 << 29) + +/* '?', '*', '[', and '\\' are special in patterns. Without this + option, these characters are ordinary and fnmatch is not used. */ +#define EXCLUDE_WILDCARDS (1 << 28) + +struct exclude; + +bool fnmatch_pattern_has_wildcards (const char *, int); + +struct exclude *new_exclude (void); +void free_exclude (struct exclude *); +void add_exclude (struct exclude *, char const *, int); +int add_exclude_file (void (*) (struct exclude *, char const *, int), + struct exclude *, char const *, int, char); +bool excluded_file_name (struct exclude const *, char const *); +bool exclude_fnmatch (char const *pattern, char const *f, int options); + +#endif /* _GL_EXCLUDE_H */ diff --git a/lib/exitfail.c b/lib/exitfail.c new file mode 100644 index 0000000..3b63f8a --- /dev/null +++ b/lib/exitfail.c @@ -0,0 +1,25 @@ +/* Failure exit status + + Copyright (C) 2002, 2003, 2005, 2006, 2007, 2009, 2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "exitfail.h" + +#include <stdlib.h> + +int volatile exit_failure = EXIT_FAILURE; diff --git a/lib/exitfail.h b/lib/exitfail.h new file mode 100644 index 0000000..7ffffe5 --- /dev/null +++ b/lib/exitfail.h @@ -0,0 +1,18 @@ +/* Failure exit status + + Copyright (C) 2002, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +extern int volatile exit_failure; diff --git a/lib/fcntl.c b/lib/fcntl.c new file mode 100644 index 0000000..c51e8de --- /dev/null +++ b/lib/fcntl.c @@ -0,0 +1,294 @@ +/* Provide file descriptor control. + + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* 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> + +#if !HAVE_FCNTL +# define rpl_fcntl fcntl +#endif +#undef fcntl + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* Get declarations of the Win32 API functions. */ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> + +/* 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 */ + { + /* TODO: Translate GetLastError () into errno. */ + errno = EMFILE; + result = -1; + break; + } + duplicated_fd = _open_osfhandle ((long) new_handle, flags); + if (duplicated_fd < 0) + { + CloseHandle (new_handle); + errno = EMFILE; + 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 */ + +/* 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 +rpl_fcntl (int fd, int action, /* arg */...) +{ + va_list arg; + int result = -1; + va_start (arg, action); + switch (action) + { + +#if !HAVE_FCNTL + case F_DUPFD: + { + int target = va_arg (arg, int); + result = dupfd (fd, target, 0); + break; + } +#elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR + case F_DUPFD: + { + int target = va_arg (arg, int); + /* Detect invalid target; needed for cygwin 1.5.x. */ + if (target < 0 || getdtablesize () <= target) + errno = EINVAL; + else + { + result = fcntl (fd, action, target); +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (fd, result); +# endif + } + break; + } /* F_DUPFD */ +#endif /* FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR */ + + case F_DUPFD_CLOEXEC: + { + int target = va_arg (arg, int); + +#if !HAVE_FCNTL + result = dupfd (fd, target, O_CLOEXEC); + break; +#else /* HAVE_FCNTL */ + /* 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, action, 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 (fd, F_DUPFD, target); + if (result < 0) + break; + have_dupfd_cloexec = -1; + } + } + else + result = rpl_fcntl (fd, F_DUPFD, 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; + } + } + break; +#endif /* HAVE_FCNTL */ + } /* F_DUPFD_CLOEXEC */ + +#if !HAVE_FCNTL + case F_GETFD: + { +# if (defined _WIN32 || 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 + void *p = va_arg (arg, void *); + result = fcntl (fd, action, p); +#else + errno = EINVAL; +#endif + break; + } + } + va_end (arg); + return result; +} diff --git a/lib/fcntl.in.h b/lib/fcntl.in.h new file mode 100644 index 0000000..8fb7852 --- /dev/null +++ b/lib/fcntl.in.h @@ -0,0 +1,279 @@ +/* Like <fcntl.h>, but with non-working flags defined to 0. + + Copyright (C) 2006-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* written by Paul Eggert */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined __need_system_fcntl_h +/* Special invocation convention. */ + +#include <sys/types.h> +#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ +# include <sys/stat.h> +#endif +#@INCLUDE_NEXT@ @NEXT_FCNTL_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_FCNTL_H + +#include <sys/types.h> +#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ +# include <sys/stat.h> +#endif +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_FCNTL_H@ + +#ifndef _GL_FCNTL_H +#define _GL_FCNTL_H + +#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ +# 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. */ + + +/* 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 +_GL_CXXALIASWARN (open); +#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. */ + +#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'. Intentionally leave it + undefined if not available. */ +# define O_CLOEXEC O_NOINHERIT +#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_NDELAY +# define O_NDELAY 0 +#endif + +#ifndef O_NOATIME +# define O_NOATIME 0 +#endif + +#ifndef O_NONBLOCK +# define O_NONBLOCK O_NDELAY +#endif + +#ifndef O_NOCTTY +# define O_NOCTTY 0 +#endif + +#ifndef O_NOFOLLOW +# define O_NOFOLLOW 0 +#endif + +#ifndef O_NOLINKS +# define O_NOLINKS 0 +#endif + +#ifndef O_RSYNC +# define O_RSYNC 0 +#endif + +#ifndef O_SYNC +# define O_SYNC 0 +#endif + +#ifndef O_TTY_INIT +# define O_TTY_INIT 0 +#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/lib/file-type.c b/lib/file-type.c new file mode 100644 index 0000000..5a2bf7c --- /dev/null +++ b/lib/file-type.c @@ -0,0 +1,71 @@ +/* Return a string describing the type of a file. + + Copyright (C) 1993-1994, 2001-2002, 2004-2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert. */ + +#include <config.h> + +#include "file-type.h" + +#include <gettext.h> +#define _(text) gettext (text) + +char const * +file_type (struct stat const *st) +{ + /* See POSIX 1003.1-2001 XCU Table 4-8 lines 17093-17107 for some of + these formats. + + To keep diagnostics grammatical in English, the returned string + must start with a consonant. */ + + if (S_ISREG (st->st_mode)) + return st->st_size == 0 ? _("regular empty file") : _("regular file"); + + if (S_ISDIR (st->st_mode)) + return _("directory"); + + if (S_ISBLK (st->st_mode)) + return _("block special file"); + + if (S_ISCHR (st->st_mode)) + return _("character special file"); + + if (S_ISFIFO (st->st_mode)) + return _("fifo"); + + if (S_ISLNK (st->st_mode)) + return _("symbolic link"); + + if (S_ISSOCK (st->st_mode)) + return _("socket"); + + if (S_TYPEISMQ (st)) + return _("message queue"); + + if (S_TYPEISSEM (st)) + return _("semaphore"); + + if (S_TYPEISSHM (st)) + return _("shared memory object"); + + if (S_TYPEISTMO (st)) + return _("typed memory object"); + + return _("weird file"); +} diff --git a/lib/file-type.h b/lib/file-type.h new file mode 100644 index 0000000..11ccc07 --- /dev/null +++ b/lib/file-type.h @@ -0,0 +1,29 @@ +/* Return a string describing the type of a file. + + Copyright (C) 1993-1994, 2001-2002, 2004-2005, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert and Jim Meyering. */ + +#ifndef FILE_TYPE_H +# define FILE_TYPE_H 1 + +# include <sys/types.h> +# include <sys/stat.h> + +char const *file_type (struct stat const *); + +#endif /* FILE_TYPE_H */ diff --git a/lib/fnmatch.c b/lib/fnmatch.c new file mode 100644 index 0000000..178fdaf --- /dev/null +++ b/lib/fnmatch.c @@ -0,0 +1,356 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, + 2003, 2004, 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _LIBC +# include <config.h> +#endif + +/* Enable GNU extensions in fnmatch.h. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#if ! defined __builtin_expect && __GNUC__ < 3 +# define __builtin_expect(expr, expected) (expr) +#endif + +#include <fnmatch.h> + +#include <alloca.h> +#include <assert.h> +#include <ctype.h> +#include <errno.h> +#include <stddef.h> +#include <stdbool.h> +#include <stdlib.h> +#include <string.h> + +#define WIDE_CHAR_SUPPORT \ + (HAVE_WCTYPE_H && HAVE_BTOWC && HAVE_ISWCTYPE \ + && HAVE_WMEMCHR && (HAVE_WMEMCPY || HAVE_WMEMPCPY)) + +/* For platform which support the ISO C amendement 1 functionality we + support user defined character classes. */ +#if defined _LIBC || WIDE_CHAR_SUPPORT +# include <wctype.h> +# include <wchar.h> +#endif + +/* We need some of the locale data (the collation sequence information) + but there is no interface to get this information in general. Therefore + we support a correct implementation only in glibc. */ +#ifdef _LIBC +# include "../locale/localeinfo.h" +# include "../locale/elem-hash.h" +# include "../locale/coll-lookup.h" +# include <shlib-compat.h> + +# define CONCAT(a,b) __CONCAT(a,b) +# define mbsrtowcs __mbsrtowcs +# define fnmatch __fnmatch +extern int fnmatch (const char *pattern, const char *string, int flags); +#endif + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +/* We often have to test for FNM_FILE_NAME and FNM_PERIOD being both set. */ +#define NO_LEADING_PERIOD(flags) \ + ((flags & (FNM_FILE_NAME | FNM_PERIOD)) == (FNM_FILE_NAME | FNM_PERIOD)) + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself, and have not detected a bug + in the library. 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__ || !HAVE_FNMATCH_GNU + + +# if ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) +# define isblank(c) ((c) == ' ' || (c) == '\t') +# endif + +# define STREQ(s1, s2) (strcmp (s1, s2) == 0) + +# if defined _LIBC || WIDE_CHAR_SUPPORT +/* The GNU C library provides support for user-defined character classes + and the functions from ISO C amendement 1. */ +# ifdef CHARCLASS_NAME_MAX +# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX +# else +/* This shouldn't happen but some implementation might still have this + problem. Use a reasonable default value. */ +# define CHAR_CLASS_MAX_LENGTH 256 +# endif + +# ifdef _LIBC +# define IS_CHAR_CLASS(string) __wctype (string) +# else +# define IS_CHAR_CLASS(string) wctype (string) +# endif + +# ifdef _LIBC +# define ISWCTYPE(WC, WT) __iswctype (WC, WT) +# else +# define ISWCTYPE(WC, WT) iswctype (WC, WT) +# endif + +# if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC +/* In this case we are implementing the multibyte character handling. */ +# define HANDLE_MULTIBYTE 1 +# endif + +# else +# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ + +# define IS_CHAR_CLASS(string) \ + (STREQ (string, "alpha") || STREQ (string, "upper") \ + || STREQ (string, "lower") || STREQ (string, "digit") \ + || STREQ (string, "alnum") || STREQ (string, "xdigit") \ + || STREQ (string, "space") || STREQ (string, "print") \ + || STREQ (string, "punct") || STREQ (string, "graph") \ + || STREQ (string, "cntrl") || STREQ (string, "blank")) +# endif + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +/* Global variable. */ +static int posixly_correct; + +# ifndef internal_function +/* Inside GNU libc we mark some function in a special way. In other + environments simply ignore the marking. */ +# define internal_function +# endif + +/* Note that this evaluates C many times. */ +# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c)) +# define CHAR char +# define UCHAR unsigned char +# define INT int +# define FCT internal_fnmatch +# define EXT ext_match +# define END end_pattern +# define L_(CS) CS +# ifdef _LIBC +# define BTOWC(C) __btowc (C) +# else +# define BTOWC(C) btowc (C) +# endif +# define STRLEN(S) strlen (S) +# define STRCAT(D, S) strcat (D, S) +# ifdef _LIBC +# define MEMPCPY(D, S, N) __mempcpy (D, S, N) +# else +# if HAVE_MEMPCPY +# define MEMPCPY(D, S, N) mempcpy (D, S, N) +# else +# define MEMPCPY(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) +# endif +# endif +# define MEMCHR(S, C, N) memchr (S, C, N) +# define STRCOLL(S1, S2) strcoll (S1, S2) +# include "fnmatch_loop.c" + + +# if HANDLE_MULTIBYTE +# define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c)) +# define CHAR wchar_t +# define UCHAR wint_t +# define INT wint_t +# define FCT internal_fnwmatch +# define EXT ext_wmatch +# define END end_wpattern +# define L_(CS) L##CS +# define BTOWC(C) (C) +# ifdef _LIBC +# define STRLEN(S) __wcslen (S) +# define STRCAT(D, S) __wcscat (D, S) +# define MEMPCPY(D, S, N) __wmempcpy (D, S, N) +# else +# define STRLEN(S) wcslen (S) +# define STRCAT(D, S) wcscat (D, S) +# if HAVE_WMEMPCPY +# define MEMPCPY(D, S, N) wmempcpy (D, S, N) +# else +# define MEMPCPY(D, S, N) (wmemcpy (D, S, N) + (N)) +# endif +# endif +# define MEMCHR(S, C, N) wmemchr (S, C, N) +# define STRCOLL(S1, S2) wcscoll (S1, S2) +# define WIDE_CHAR_VERSION 1 + +# undef IS_CHAR_CLASS +/* We have to convert the wide character string in a multibyte string. But + we know that the character class names consist of alphanumeric characters + from the portable character set, and since the wide character encoding + for a member of the portable character set is the same code point as + its single-byte encoding, we can use a simplified method to convert the + string to a multibyte character string. */ +static wctype_t +is_char_class (const wchar_t *wcs) +{ + char s[CHAR_CLASS_MAX_LENGTH + 1]; + char *cp = s; + + do + { + /* Test for a printable character from the portable character set. */ +# ifdef _LIBC + if (*wcs < 0x20 || *wcs > 0x7e + || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60) + return (wctype_t) 0; +# else + switch (*wcs) + { + 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'/': + 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'~': + break; + default: + return (wctype_t) 0; + } +# endif + + /* Avoid overrunning the buffer. */ + if (cp == s + CHAR_CLASS_MAX_LENGTH) + return (wctype_t) 0; + + *cp++ = (char) *wcs++; + } + while (*wcs != L'\0'); + + *cp = '\0'; + +# ifdef _LIBC + return __wctype (s); +# else + return wctype (s); +# endif +} +# define IS_CHAR_CLASS(string) is_char_class (string) + +# include "fnmatch_loop.c" +# endif + + +int +fnmatch (const char *pattern, const char *string, int flags) +{ +# if HANDLE_MULTIBYTE +# define ALLOCA_LIMIT 2000 + if (__builtin_expect (MB_CUR_MAX, 1) != 1) + { + mbstate_t ps; + size_t patsize; + size_t strsize; + size_t totsize; + wchar_t *wpattern; + wchar_t *wstring; + int res; + + /* Calculate the size needed to convert the strings to + wide characters. */ + memset (&ps, '\0', sizeof (ps)); + patsize = mbsrtowcs (NULL, &pattern, 0, &ps) + 1; + if (__builtin_expect (patsize != 0, 1)) + { + assert (mbsinit (&ps)); + strsize = mbsrtowcs (NULL, &string, 0, &ps) + 1; + if (__builtin_expect (strsize != 0, 1)) + { + assert (mbsinit (&ps)); + totsize = patsize + strsize; + if (__builtin_expect (! (patsize <= totsize + && totsize <= SIZE_MAX / sizeof (wchar_t)), + 0)) + { + errno = ENOMEM; + return -1; + } + + /* Allocate room for the wide characters. */ + if (__builtin_expect (totsize < ALLOCA_LIMIT, 1)) + wpattern = (wchar_t *) alloca (totsize * sizeof (wchar_t)); + else + { + wpattern = malloc (totsize * sizeof (wchar_t)); + if (__builtin_expect (! wpattern, 0)) + { + errno = ENOMEM; + return -1; + } + } + wstring = wpattern + patsize; + + /* Convert the strings into wide characters. */ + mbsrtowcs (wpattern, &pattern, patsize, &ps); + assert (mbsinit (&ps)); + mbsrtowcs (wstring, &string, strsize, &ps); + + res = internal_fnwmatch (wpattern, wstring, wstring + strsize - 1, + flags & FNM_PERIOD, flags); + + if (__builtin_expect (! (totsize < ALLOCA_LIMIT), 0)) + free (wpattern); + return res; + } + } + } + +# endif /* HANDLE_MULTIBYTE */ + + return internal_fnmatch (pattern, string, string + strlen (string), + flags & FNM_PERIOD, flags); +} + +# ifdef _LIBC +# undef fnmatch +versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3); +# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3) +strong_alias (__fnmatch, __fnmatch_old) +compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0); +# endif +libc_hidden_ver (__fnmatch, fnmatch) +# endif + +#endif /* _LIBC or not __GNU_LIBRARY__. */ diff --git a/lib/fnmatch.in.h b/lib/fnmatch.in.h new file mode 100644 index 0000000..54e48bb --- /dev/null +++ b/lib/fnmatch.in.h @@ -0,0 +1,70 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2001, 2002, 2003, + 2005, 2007, 2009, 2010 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _FNMATCH_H +#define _FNMATCH_H 1 + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* We #undef these before defining them because some losing systems + (HP-UX A.08.07 for example) define these in <unistd.h>. */ +#undef FNM_PATHNAME +#undef FNM_NOESCAPE +#undef FNM_PERIOD + +/* Bits set in the FLAGS argument to `fnmatch'. */ +#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */ +#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */ +#define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */ + +#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE +# define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ +# define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */ +# define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ +# define FNM_EXTMATCH (1 << 5) /* Use ksh-like extended matching. */ +#endif + +/* Value returned by `fnmatch' if STRING does not match PATTERN. */ +#define FNM_NOMATCH 1 + +/* This value is returned if the implementation does not support + `fnmatch'. Since this is not the case here it will never be + returned but the conformance test suites still require the symbol + to be defined. */ +#ifdef _XOPEN_SOURCE +# define FNM_NOSYS (-1) +#endif + +/* Match NAME against the file name pattern PATTERN, + returning zero if it matches, FNM_NOMATCH if not. */ +extern int fnmatch (const char *__pattern, const char *__name, + int __flags) + _GL_ARG_NONNULL ((1, 2)); + +#ifdef __cplusplus +} +#endif + +#endif /* fnmatch.h */ diff --git a/lib/fnmatch_loop.c b/lib/fnmatch_loop.c new file mode 100644 index 0000000..c46099a --- /dev/null +++ b/lib/fnmatch_loop.c @@ -0,0 +1,1217 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, + 2003, 2004, 2005, 2006, 2009, 2010 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Match STRING against the file name pattern PATTERN, returning zero if + it matches, nonzero if not. */ +static int EXT (INT opt, const CHAR *pattern, const CHAR *string, + const CHAR *string_end, bool no_leading_period, int flags) + internal_function; +static const CHAR *END (const CHAR *patternp) internal_function; + +static int +internal_function +FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, + bool no_leading_period, int flags) +{ + register const CHAR *p = pattern, *n = string; + register UCHAR c; +#ifdef _LIBC +# if WIDE_CHAR_VERSION + const char *collseq = (const char *) + _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC); +# else + const UCHAR *collseq = (const UCHAR *) + _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQMB); +# endif +#endif + + while ((c = *p++) != L_('\0')) + { + bool new_no_leading_period = false; + c = FOLD (c); + + switch (c) + { + case L_('?'): + if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') + { + int res; + + res = EXT (c, p, n, string_end, no_leading_period, + flags); + if (res != -1) + return res; + } + + if (n == string_end) + return FNM_NOMATCH; + else if (*n == L_('/') && (flags & FNM_FILE_NAME)) + return FNM_NOMATCH; + else if (*n == L_('.') && no_leading_period) + return FNM_NOMATCH; + break; + + case L_('\\'): + if (!(flags & FNM_NOESCAPE)) + { + c = *p++; + if (c == L_('\0')) + /* Trailing \ loses. */ + return FNM_NOMATCH; + c = FOLD (c); + } + if (n == string_end || FOLD ((UCHAR) *n) != c) + return FNM_NOMATCH; + break; + + case L_('*'): + if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') + { + int res; + + res = EXT (c, p, n, string_end, no_leading_period, + flags); + if (res != -1) + return res; + } + + if (n != string_end && *n == L_('.') && no_leading_period) + return FNM_NOMATCH; + + for (c = *p++; c == L_('?') || c == L_('*'); c = *p++) + { + if (*p == L_('(') && (flags & FNM_EXTMATCH) != 0) + { + const CHAR *endp = END (p); + if (endp != p) + { + /* This is a pattern. Skip over it. */ + p = endp; + continue; + } + } + + if (c == L_('?')) + { + /* A ? needs to match one character. */ + if (n == string_end) + /* There isn't another character; no match. */ + return FNM_NOMATCH; + else if (*n == L_('/') + && __builtin_expect (flags & FNM_FILE_NAME, 0)) + /* A slash does not match a wildcard under + FNM_FILE_NAME. */ + return FNM_NOMATCH; + else + /* One character of the string is consumed in matching + this ? wildcard, so *??? won't match if there are + less than three characters. */ + ++n; + } + } + + if (c == L_('\0')) + /* The wildcard(s) is/are the last element of the pattern. + If the name is a file name and contains another slash + this means it cannot match, unless the FNM_LEADING_DIR + flag is set. */ + { + int result = (flags & FNM_FILE_NAME) == 0 ? 0 : FNM_NOMATCH; + + if (flags & FNM_FILE_NAME) + { + if (flags & FNM_LEADING_DIR) + result = 0; + else + { + if (MEMCHR (n, L_('/'), string_end - n) == NULL) + result = 0; + } + } + + return result; + } + else + { + const CHAR *endp; + + endp = MEMCHR (n, (flags & FNM_FILE_NAME) ? L_('/') : L_('\0'), + string_end - n); + if (endp == NULL) + endp = string_end; + + if (c == L_('[') + || (__builtin_expect (flags & FNM_EXTMATCH, 0) != 0 + && (c == L_('@') || c == L_('+') || c == L_('!')) + && *p == L_('('))) + { + int flags2 = ((flags & FNM_FILE_NAME) + ? flags : (flags & ~FNM_PERIOD)); + bool no_leading_period2 = no_leading_period; + + for (--p; n < endp; ++n, no_leading_period2 = false) + if (FCT (p, n, string_end, no_leading_period2, flags2) + == 0) + return 0; + } + else if (c == L_('/') && (flags & FNM_FILE_NAME)) + { + while (n < string_end && *n != L_('/')) + ++n; + if (n < string_end && *n == L_('/') + && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags) + == 0)) + return 0; + } + else + { + int flags2 = ((flags & FNM_FILE_NAME) + ? flags : (flags & ~FNM_PERIOD)); + int no_leading_period2 = no_leading_period; + + if (c == L_('\\') && !(flags & FNM_NOESCAPE)) + c = *p; + c = FOLD (c); + for (--p; n < endp; ++n, no_leading_period2 = false) + if (FOLD ((UCHAR) *n) == c + && (FCT (p, n, string_end, no_leading_period2, flags2) + == 0)) + return 0; + } + } + + /* If we come here no match is possible with the wildcard. */ + return FNM_NOMATCH; + + case L_('['): + { + /* Nonzero if the sense of the character class is inverted. */ + register bool not; + CHAR cold; + UCHAR fn; + + if (posixly_correct == 0) + posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; + + if (n == string_end) + return FNM_NOMATCH; + + if (*n == L_('.') && no_leading_period) + return FNM_NOMATCH; + + if (*n == L_('/') && (flags & FNM_FILE_NAME)) + /* `/' cannot be matched. */ + return FNM_NOMATCH; + + not = (*p == L_('!') || (posixly_correct < 0 && *p == L_('^'))); + if (not) + ++p; + + fn = FOLD ((UCHAR) *n); + + c = *p++; + for (;;) + { + if (!(flags & FNM_NOESCAPE) && c == L_('\\')) + { + if (*p == L_('\0')) + return FNM_NOMATCH; + c = FOLD ((UCHAR) *p); + ++p; + + goto normal_bracket; + } + else if (c == L_('[') && *p == L_(':')) + { + /* Leave room for the null. */ + CHAR str[CHAR_CLASS_MAX_LENGTH + 1]; + size_t c1 = 0; +#if defined _LIBC || WIDE_CHAR_SUPPORT + wctype_t wt; +#endif + const CHAR *startp = p; + + for (;;) + { + if (c1 == CHAR_CLASS_MAX_LENGTH) + /* The name is too long and therefore the pattern + is ill-formed. */ + return FNM_NOMATCH; + + c = *++p; + if (c == L_(':') && p[1] == L_(']')) + { + p += 2; + break; + } + if (c < L_('a') || c >= L_('z')) + { + /* This cannot possibly be a character class name. + Match it as a normal range. */ + p = startp; + c = L_('['); + goto normal_bracket; + } + str[c1++] = c; + } + str[c1] = L_('\0'); + +#if defined _LIBC || WIDE_CHAR_SUPPORT + wt = IS_CHAR_CLASS (str); + if (wt == 0) + /* Invalid character class name. */ + return FNM_NOMATCH; + +# if defined _LIBC && ! WIDE_CHAR_VERSION + /* The following code is glibc specific but does + there a good job in speeding up the code since + we can avoid the btowc() call. */ + if (_ISCTYPE ((UCHAR) *n, wt)) + goto matched; +# else + if (ISWCTYPE (BTOWC ((UCHAR) *n), wt)) + goto matched; +# endif +#else + if ((STREQ (str, L_("alnum")) && isalnum ((UCHAR) *n)) + || (STREQ (str, L_("alpha")) && isalpha ((UCHAR) *n)) + || (STREQ (str, L_("blank")) && isblank ((UCHAR) *n)) + || (STREQ (str, L_("cntrl")) && iscntrl ((UCHAR) *n)) + || (STREQ (str, L_("digit")) && isdigit ((UCHAR) *n)) + || (STREQ (str, L_("graph")) && isgraph ((UCHAR) *n)) + || (STREQ (str, L_("lower")) && islower ((UCHAR) *n)) + || (STREQ (str, L_("print")) && isprint ((UCHAR) *n)) + || (STREQ (str, L_("punct")) && ispunct ((UCHAR) *n)) + || (STREQ (str, L_("space")) && isspace ((UCHAR) *n)) + || (STREQ (str, L_("upper")) && isupper ((UCHAR) *n)) + || (STREQ (str, L_("xdigit")) && isxdigit ((UCHAR) *n))) + goto matched; +#endif + c = *p++; + } +#ifdef _LIBC + else if (c == L_('[') && *p == L_('=')) + { + UCHAR str[1]; + uint32_t nrules = + _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + const CHAR *startp = p; + + c = *++p; + if (c == L_('\0')) + { + p = startp; + c = L_('['); + goto normal_bracket; + } + str[0] = c; + + c = *++p; + if (c != L_('=') || p[1] != L_(']')) + { + p = startp; + c = L_('['); + goto normal_bracket; + } + p += 2; + + if (nrules == 0) + { + if ((UCHAR) *n == str[0]) + goto matched; + } + else + { + const int32_t *table; +# if WIDE_CHAR_VERSION + const int32_t *weights; + const int32_t *extra; +# else + const unsigned char *weights; + const unsigned char *extra; +# endif + const int32_t *indirect; + int32_t idx; + const UCHAR *cp = (const UCHAR *) str; + + /* This #include defines a local function! */ +# if WIDE_CHAR_VERSION +# include <locale/weightwc.h> +# else +# include <locale/weight.h> +# endif + +# if WIDE_CHAR_VERSION + table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC); + weights = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC); + extra = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC); + indirect = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC); +# else + 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); +# endif + + idx = findidx (&cp); + if (idx != 0) + { + /* We found a table entry. Now see whether the + character we are currently at has the same + equivalance class value. */ + int len = weights[idx & 0xffffff]; + int32_t idx2; + const UCHAR *np = (const UCHAR *) n; + + idx2 = findidx (&np); + if (idx2 != 0 + && (idx >> 24) == (idx2 >> 24) + && len == weights[idx2 & 0xffffff]) + { + int cnt = 0; + + idx &= 0xffffff; + idx2 &= 0xffffff; + + while (cnt < len + && (weights[idx + 1 + cnt] + == weights[idx2 + 1 + cnt])) + ++cnt; + + if (cnt == len) + goto matched; + } + } + } + + c = *p++; + } +#endif + else if (c == L_('\0')) + /* [ (unterminated) loses. */ + return FNM_NOMATCH; + else + { + bool is_range = false; + +#ifdef _LIBC + bool is_seqval = false; + + if (c == L_('[') && *p == L_('.')) + { + uint32_t nrules = + _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + const CHAR *startp = p; + size_t c1 = 0; + + while (1) + { + c = *++p; + if (c == L_('.') && p[1] == L_(']')) + { + p += 2; + break; + } + if (c == '\0') + return FNM_NOMATCH; + ++c1; + } + + /* We have to handling the symbols differently in + ranges since then the collation sequence is + important. */ + is_range = *p == L_('-') && p[1] != L_('\0'); + + if (nrules == 0) + { + /* There are no names defined in the collation + data. Therefore we only accept the trivial + names consisting of the character itself. */ + if (c1 != 1) + return FNM_NOMATCH; + + if (!is_range && *n == startp[1]) + goto matched; + + cold = startp[1]; + c = *p++; + } + else + { + int32_t table_size; + const int32_t *symb_table; +# ifdef WIDE_CHAR_VERSION + char str[c1]; + size_t strcnt; +# else +# define str (startp + 1) +# endif + const unsigned char *extra; + int32_t idx; + int32_t elem; + int32_t second; + int32_t hash; + +# ifdef WIDE_CHAR_VERSION + /* We have to convert the name to a single-byte + string. This is possible since the names + consist of ASCII characters and the internal + representation is UCS4. */ + for (strcnt = 0; strcnt < c1; ++strcnt) + str[strcnt] = startp[1 + strcnt]; +# endif + + 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); + + /* Locate the character in the hashing table. */ + hash = elem_hash (str, c1); + + idx = 0; + elem = hash % table_size; + if (symb_table[2 * elem] != 0) + { + second = hash % (table_size - 2) + 1; + + do + { + /* First compare the hashing value. */ + if (symb_table[2 * elem] == hash + && (c1 + == extra[symb_table[2 * elem + 1]]) + && memcmp (str, + &extra[symb_table[2 * elem + + 1] + + 1], c1) == 0) + { + /* Yep, this is the entry. */ + idx = symb_table[2 * elem + 1]; + idx += 1 + extra[idx]; + break; + } + + /* Next entry. */ + elem += second; + } + while (symb_table[2 * elem] != 0); + } + + if (symb_table[2 * elem] != 0) + { + /* Compare the byte sequence but only if + this is not part of a range. */ +# ifdef WIDE_CHAR_VERSION + int32_t *wextra; + + idx += 1 + extra[idx]; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + + wextra = (int32_t *) &extra[idx + 4]; +# endif + + if (! is_range) + { +# ifdef WIDE_CHAR_VERSION + for (c1 = 0; + (int32_t) c1 < wextra[idx]; + ++c1) + if (n[c1] != wextra[1 + c1]) + break; + + if ((int32_t) c1 == wextra[idx]) + goto matched; +# else + for (c1 = 0; c1 < extra[idx]; ++c1) + if (n[c1] != extra[1 + c1]) + break; + + if (c1 == extra[idx]) + goto matched; +# endif + } + + /* Get the collation sequence value. */ + is_seqval = true; +# ifdef WIDE_CHAR_VERSION + cold = wextra[1 + wextra[idx]]; +# else + /* Adjust for the alignment. */ + idx += 1 + extra[idx]; + idx = (idx + 3) & ~4; + cold = *((int32_t *) &extra[idx]); +# endif + + c = *p++; + } + else if (c1 == 1) + { + /* No valid character. Match it as a + single byte. */ + if (!is_range && *n == str[0]) + goto matched; + + cold = str[0]; + c = *p++; + } + else + return FNM_NOMATCH; + } + } + else +# undef str +#endif + { + c = FOLD (c); + normal_bracket: + + /* We have to handling the symbols differently in + ranges since then the collation sequence is + important. */ + is_range = (*p == L_('-') && p[1] != L_('\0') + && p[1] != L_(']')); + + if (!is_range && c == fn) + goto matched; + +#if _LIBC + /* This is needed if we goto normal_bracket; from + outside of is_seqval's scope. */ + is_seqval = false; +#endif + + cold = c; + c = *p++; + } + + if (c == L_('-') && *p != L_(']')) + { +#if _LIBC + /* We have to find the collation sequence + value for C. Collation sequence is nothing + we can regularly access. The sequence + value is defined by the order in which the + definitions of the collation values for the + various characters appear in the source + file. A strange concept, nowhere + documented. */ + uint32_t fcollseq; + uint32_t lcollseq; + UCHAR cend = *p++; + +# ifdef WIDE_CHAR_VERSION + /* Search in the `names' array for the characters. */ + fcollseq = __collseq_table_lookup (collseq, fn); + if (fcollseq == ~((uint32_t) 0)) + /* XXX We don't know anything about the character + we are supposed to match. This means we are + failing. */ + goto range_not_matched; + + if (is_seqval) + lcollseq = cold; + else + lcollseq = __collseq_table_lookup (collseq, cold); +# else + fcollseq = collseq[fn]; + lcollseq = is_seqval ? cold : collseq[(UCHAR) cold]; +# endif + + is_seqval = false; + if (cend == L_('[') && *p == L_('.')) + { + uint32_t nrules = + _NL_CURRENT_WORD (LC_COLLATE, + _NL_COLLATE_NRULES); + const CHAR *startp = p; + size_t c1 = 0; + + while (1) + { + c = *++p; + if (c == L_('.') && p[1] == L_(']')) + { + p += 2; + break; + } + if (c == '\0') + return FNM_NOMATCH; + ++c1; + } + + if (nrules == 0) + { + /* There are no names defined in the + collation data. Therefore we only + accept the trivial names consisting + of the character itself. */ + if (c1 != 1) + return FNM_NOMATCH; + + cend = startp[1]; + } + else + { + int32_t table_size; + const int32_t *symb_table; +# ifdef WIDE_CHAR_VERSION + char str[c1]; + size_t strcnt; +# else +# define str (startp + 1) +# endif + const unsigned char *extra; + int32_t idx; + int32_t elem; + int32_t second; + int32_t hash; + +# ifdef WIDE_CHAR_VERSION + /* We have to convert the name to a single-byte + string. This is possible since the names + consist of ASCII characters and the internal + representation is UCS4. */ + for (strcnt = 0; strcnt < c1; ++strcnt) + str[strcnt] = startp[1 + strcnt]; +# endif + + 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); + + /* Locate the character in the hashing + table. */ + hash = elem_hash (str, c1); + + idx = 0; + elem = hash % table_size; + if (symb_table[2 * elem] != 0) + { + second = hash % (table_size - 2) + 1; + + do + { + /* First compare the hashing value. */ + if (symb_table[2 * elem] == hash + && (c1 + == extra[symb_table[2 * elem + 1]]) + && memcmp (str, + &extra[symb_table[2 * elem + 1] + + 1], c1) == 0) + { + /* Yep, this is the entry. */ + idx = symb_table[2 * elem + 1]; + idx += 1 + extra[idx]; + break; + } + + /* Next entry. */ + elem += second; + } + while (symb_table[2 * elem] != 0); + } + + if (symb_table[2 * elem] != 0) + { + /* Compare the byte sequence but only if + this is not part of a range. */ +# ifdef WIDE_CHAR_VERSION + int32_t *wextra; + + idx += 1 + extra[idx]; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~4; + + wextra = (int32_t *) &extra[idx + 4]; +# endif + /* Get the collation sequence value. */ + is_seqval = true; +# ifdef WIDE_CHAR_VERSION + cend = wextra[1 + wextra[idx]]; +# else + /* Adjust for the alignment. */ + idx += 1 + extra[idx]; + idx = (idx + 3) & ~4; + cend = *((int32_t *) &extra[idx]); +# endif + } + else if (symb_table[2 * elem] != 0 && c1 == 1) + { + cend = str[0]; + c = *p++; + } + else + return FNM_NOMATCH; + } +# undef str + } + else + { + if (!(flags & FNM_NOESCAPE) && cend == L_('\\')) + cend = *p++; + if (cend == L_('\0')) + return FNM_NOMATCH; + cend = FOLD (cend); + } + + /* XXX It is not entirely clear to me how to handle + characters which are not mentioned in the + collation specification. */ + if ( +# ifdef WIDE_CHAR_VERSION + lcollseq == 0xffffffff || +# endif + lcollseq <= fcollseq) + { + /* We have to look at the upper bound. */ + uint32_t hcollseq; + + if (is_seqval) + hcollseq = cend; + else + { +# ifdef WIDE_CHAR_VERSION + hcollseq = + __collseq_table_lookup (collseq, cend); + if (hcollseq == ~((uint32_t) 0)) + { + /* Hum, no information about the upper + bound. The matching succeeds if the + lower bound is matched exactly. */ + if (lcollseq != fcollseq) + goto range_not_matched; + + goto matched; + } +# else + hcollseq = collseq[cend]; +# endif + } + + if (lcollseq <= hcollseq && fcollseq <= hcollseq) + goto matched; + } +# ifdef WIDE_CHAR_VERSION + range_not_matched: +# endif +#else + /* We use a boring value comparison of the character + values. This is better than comparing using + `strcoll' since the latter would have surprising + and sometimes fatal consequences. */ + UCHAR cend = *p++; + + if (!(flags & FNM_NOESCAPE) && cend == L_('\\')) + cend = *p++; + if (cend == L_('\0')) + return FNM_NOMATCH; + + /* It is a range. */ + if (cold <= fn && fn <= cend) + goto matched; +#endif + + c = *p++; + } + } + + if (c == L_(']')) + break; + } + + if (!not) + return FNM_NOMATCH; + break; + + matched: + /* Skip the rest of the [...] that already matched. */ + do + { + ignore_next: + c = *p++; + + if (c == L_('\0')) + /* [... (unterminated) loses. */ + return FNM_NOMATCH; + + if (!(flags & FNM_NOESCAPE) && c == L_('\\')) + { + if (*p == L_('\0')) + return FNM_NOMATCH; + /* XXX 1003.2d11 is unclear if this is right. */ + ++p; + } + else if (c == L_('[') && *p == L_(':')) + { + int c1 = 0; + const CHAR *startp = p; + + while (1) + { + c = *++p; + if (++c1 == CHAR_CLASS_MAX_LENGTH) + return FNM_NOMATCH; + + if (*p == L_(':') && p[1] == L_(']')) + break; + + if (c < L_('a') || c >= L_('z')) + { + p = startp; + goto ignore_next; + } + } + p += 2; + c = *p++; + } + else if (c == L_('[') && *p == L_('=')) + { + c = *++p; + if (c == L_('\0')) + return FNM_NOMATCH; + c = *++p; + if (c != L_('=') || p[1] != L_(']')) + return FNM_NOMATCH; + p += 2; + c = *p++; + } + else if (c == L_('[') && *p == L_('.')) + { + ++p; + while (1) + { + c = *++p; + if (c == '\0') + return FNM_NOMATCH; + + if (*p == L_('.') && p[1] == L_(']')) + break; + } + p += 2; + c = *p++; + } + } + while (c != L_(']')); + if (not) + return FNM_NOMATCH; + } + break; + + case L_('+'): + case L_('@'): + case L_('!'): + if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') + { + int res; + + res = EXT (c, p, n, string_end, no_leading_period, flags); + if (res != -1) + return res; + } + goto normal_match; + + case L_('/'): + if (NO_LEADING_PERIOD (flags)) + { + if (n == string_end || c != (UCHAR) *n) + return FNM_NOMATCH; + + new_no_leading_period = true; + break; + } + /* FALLTHROUGH */ + default: + normal_match: + if (n == string_end || c != FOLD ((UCHAR) *n)) + return FNM_NOMATCH; + } + + no_leading_period = new_no_leading_period; + ++n; + } + + if (n == string_end) + return 0; + + if ((flags & FNM_LEADING_DIR) && n != string_end && *n == L_('/')) + /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */ + return 0; + + return FNM_NOMATCH; +} + + +static const CHAR * +internal_function +END (const CHAR *pattern) +{ + const CHAR *p = pattern; + + while (1) + if (*++p == L_('\0')) + /* This is an invalid pattern. */ + return pattern; + else if (*p == L_('[')) + { + /* Handle brackets special. */ + if (posixly_correct == 0) + posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; + + /* Skip the not sign. We have to recognize it because of a possibly + following ']'. */ + if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^'))) + ++p; + /* A leading ']' is recognized as such. */ + if (*p == L_(']')) + ++p; + /* Skip over all characters of the list. */ + while (*p != L_(']')) + if (*p++ == L_('\0')) + /* This is no valid pattern. */ + return pattern; + } + else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@') + || *p == L_('!')) && p[1] == L_('(')) + p = END (p + 1); + else if (*p == L_(')')) + break; + + return p + 1; +} + + +static int +internal_function +EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, + bool no_leading_period, int flags) +{ + const CHAR *startp; + size_t level; + struct patternlist + { + struct patternlist *next; + CHAR str[1]; + } *list = NULL; + struct patternlist **lastp = &list; + size_t pattern_len = STRLEN (pattern); + const CHAR *p; + const CHAR *rs; + enum { ALLOCA_LIMIT = 8000 }; + + /* Parse the pattern. Store the individual parts in the list. */ + level = 0; + for (startp = p = pattern + 1; ; ++p) + if (*p == L_('\0')) + /* This is an invalid pattern. */ + return -1; + else if (*p == L_('[')) + { + /* Handle brackets special. */ + if (posixly_correct == 0) + posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; + + /* Skip the not sign. We have to recognize it because of a possibly + following ']'. */ + if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^'))) + ++p; + /* A leading ']' is recognized as such. */ + if (*p == L_(']')) + ++p; + /* Skip over all characters of the list. */ + while (*p != L_(']')) + if (*p++ == L_('\0')) + /* This is no valid pattern. */ + return -1; + } + else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@') + || *p == L_('!')) && p[1] == L_('(')) + /* Remember the nesting level. */ + ++level; + else if (*p == L_(')')) + { + if (level-- == 0) + { + /* This means we found the end of the pattern. */ +#define NEW_PATTERN \ + struct patternlist *newp; \ + size_t plen; \ + size_t plensize; \ + size_t newpsize; \ + \ + plen = (opt == L_('?') || opt == L_('@') \ + ? pattern_len \ + : p - startp + 1UL); \ + plensize = plen * sizeof (CHAR); \ + newpsize = offsetof (struct patternlist, str) + plensize; \ + if ((size_t) -1 / sizeof (CHAR) < plen \ + || newpsize < offsetof (struct patternlist, str) \ + || ALLOCA_LIMIT <= newpsize) \ + return -1; \ + newp = (struct patternlist *) alloca (newpsize); \ + *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L_('\0'); \ + newp->next = NULL; \ + *lastp = newp; \ + lastp = &newp->next + NEW_PATTERN; + break; + } + } + else if (*p == L_('|')) + { + if (level == 0) + { + NEW_PATTERN; + startp = p + 1; + } + } + assert (list != NULL); + assert (p[-1] == L_(')')); +#undef NEW_PATTERN + + switch (opt) + { + case L_('*'): + if (FCT (p, string, string_end, no_leading_period, flags) == 0) + return 0; + /* FALLTHROUGH */ + + case L_('+'): + do + { + for (rs = string; rs <= string_end; ++rs) + /* First match the prefix with the current pattern with the + current pattern. */ + if (FCT (list->str, string, rs, no_leading_period, + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0 + /* This was successful. Now match the rest with the rest + of the pattern. */ + && (FCT (p, rs, string_end, + rs == string + ? no_leading_period + : rs[-1] == '/' && NO_LEADING_PERIOD (flags), + flags & FNM_FILE_NAME + ? flags : flags & ~FNM_PERIOD) == 0 + /* This didn't work. Try the whole pattern. */ + || (rs != string + && FCT (pattern - 1, rs, string_end, + rs == string + ? no_leading_period + : rs[-1] == '/' && NO_LEADING_PERIOD (flags), + flags & FNM_FILE_NAME + ? flags : flags & ~FNM_PERIOD) == 0))) + /* It worked. Signal success. */ + return 0; + } + while ((list = list->next) != NULL); + + /* None of the patterns lead to a match. */ + return FNM_NOMATCH; + + case L_('?'): + if (FCT (p, string, string_end, no_leading_period, flags) == 0) + return 0; + /* FALLTHROUGH */ + + case L_('@'): + do + /* I cannot believe it but `strcat' is actually acceptable + here. Match the entire string with the prefix from the + pattern list and the rest of the pattern following the + pattern list. */ + if (FCT (STRCAT (list->str, p), string, string_end, + no_leading_period, + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0) + /* It worked. Signal success. */ + return 0; + while ((list = list->next) != NULL); + + /* None of the patterns lead to a match. */ + return FNM_NOMATCH; + + case L_('!'): + for (rs = string; rs <= string_end; ++rs) + { + struct patternlist *runp; + + for (runp = list; runp != NULL; runp = runp->next) + if (FCT (runp->str, string, rs, no_leading_period, + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0) + break; + + /* If none of the patterns matched see whether the rest does. */ + if (runp == NULL + && (FCT (p, rs, string_end, + rs == string + ? no_leading_period + : rs[-1] == '/' && NO_LEADING_PERIOD (flags), + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) + == 0)) + /* This is successful. */ + return 0; + } + + /* None of the patterns together with the rest of the pattern + lead to a match. */ + return FNM_NOMATCH; + + default: + assert (! "Invalid extended matching operator"); + break; + } + + return -1; +} + + +#undef FOLD +#undef CHAR +#undef UCHAR +#undef INT +#undef FCT +#undef EXT +#undef END +#undef MEMPCPY +#undef MEMCHR +#undef STRCOLL +#undef STRLEN +#undef STRCAT +#undef L_ +#undef BTOWC diff --git a/lib/freopen-safer.c b/lib/freopen-safer.c new file mode 100644 index 0000000..447a0ec --- /dev/null +++ b/lib/freopen-safer.c @@ -0,0 +1,103 @@ +/* Invoke freopen, but avoid some glitches. + + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Eric Blake. */ + +#include <config.h> + +#include "stdio-safer.h" + +#include <errno.h> +#include <fcntl.h> +#include <stdbool.h> +#include <unistd.h> + +/* Guarantee that FD is open; all smaller FDs must already be open. + Return true if successful. */ +static bool +protect_fd (int fd) +{ + int value = open ("/dev/null", O_RDONLY); + if (value != fd) + { + if (0 <= value) + { + close (value); + errno = EBADF; /* Unexpected; this is as good as anything else. */ + } + return false; + } + return true; +} + +/* Like freopen, but guarantee that reopening stdin, stdout, or stderr + preserves the invariant that STDxxx_FILENO==fileno(stdxxx), and + that no other stream will interfere with the standard streams. + This is necessary because most freopen implementations will change + the associated fd of a stream to the lowest available slot. */ + +FILE * +freopen_safer (char const *name, char const *mode, FILE *f) +{ + /* Unfortunately, we cannot use the fopen_safer approach of using + fdopen (dup_safer (fileno (freopen (cmd, mode, f)))), because we + need to return f itself. The implementation of freopen(NULL,m,f) + is system-dependent, so the best we can do is guarantee that all + lower-valued standard fds are open prior to the freopen call, + even though this puts more pressure on open fds. */ + bool protect_in = false; + bool protect_out = false; + bool protect_err = false; + int saved_errno; + + switch (fileno (f)) + { + default: /* -1 or not a standard stream. */ + if (dup2 (STDERR_FILENO, STDERR_FILENO) != STDERR_FILENO) + protect_err = true; + /* fall through */ + case STDERR_FILENO: + if (dup2 (STDOUT_FILENO, STDOUT_FILENO) != STDOUT_FILENO) + protect_out = true; + /* fall through */ + case STDOUT_FILENO: + if (dup2 (STDIN_FILENO, STDIN_FILENO) != STDIN_FILENO) + protect_in = true; + /* fall through */ + case STDIN_FILENO: + /* Nothing left to protect. */ + break; + } + if (protect_in && !protect_fd (STDIN_FILENO)) + f = NULL; + else if (protect_out && !protect_fd (STDOUT_FILENO)) + f = NULL; + else if (protect_err && !protect_fd (STDERR_FILENO)) + f = NULL; + else + f = freopen (name, mode, f); + saved_errno = errno; + if (protect_err) + close (STDERR_FILENO); + if (protect_out) + close (STDOUT_FILENO); + if (protect_in) + close (STDIN_FILENO); + if (!f) + errno = saved_errno; + return f; +} diff --git a/lib/freopen.c b/lib/freopen.c new file mode 100644 index 0000000..5da5ced --- /dev/null +++ b/lib/freopen.c @@ -0,0 +1,46 @@ +/* Open a stream to a file. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +/* Get the original definition of freopen. It might be defined as a macro. */ +#define __need_FILE +#include <stdio.h> +#undef __need_FILE + +static inline FILE * +orig_freopen (const char *filename, const char *mode, FILE *stream) +{ + return freopen (filename, mode, stream); +} + +/* Specification. */ +#include <stdio.h> + +#include <string.h> + +FILE * +rpl_freopen (const char *filename, const char *mode, FILE *stream) +{ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + if (strcmp (filename, "/dev/null") == 0) + filename = "NUL"; +#endif + + return orig_freopen (filename, mode, stream); +} diff --git a/lib/getdtablesize.c b/lib/getdtablesize.c new file mode 100644 index 0000000..a565a2d --- /dev/null +++ b/lib/getdtablesize.c @@ -0,0 +1,63 @@ +/* getdtablesize() function for platforms that don't have it. + Copyright (C) 2008-2010 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <unistd.h> + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +#include <stdio.h> + +/* Cache for the previous getdtablesize () result. */ +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 (bound) < 0; bound = bound / 2) + ; + _setmaxstdio (orig_max_stdio); + dtablesize = bound; + } + return dtablesize; +} + +#endif diff --git a/lib/getopt.c b/lib/getopt.c new file mode 100644 index 0000000..3791f12 --- /dev/null +++ b/lib/getopt.c @@ -0,0 +1,1192 @@ +/* Getopt for GNU. + NOTE: getopt is part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to drepper@gnu.org + before changing it! + Copyright (C) 1987-1996, 1998-2004, 2006, 2008-2010 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 <http://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 +# include <libintl.h> +#else +# include "gettext.h" +# define _(msgid) gettext (msgid) +#endif + +#if defined _LIBC && defined USE_IN_LIBIO +# include <wchar.h> +#endif + +/* This version of `getopt' appears to the caller like standard Unix `getopt' + but it behaves differently for the user, since it allows the user + to intersperse the options with the other arguments. + + As `getopt_long' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Using `getopt' or setting the environment variable POSIXLY_CORRECT + disables permutation. + Then the behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#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; + + +#if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV +extern char *getenv (); +#endif + +#ifdef _LIBC +/* Stored original parameters. + XXX This is no good solution. We should rather copy the args so + that we can compare them later. But we must not use malloc(3). */ +extern int __libc_argc; +extern char **__libc_argv; + +/* Bash 2.0 gives us an environment variable containing flags + indicating ARGV elements that should not be considered arguments. */ + +# ifdef USE_NONOPTION_FLAGS +/* Defined in getopt_init.c */ +extern char *__getopt_nonoption_flags; +# endif + +# ifdef USE_NONOPTION_FLAGS +# define SWAP_FLAGS(ch1, ch2) \ + if (d->__nonoption_flags_len > 0) \ + { \ + char __tmp = __getopt_nonoption_flags[ch1]; \ + __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ + __getopt_nonoption_flags[ch2] = __tmp; \ + } +# else +# define SWAP_FLAGS(ch1, ch2) +# endif +#else /* !_LIBC */ +# define SWAP_FLAGS(ch1, ch2) +#endif /* _LIBC */ + +/* 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. */ + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + /* First make sure the handling of the `__getopt_nonoption_flags' + string can work normally. Our top argument must be in the range + of the string. */ + if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len) + { + /* We must extend the array. The user plays games with us and + presents new arguments. */ + char *new_str = malloc (top + 1); + if (new_str == NULL) + d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0; + else + { + memset (__mempcpy (new_str, __getopt_nonoption_flags, + d->__nonoption_flags_max_len), + '\0', top + 1 - d->__nonoption_flags_max_len); + d->__nonoption_flags_max_len = top + 1; + __getopt_nonoption_flags = new_str; + } + } +#endif + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register 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; + SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register 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; + SWAP_FLAGS (bottom + i, middle + i); + } + /* 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; +} + +/* Initialize the internal data when the first call is made. */ + +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. */ + + d->__first_nonopt = d->__last_nonopt = d->optind; + + d->__nextchar = NULL; + + d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT"); + + /* 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 (d->__posixly_correct) + d->__ordering = REQUIRE_ORDER; + else + d->__ordering = PERMUTE; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + if (!d->__posixly_correct + && argc == __libc_argc && argv == __libc_argv) + { + if (d->__nonoption_flags_max_len == 0) + { + if (__getopt_nonoption_flags == NULL + || __getopt_nonoption_flags[0] == '\0') + d->__nonoption_flags_max_len = -1; + else + { + const char *orig_str = __getopt_nonoption_flags; + int len = d->__nonoption_flags_max_len = strlen (orig_str); + if (d->__nonoption_flags_max_len < argc) + d->__nonoption_flags_max_len = argc; + __getopt_nonoption_flags = + (char *) malloc (d->__nonoption_flags_max_len); + if (__getopt_nonoption_flags == NULL) + d->__nonoption_flags_max_len = -1; + else + memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), + '\0', d->__nonoption_flags_max_len - len); + } + } + d->__nonoption_flags_len = d->__nonoption_flags_max_len; + } + else + d->__nonoption_flags_len = 0; +#endif + + 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) + { + if (d->optind == 0) + d->optind = 1; /* Don't scan ARGV[0], the program name. */ + optstring = _getopt_initialize (argc, argv, optstring, d, + posixly_correct); + d->__initialized = 1; + } + else if (optstring[0] == '-' || optstring[0] == '+') + optstring++; + if (optstring[0] == ':') + print_errors = 0; + + /* Test whether ARGV[optind] points to a non-option argument. + Either it does not have option syntax, or there is an environment flag + from the shell indicating it is not an option. The later information + is only used when the used in the GNU libc. */ +#if defined _LIBC && defined USE_NONOPTION_FLAGS +# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \ + || (d->optind < d->__nonoption_flags_len \ + && __getopt_nonoption_flags[d->optind] == '1')) +#else +# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') +#endif + + 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 ((char **) 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 ((char **) 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. + Skip the initial punctuation. */ + + d->__nextchar = (argv[d->optind] + 1 + + (longopts != NULL && argv[d->optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + 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 (longopts != NULL + && (argv[d->optind][1] == '-' + || (long_only && (argv[d->optind][2] + || !strchr (optstring, argv[d->optind][1]))))) + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = -1; + int option_index; + + for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) + { + if ((unsigned int) (nameend - d->__nextchar) + == (unsigned int) strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else 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. */ + ambig = 1; + } + + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("%s: option '%s' is ambiguous\n"), + argv[0], argv[d->optind]) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("%s: option '%s' is ambiguous\n"), + argv[0], argv[d->optind]); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optind++; + d->optopt = 0; + return '?'; + } + + if (pfound != NULL) + { + option_index = indfound; + d->optind++; + 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) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + + if (argv[d->optind - 1][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("\ +%s: option '--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#else + fprintf (stderr, _("\ +%s: option '--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("\ +%s: option '%c%s' doesn't allow an argument\n"), + argv[0], argv[d->optind - 1][0], + pfound->name); +#else + fprintf (stderr, _("\ +%s: option '%c%s' doesn't allow an argument\n"), + argv[0], argv[d->optind - 1][0], + pfound->name); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + + d->__nextchar += strlen (d->__nextchar); + + d->optopt = pfound->val; + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (d->optind < argc) + d->optarg = argv[d->optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option '--%s' requires an argument\n"), + argv[0], pfound->name) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option '--%s' requires an argument\n"), + argv[0], pfound->name); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optopt = pfound->val; + return optstring[0] == ':' ? ':' : '?'; + } + } + d->__nextchar += strlen (d->__nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* 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. + Otherwise interpret it as a short option. */ + if (!long_only || argv[d->optind][1] == '-' + || strchr (optstring, *d->__nextchar) == NULL) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + + if (argv[d->optind][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: unrecognized option '--%s'\n"), + argv[0], d->__nextchar); +#else + fprintf (stderr, _("%s: unrecognized option '--%s'\n"), + argv[0], d->__nextchar); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: unrecognized option '%c%s'\n"), + argv[0], argv[d->optind][0], d->__nextchar); +#else + fprintf (stderr, _("%s: unrecognized option '%c%s'\n"), + argv[0], argv[d->optind][0], d->__nextchar); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + d->__nextchar = (char *) ""; + d->optind++; + d->optopt = 0; + return '?'; + } + } + + /* 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) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: invalid option -- '%c'\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c); +#endif + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + d->optopt = c; + return '?'; + } + /* Convenience. Treat POSIX -W foo same as long option --foo */ + if (temp[0] == 'W' && temp[1] == ';') + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = 0; + int option_index; + + /* 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) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, + _("%s: option requires an argument -- '%c'\n"), + argv[0], c) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option requires an argument -- '%c'\n"), + argv[0], c); +#endif + } + d->optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + return c; + } + else + /* We already incremented `d->optind' once; + increment it again when taking next ARGV-elt as argument. */ + d->optarg = argv[d->optind++]; + + /* optarg is now the argument, see if it's in the + table of longopts. */ + + for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '='; + nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) + { + if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else 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. */ + ambig = 1; + } + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("%s: option '-W %s' is ambiguous\n"), + argv[0], d->optarg) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("%s: option '-W %s' is ambiguous\n"), + argv[0], d->optarg); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optind++; + return '?'; + } + if (pfound != NULL) + { + option_index = indfound; + 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) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option '-W %s' doesn't allow an argument\n"), + argv[0], pfound->name) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("\ +%s: option '-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + + d->__nextchar += strlen (d->__nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (d->optind < argc) + d->optarg = argv[d->optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option '-W %s' requires an argument\n"), + argv[0], pfound->name) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("\ +%s: option '-W %s' requires an argument\n"), + argv[0], pfound->name); +#endif + } + d->__nextchar += strlen (d->__nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + else + d->optarg = NULL; + d->__nextchar += strlen (d->__nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + d->__nextchar = NULL; + return 'W'; /* Let the application handle it. */ + } + 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) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option requires an argument -- '%c'\n"), + argv[0], c) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option requires an argument -- '%c'\n"), + argv[0], c); +#endif + } + 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. + Standalone applications get a POSIX-compliant getopt. */ +#if _LIBC +enum { POSIXLY_CORRECT = 0 }; +#else +enum { POSIXLY_CORRECT = 1 }; +#endif + +int +getopt (int argc, char *const *argv, const char *optstring) +{ + return _getopt_internal (argc, (char **) argv, optstring, + (const struct option *) 0, + (int *) 0, + 0, POSIXLY_CORRECT); +} + +#ifdef _LIBC +int +__posix_getopt (int argc, char *const *argv, const char *optstring) +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0, 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/lib/getopt.in.h b/lib/getopt.in.h new file mode 100644 index 0000000..57a8e89 --- /dev/null +++ b/lib/getopt.in.h @@ -0,0 +1,249 @@ +/* Declarations for getopt. + Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2010 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _GL_GETOPT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* 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 + +#ifndef _GL_GETOPT_H + +#ifndef __need_getopt +# define _GL_GETOPT_H 1 +#endif + +/* Standalone applications should #define __GETOPT_PREFIX to an + identifier that prefixes the external functions and variables + defined in this header. 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). Then systematically rename + identifiers so that they do not collide with the system functions + and variables. Renaming avoids problems with some compilers and + linkers. */ +#if defined __GETOPT_PREFIX && !defined __need_getopt +# if !@HAVE_GETOPT_H@ +# include <stdlib.h> +# include <stdio.h> +# include <unistd.h> +# endif +# undef __need_getopt +# undef getopt +# undef getopt_long +# undef getopt_long_only +# undef optarg +# undef opterr +# undef optind +# undef optopt +# undef option +# 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) +# define getopt __GETOPT_ID (getopt) +# define getopt_long __GETOPT_ID (getopt_long) +# define getopt_long_only __GETOPT_ID (getopt_long_only) +# define optarg __GETOPT_ID (optarg) +# define opterr __GETOPT_ID (opterr) +# define optind __GETOPT_ID (optind) +# define optopt __GETOPT_ID (optopt) +# define option __GETOPT_ID (option) +# define _getopt_internal __GETOPT_ID (getopt_internal) +#endif + +/* Standalone applications get correct prototypes for getopt_long and + getopt_long_only; they declare "char **argv". libc uses prototypes + with "char *const *argv" that are incorrect because getopt_long and + getopt_long_only can permute argv; this is required for backward + compatibility (e.g., for LSB 2.0.1). + + This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt', + but it caused redefinition warnings if both unistd.h and getopt.h were + included, since unistd.h includes getopt.h having previously defined + __need_getopt. + + The only place where __getopt_argv_const is used is in definitions + of getopt_long and getopt_long_only below, but these are visible + only if __need_getopt is not defined, so it is quite safe to rewrite + the conditional as follows: +*/ +#if !defined __need_getopt +# if defined __GETOPT_PREFIX +# define __getopt_argv_const /* empty */ +# else +# define __getopt_argv_const const +# endif +#endif + +/* If __GNU_LIBRARY__ is not already defined, either we are being used + standalone, or this is the first header included in the source file. + If we are being used with glibc, we need to include <features.h>, but + that does not exist if we are standalone. So: if __GNU_LIBRARY__ is + not defined, include <ctype.h>, which will pull in <features.h> for us + if it's from glibc. (Why ctype.h? It's guaranteed to exist and it + doesn't flood the namespace with stuff the way some other headers do.) */ +#if !defined __GNU_LIBRARY__ +# include <ctype.h> +#endif + +#ifndef __THROW +# ifndef __GNUC_PREREQ +# define __GNUC_PREREQ(maj, min) (0) +# endif +# if defined __cplusplus && __GNUC_PREREQ (2,8) +# define __THROW throw () +# else +# define __THROW +# endif +#endif + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* 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; + +#ifndef __need_getopt +/* 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 +#endif /* need getopt */ + + +/* 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. */ + +extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) + __THROW _GL_ARG_NONNULL ((2, 3)); + +#ifndef __need_getopt +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)); + +#endif + +#ifdef __cplusplus +} +#endif + +/* Make sure we later can get all the definitions and declarations. */ +#undef __need_getopt + +#endif /* getopt.h */ +#endif /* getopt.h */ diff --git a/lib/getopt1.c b/lib/getopt1.c new file mode 100644 index 0000000..046d69f --- /dev/null +++ b/lib/getopt1.c @@ -0,0 +1,170 @@ +/* getopt_long and getopt_long_only entry points for GNU getopt. + Copyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, + 1998, 2004, 2006, 2009, 2010 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 <http://www.gnu.org/licenses/>. */ + +#ifdef _LIBC +# include <getopt.h> +#else +# include <config.h> +# include "getopt.h" +#endif +#include "getopt_int.h" + +#include <stdio.h> + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +#include <stdlib.h> +#endif + +#ifndef NULL +#define NULL 0 +#endif + +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> + +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/lib/getopt_int.h b/lib/getopt_int.h new file mode 100644 index 0000000..980b750 --- /dev/null +++ b/lib/getopt_int.h @@ -0,0 +1,135 @@ +/* Internal declarations for getopt. + Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2010 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 <http://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. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using `+' as the first character + of the list of option characters, or by calling getopt. + + PERMUTE is the default. We 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. Using `-' as the first character of the + list of option characters selects this mode of operation. + + 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; + + /* If the POSIXLY_CORRECT environment variable is set + or getopt was called. */ + int __posixly_correct; + + + /* 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; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + int __nonoption_flags_max_len; + int __nonoption_flags_len; +# endif +}; + +/* 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/lib/gettext.h b/lib/gettext.h new file mode 100644 index 0000000..0b054db --- /dev/null +++ b/lib/gettext.h @@ -0,0 +1,282 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Convenience header for conditional use of GNU <libintl.h>. + Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _LIBGETTEXT_H +#define _LIBGETTEXT_H 1 + +/* NLS can be disabled through the configure --disable-nls option. */ +#if 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) || _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 + +/* 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> + +#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \ + (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \ + /* || __STDC_VERSION__ >= 199901L */ ) + +#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 + { + 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); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (translation != msg_ctxt_id) + 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 + { + 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); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (!(translation == msg_ctxt_id || translation == msgid_plural)) + return translation; + } + return (n == 1 ? msgid : msgid_plural); +} + +#endif /* _LIBGETTEXT_H */ diff --git a/lib/gettime.c b/lib/gettime.c new file mode 100644 index 0000000..044b26f --- /dev/null +++ b/lib/gettime.c @@ -0,0 +1,48 @@ +/* gettime -- get the system clock + + Copyright (C) 2002, 2004-2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* 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 HAVE_NANOTIME + nanotime (ts); +#else + +# if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME + if (clock_gettime (CLOCK_REALTIME, ts) == 0) + return; +# endif + + { + struct timeval tv; + gettimeofday (&tv, NULL); + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; + } + +#endif +} diff --git a/lib/gettimeofday.c b/lib/gettimeofday.c new file mode 100644 index 0000000..cdd8466 --- /dev/null +++ b/lib/gettimeofday.c @@ -0,0 +1,146 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Provide gettimeofday for systems that don't have it or for which it's broken. + + Copyright (C) 2001-2003, 2005-2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* written by Jim Meyering */ + +#include <config.h> + +/* Specification. */ +#include <sys/time.h> + +#include <time.h> + +#if HAVE_SYS_TIMEB_H +# include <sys/timeb.h> +#endif + +#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME + +/* 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. The tzset replacement is necessary for at least + Solaris 2.5, 2.5.1, and 2.6. */ + +static struct tm tm_zero_buffer; +static struct tm *localtime_buffer_addr = &tm_zero_buffer; + +#undef localtime +extern struct tm *localtime (time_t const *); + +#undef gmtime +extern struct tm *gmtime (time_t const *); + +/* This is a wrapper for localtime. It is used only on systems for which + gettimeofday clobbers the static buffer used for localtime's result. + + 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) +{ + 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) +{ + struct tm *tm = gmtime (timep); + + if (localtime_buffer_addr == &tm_zero_buffer) + localtime_buffer_addr = tm; + + return tm; +} + +#endif /* GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME */ + +#if TZSET_CLOBBERS_LOCALTIME + +#undef tzset +extern void tzset (void); + +/* This is a wrapper for tzset, for systems on which tzset may clobber + the static buffer used for localtime's result. */ +void +rpl_tzset (void) +{ + /* Save and restore the contents of the buffer used for localtime's + result around the call to tzset. */ + struct tm save = *localtime_buffer_addr; + tzset (); + *localtime_buffer_addr = save; +} +#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. */ + +int +gettimeofday (struct timeval *restrict tv, void *restrict tz) +{ +#undef gettimeofday +#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 + + int result = gettimeofday (tv, (struct timezone *) tz); + +# if GETTIMEOFDAY_CLOBBERS_LOCALTIME + *localtime_buffer_addr = save; +# endif + + return result; + +#else + +# if HAVE__FTIME + + struct _timeb timebuf; + _ftime (&timebuf); + tv->tv_sec = timebuf.time; + tv->tv_usec = timebuf.millitm * 1000; + +# 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; + +# endif + + return 0; + +#endif +} diff --git a/lib/gnulib.mk b/lib/gnulib.mk new file mode 100644 index 0000000..6fead7e --- /dev/null +++ b/lib/gnulib.mk @@ -0,0 +1,2165 @@ +## DO NOT EDIT! GENERATED AUTOMATICALLY! +## Process this file with automake to produce Makefile.in. +# Copyright (C) 2002-2010 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. 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 --dir=. --local-dir=gl --lib=libdiffutils --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=gnulib-tests --aux-dir=build-aux --with-tests --no-libtool --macro-prefix=gl announce-gen c-stack config-h diffseq dirname do-release-commit-and-tag dup2 error exclude exit exitfail extensions fcntl fdl file-type fnmatch-gnu getopt gettext gettime git-version-gen gitlog-to-changelog gnu-make gnu-web-doc-update gnumakefile gnupload hard-locale inttostr inttypes maintainer-makefile manywarnings mbrtowc mkstemp mktime progname propername regex sh-quote stat-macros stat-time strcase strftime strptime strtoumax sys_wait timegm unistd unlocked-io update-copyright verify version-etc version-etc-fsf wcwidth xalloc xfreopen xstrtoumax + +AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects + +SUBDIRS = +noinst_HEADERS = +noinst_LIBRARIES = +noinst_LTLIBRARIES = +EXTRA_DIST = +BUILT_SOURCES = +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump +MOSTLYCLEANDIRS = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = + +AM_CPPFLAGS = +AM_CFLAGS = + +noinst_LIBRARIES += libdiffutils.a + +libdiffutils_a_SOURCES = +libdiffutils_a_LIBADD = $(gl_LIBOBJS) +libdiffutils_a_DEPENDENCIES = $(gl_LIBOBJS) +EXTRA_libdiffutils_a_SOURCES = + +## begin gnulib module alloca + + +EXTRA_DIST += alloca.c + +EXTRA_libdiffutils_a_SOURCES += alloca.c + +libdiffutils_a_LIBADD += @ALLOCA@ +libdiffutils_a_DEPENDENCIES += @ALLOCA@ +## 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. +alloca.h: alloca.in.h + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/alloca.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +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 arg-nonnull + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. + +BUILT_SOURCES += arg-nonnull.h +# The arg-nonnull.h that gets inserted into generated .h files is the same as +# build-aux/arg-nonnull.h, except that it has the copyright header cut off. +arg-nonnull.h: $(top_srcdir)/build-aux/arg-nonnull.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/GL_ARG_NONNULL/,$$p' \ + < $(top_srcdir)/build-aux/arg-nonnull.h \ + > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t + +ARG_NONNULL_H=arg-nonnull.h + +EXTRA_DIST += $(top_srcdir)/build-aux/arg-nonnull.h + +## end gnulib module arg-nonnull + +## begin gnulib module bitrotate + +libdiffutils_a_SOURCES += bitrotate.h + +## end gnulib module bitrotate + +## begin gnulib module btowc + + +EXTRA_DIST += btowc.c + +EXTRA_libdiffutils_a_SOURCES += btowc.c + +## end gnulib module btowc + +## begin gnulib module c++defs + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. + +BUILT_SOURCES += c++defs.h +# The c++defs.h that gets inserted into generated .h files is the same as +# build-aux/c++defs.h, except that it has the copyright header cut off. +c++defs.h: $(top_srcdir)/build-aux/c++defs.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/_GL_CXXDEFS/,$$p' \ + < $(top_srcdir)/build-aux/c++defs.h \ + > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += c++defs.h c++defs.h-t + +CXXDEFS_H=c++defs.h + +EXTRA_DIST += $(top_srcdir)/build-aux/c++defs.h + +## end gnulib module c++defs + +## begin gnulib module c-ctype + +libdiffutils_a_SOURCES += c-ctype.h c-ctype.c + +## end gnulib module c-ctype + +## begin gnulib module c-stack + +libdiffutils_a_SOURCES += c-stack.h c-stack.c + +## end gnulib module c-stack + +## begin gnulib module c-strcase + +libdiffutils_a_SOURCES += c-strcase.h c-strcasecmp.c c-strncasecmp.c + +## end gnulib module c-strcase + +## begin gnulib module configmake + +# Retrieve values of the variables through 'configure' followed by +# 'make', not directly through 'configure', so that a user who +# sets some of these variables consistently on the 'make' command +# line gets correct results. +# +# One advantage of this approach, compared to the classical +# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS, +# is that it protects against the use of undefined variables. +# If, say, $(libdir) is not set in the Makefile, LIBDIR is not +# defined by this module, and code using LIBDIR gives a +# compilation error. +# +# Another advantage is that 'make' output is shorter. +# +# Listed in the same order as the GNU makefile conventions. +# The Automake-defined pkg* macros are appended, in the order +# listed in the Automake 1.10a+ documentation. +configmake.h: Makefile + $(AM_V_GEN)rm -f $@-t && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#define PREFIX "$(prefix)"'; \ + echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ + echo '#define BINDIR "$(bindir)"'; \ + echo '#define SBINDIR "$(sbindir)"'; \ + echo '#define LIBEXECDIR "$(libexecdir)"'; \ + echo '#define DATAROOTDIR "$(datarootdir)"'; \ + echo '#define DATADIR "$(datadir)"'; \ + echo '#define SYSCONFDIR "$(sysconfdir)"'; \ + echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ + echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ + echo '#define INCLUDEDIR "$(includedir)"'; \ + echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ + echo '#define DOCDIR "$(docdir)"'; \ + echo '#define INFODIR "$(infodir)"'; \ + echo '#define HTMLDIR "$(htmldir)"'; \ + echo '#define DVIDIR "$(dvidir)"'; \ + echo '#define PDFDIR "$(pdfdir)"'; \ + echo '#define PSDIR "$(psdir)"'; \ + echo '#define LIBDIR "$(libdir)"'; \ + echo '#define LISPDIR "$(lispdir)"'; \ + echo '#define LOCALEDIR "$(localedir)"'; \ + echo '#define MANDIR "$(mandir)"'; \ + echo '#define MANEXT "$(manext)"'; \ + echo '#define PKGDATADIR "$(pkgdatadir)"'; \ + echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ + echo '#define PKGLIBDIR "$(pkglibdir)"'; \ + echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ + } | sed '/""/d' > $@-t && \ + if test -f $@ && cmp $@-t $@ > /dev/null; then \ + rm -f $@-t; \ + else \ + rm -f $@; mv $@-t $@; \ + fi + +BUILT_SOURCES += configmake.h +CLEANFILES += configmake.h configmake.h-t + +## end gnulib module configmake + +## begin gnulib module diffseq + +libdiffutils_a_SOURCES += diffseq.h + +## end gnulib module diffseq + +## begin gnulib module dirname + + +EXTRA_DIST += basename.c dirname.c stripslash.c + +EXTRA_libdiffutils_a_SOURCES += basename.c dirname.c stripslash.c + +## end gnulib module dirname + +## begin gnulib module dirname-lgpl + + +EXTRA_DIST += basename-lgpl.c dirname-lgpl.c dirname.h stripslash.c + +EXTRA_libdiffutils_a_SOURCES += basename-lgpl.c dirname-lgpl.c stripslash.c + +## end gnulib module dirname-lgpl + +## begin gnulib module do-release-commit-and-tag + + +EXTRA_DIST += $(top_srcdir)/build-aux/do-release-commit-and-tag + +## end gnulib module do-release-commit-and-tag + +## begin gnulib module dup2 + + +EXTRA_DIST += dup2.c + +EXTRA_libdiffutils_a_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. +errno.h: errno.in.h + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|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 $@ +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_libdiffutils_a_SOURCES += error.c + +## end gnulib module error + +## begin gnulib module exclude + + +EXTRA_DIST += exclude.c exclude.h + +EXTRA_libdiffutils_a_SOURCES += exclude.c + +## end gnulib module exclude + +## begin gnulib module exitfail + +libdiffutils_a_SOURCES += exitfail.c + +EXTRA_DIST += exitfail.h + +## end gnulib module exitfail + +## begin gnulib module fcntl + + +EXTRA_DIST += fcntl.c + +EXTRA_libdiffutils_a_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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ + -e 's|@''GNULIB_FCNTL''@|$(GNULIB_FCNTL)|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 file-type + + +EXTRA_DIST += file-type.c file-type.h + +EXTRA_libdiffutils_a_SOURCES += file-type.c + +## end gnulib module file-type + +## begin gnulib module fnmatch + +BUILT_SOURCES += $(FNMATCH_H) + +# We need the following in order to create <fnmatch.h> when the system +# doesn't have one that supports the required API. +fnmatch.h: fnmatch.in.h $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + < $(srcdir)/fnmatch.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t + +EXTRA_DIST += fnmatch.c fnmatch.in.h fnmatch_loop.c + +EXTRA_libdiffutils_a_SOURCES += fnmatch.c fnmatch_loop.c + +## end gnulib module fnmatch + +## begin gnulib module freopen + + +EXTRA_DIST += freopen.c + +EXTRA_libdiffutils_a_SOURCES += freopen.c + +## end gnulib module freopen + +## begin gnulib module freopen-safer + + +EXTRA_DIST += freopen-safer.c stdio--.h stdio-safer.h + +EXTRA_libdiffutils_a_SOURCES += freopen-safer.c + +## end gnulib module freopen-safer + +## begin gnulib module gendocs + + +EXTRA_DIST += $(top_srcdir)/build-aux/gendocs.sh + +## end gnulib module gendocs + +## begin gnulib module getdtablesize + + +EXTRA_DIST += getdtablesize.c + +EXTRA_libdiffutils_a_SOURCES += getdtablesize.c + +## end gnulib module getdtablesize + +## begin gnulib module getopt-posix + +BUILT_SOURCES += $(GETOPT_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 $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -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|@''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 $@ +MOSTLYCLEANFILES += getopt.h getopt.h-t + +EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h + +EXTRA_libdiffutils_a_SOURCES += getopt.c getopt1.c + +## end gnulib module getopt-posix + +## begin gnulib module gettext + +# This is for those projects which use "gettextize --intl" to put a source-code +# copy of libintl into their package. In such projects, every Makefile.am needs +# -I$(top_builddir)/intl, so that <libintl.h> can be found in this directory. +# For the Makefile.ams in other directories it is the maintainer's +# responsibility; for the one from gnulib we do it here. +# This option has no effect when the user disables NLS (because then the intl +# directory contains no libintl.h file) or when the project does not use +# "gettextize --intl". +#AM_CPPFLAGS += -I$(top_builddir)/intl + +EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath + +## end gnulib module gettext + +## begin gnulib module gettext-h + +libdiffutils_a_SOURCES += gettext.h + +## end gnulib module gettext-h + +## begin gnulib module gettime + + +EXTRA_DIST += gettime.c + +EXTRA_libdiffutils_a_SOURCES += gettime.c + +## end gnulib module gettime + +## begin gnulib module gettimeofday + + +EXTRA_DIST += gettimeofday.c + +EXTRA_libdiffutils_a_SOURCES += gettimeofday.c + +## end gnulib module gettimeofday + +## begin gnulib module git-version-gen + + +EXTRA_DIST += $(top_srcdir)/build-aux/git-version-gen + +## end gnulib module git-version-gen + +## begin gnulib module gitlog-to-changelog + + +EXTRA_DIST += $(top_srcdir)/build-aux/gitlog-to-changelog + +## end gnulib module gitlog-to-changelog + +## begin gnulib module gnu-make + +##Sample usage of gnu-make module: +#if GNU_MAKE +# [nicer features that work only with GNU Make] +#else +# [fallback features that work in any 'make' implementation; see +# http://www.opengroup.org/susv3/utilities/make.html +# for the 2004 POSIX specification] +#endif + +## end gnulib module gnu-make + +## begin gnulib module gnu-web-doc-update + + +EXTRA_DIST += $(top_srcdir)/build-aux/gnu-web-doc-update + +## end gnulib module gnu-web-doc-update + +## begin gnulib module gnumakefile + +distclean-local: clean-GNUmakefile +clean-GNUmakefile: + test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || : + +EXTRA_DIST += $(top_srcdir)/GNUmakefile + +## end gnulib module gnumakefile + +## begin gnulib module gnupload + + +EXTRA_DIST += $(top_srcdir)/build-aux/gnupload + +## end gnulib module gnupload + +## begin gnulib module gperf + +GPERF = gperf + +## end gnulib module gperf + +## begin gnulib module hard-locale + + +EXTRA_DIST += hard-locale.c hard-locale.h + +EXTRA_libdiffutils_a_SOURCES += hard-locale.c + +## end gnulib module hard-locale + +## begin gnulib module hash + + +EXTRA_DIST += hash.c hash.h + +EXTRA_libdiffutils_a_SOURCES += hash.c + +## end gnulib module hash + +## begin gnulib module havelib + + +EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath + +## end gnulib module havelib + +## begin gnulib module iconv-h + +BUILT_SOURCES += $(ICONV_H) + +# We need the following in order to create <iconv.h> when the system +# doesn't have one that works with the given compiler. +iconv.h: iconv.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_ICONV_H''@|$(NEXT_ICONV_H)|g' \ + -e 's|@''ICONV_CONST''@|$(ICONV_CONST)|g' \ + -e 's|@''REPLACE_ICONV''@|$(REPLACE_ICONV)|g' \ + -e 's|@''REPLACE_ICONV_OPEN''@|$(REPLACE_ICONV_OPEN)|g' \ + -e 's|@''REPLACE_ICONV_UTF''@|$(REPLACE_ICONV_UTF)|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)/iconv.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += iconv.h iconv.h-t + +EXTRA_DIST += iconv.in.h + +## end gnulib module iconv-h + +## begin gnulib module iconv_open + +iconv_open-aix.h: iconv_open-aix.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-aix.gperf > $(srcdir)/iconv_open-aix.h-t + mv $(srcdir)/iconv_open-aix.h-t $(srcdir)/iconv_open-aix.h +iconv_open-hpux.h: iconv_open-hpux.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-hpux.gperf > $(srcdir)/iconv_open-hpux.h-t + mv $(srcdir)/iconv_open-hpux.h-t $(srcdir)/iconv_open-hpux.h +iconv_open-irix.h: iconv_open-irix.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-irix.gperf > $(srcdir)/iconv_open-irix.h-t + mv $(srcdir)/iconv_open-irix.h-t $(srcdir)/iconv_open-irix.h +iconv_open-osf.h: iconv_open-osf.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-osf.gperf > $(srcdir)/iconv_open-osf.h-t + mv $(srcdir)/iconv_open-osf.h-t $(srcdir)/iconv_open-osf.h +iconv_open-solaris.h: iconv_open-solaris.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-solaris.gperf > $(srcdir)/iconv_open-solaris.h-t + mv $(srcdir)/iconv_open-solaris.h-t $(srcdir)/iconv_open-solaris.h +BUILT_SOURCES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h +MOSTLYCLEANFILES += iconv_open-aix.h-t iconv_open-hpux.h-t iconv_open-irix.h-t iconv_open-osf.h-t iconv_open-solaris.h-t +MAINTAINERCLEANFILES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h +EXTRA_DIST += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h + +EXTRA_DIST += iconv_open-aix.gperf iconv_open-hpux.gperf iconv_open-irix.gperf iconv_open-osf.gperf iconv_open-solaris.gperf iconv_open.c + +EXTRA_libdiffutils_a_SOURCES += iconv_open.c + +## end gnulib module iconv_open + +## begin gnulib module ignore-value + +libdiffutils_a_SOURCES += ignore-value.h + +## end gnulib module ignore-value + +## begin gnulib module intprops + + +EXTRA_DIST += intprops.h + +## end gnulib module intprops + +## begin gnulib module inttostr + + +EXTRA_DIST += imaxtostr.c inttostr.c inttostr.h offtostr.c uinttostr.c umaxtostr.c + +EXTRA_libdiffutils_a_SOURCES += imaxtostr.c inttostr.c offtostr.c uinttostr.c umaxtostr.c + +## end gnulib module inttostr + +## begin gnulib module inttypes + +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 $(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|@''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/@''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 '/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 + +## 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 $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -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|@''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_ERA''@|$(HAVE_LANGINFO_ERA)|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 localcharset + +libdiffutils_a_SOURCES += localcharset.h localcharset.c + +# We need the following in order to install a simple file in $(libdir) +# which is shared with other installed packages. We use a list of referencing +# packages so that "make uninstall" will remove the file if and only if it +# is not used by another installed package. +# On systems with glibc-2.1 or newer, the file is redundant, therefore we +# avoid installing it. + +all-local: charset.alias ref-add.sed ref-del.sed + +charset_alias = $(DESTDIR)$(libdir)/charset.alias +charset_tmp = $(DESTDIR)$(libdir)/charset.tmp +install-exec-local: install-exec-localcharset +install-exec-localcharset: all-local + if test $(GLIBC21) = no; then \ + case '$(host_os)' in \ + darwin[56]*) \ + need_charset_alias=true ;; \ + darwin* | cygwin* | mingw* | pw32* | cegcc*) \ + need_charset_alias=false ;; \ + *) \ + need_charset_alias=true ;; \ + esac ; \ + else \ + need_charset_alias=false ; \ + fi ; \ + if $$need_charset_alias; then \ + $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ + fi ; \ + if test -f $(charset_alias); then \ + sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + else \ + if $$need_charset_alias; then \ + sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + fi ; \ + fi + +uninstall-local: uninstall-localcharset +uninstall-localcharset: all-local + if test -f $(charset_alias); then \ + sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ + if grep '^# Packages using this file: $$' $(charset_tmp) \ + > /dev/null; then \ + rm -f $(charset_alias); \ + else \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ + fi; \ + rm -f $(charset_tmp); \ + fi + +charset.alias: config.charset + $(AM_V_GEN)rm -f t-$@ $@ && \ + $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \ + mv t-$@ $@ + +SUFFIXES += .sed .sin +.sin.sed: + $(AM_V_GEN)rm -f t-$@ $@ && \ + sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \ + mv t-$@ $@ + +CLEANFILES += charset.alias ref-add.sed ref-del.sed + +EXTRA_DIST += config.charset ref-add.sin ref-del.sin + +## end gnulib module localcharset + +## begin gnulib module lstat + + +EXTRA_DIST += lstat.c + +EXTRA_libdiffutils_a_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 + + +EXTRA_DIST += malloc.c + +EXTRA_libdiffutils_a_SOURCES += malloc.c + +## end gnulib module malloc + +## begin gnulib module malloc-posix + + +EXTRA_DIST += malloc.c + +EXTRA_libdiffutils_a_SOURCES += malloc.c + +## end gnulib module malloc-posix + +## begin gnulib module malloca + +libdiffutils_a_SOURCES += malloca.c + +EXTRA_DIST += malloca.h malloca.valgrind + +## end gnulib module malloca + +## begin gnulib module mbchar + +libdiffutils_a_SOURCES += mbchar.c + +EXTRA_DIST += mbchar.h + +## end gnulib module mbchar + +## begin gnulib module mbiter + +libdiffutils_a_SOURCES += mbiter.h + +## end gnulib module mbiter + +## begin gnulib module mbrlen + + +EXTRA_DIST += mbrlen.c + +EXTRA_libdiffutils_a_SOURCES += mbrlen.c + +## end gnulib module mbrlen + +## begin gnulib module mbrtowc + + +EXTRA_DIST += mbrtowc.c + +EXTRA_libdiffutils_a_SOURCES += mbrtowc.c + +## end gnulib module mbrtowc + +## begin gnulib module mbscasecmp + +libdiffutils_a_SOURCES += mbscasecmp.c + +## end gnulib module mbscasecmp + +## begin gnulib module mbsinit + + +EXTRA_DIST += mbsinit.c + +EXTRA_libdiffutils_a_SOURCES += mbsinit.c + +## end gnulib module mbsinit + +## begin gnulib module mbslen + +libdiffutils_a_SOURCES += mbslen.c + +## end gnulib module mbslen + +## begin gnulib module mbsrtowcs + + +EXTRA_DIST += mbsrtowcs-state.c mbsrtowcs.c + +EXTRA_libdiffutils_a_SOURCES += mbsrtowcs-state.c mbsrtowcs.c + +## end gnulib module mbsrtowcs + +## begin gnulib module mbsstr + +libdiffutils_a_SOURCES += mbsstr.c + +EXTRA_DIST += str-kmp.h + +## end gnulib module mbsstr + +## begin gnulib module mbuiter + +libdiffutils_a_SOURCES += mbuiter.h + +## end gnulib module mbuiter + +## begin gnulib module memchr + + +EXTRA_DIST += memchr.c memchr.valgrind + +EXTRA_libdiffutils_a_SOURCES += memchr.c + +## end gnulib module memchr + +## begin gnulib module mkstemp + + +EXTRA_DIST += mkstemp.c + +EXTRA_libdiffutils_a_SOURCES += mkstemp.c + +## end gnulib module mkstemp + +## begin gnulib module mktime + + +EXTRA_DIST += mktime-internal.h mktime.c + +EXTRA_libdiffutils_a_SOURCES += mktime.c + +## end gnulib module mktime + +## begin gnulib module nl_langinfo + + +EXTRA_DIST += nl_langinfo.c + +EXTRA_libdiffutils_a_SOURCES += nl_langinfo.c + +## end gnulib module nl_langinfo + +## begin gnulib module open + + +EXTRA_DIST += open.c + +EXTRA_libdiffutils_a_SOURCES += open.c + +## end gnulib module open + +## begin gnulib module progname + +libdiffutils_a_SOURCES += progname.h progname.c + +## end gnulib module progname + +## begin gnulib module propername + +libdiffutils_a_SOURCES += propername.h propername.c + +## end gnulib module propername + +## begin gnulib module quote + + +EXTRA_DIST += quote.c quote.h + +EXTRA_libdiffutils_a_SOURCES += quote.c + +## end gnulib module quote + +## begin gnulib module quotearg + + +EXTRA_DIST += quotearg.c quotearg.h + +EXTRA_libdiffutils_a_SOURCES += quotearg.c + +## end gnulib module quotearg + +## begin gnulib module regex + + +EXTRA_DIST += regcomp.c regex.c regex.h regex_internal.c regex_internal.h regexec.c + +EXTRA_libdiffutils_a_SOURCES += regcomp.c regex.c regex_internal.c regexec.c + +## end gnulib module regex + +## begin gnulib module sh-quote + +libdiffutils_a_SOURCES += sh-quote.h sh-quote.c + +## end gnulib module sh-quote + +## begin gnulib module sigaction + + +EXTRA_DIST += sig-handler.h sigaction.c + +EXTRA_libdiffutils_a_SOURCES += sigaction.c + +## end gnulib module sigaction + +## begin gnulib module signal + +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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|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_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 '/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 + +## begin gnulib module sigprocmask + + +EXTRA_DIST += sigprocmask.c + +EXTRA_libdiffutils_a_SOURCES += sigprocmask.c + +## end gnulib module sigprocmask + +## begin gnulib module stat + + +EXTRA_DIST += stat.c + +EXTRA_libdiffutils_a_SOURCES += 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 + + +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. +stdarg.h: stdarg.in.h + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ + < $(srcdir)/stdarg.in.h; \ + } > $@-t && \ + mv $@-t $@ +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. +stdbool.h: stdbool.in.h + $(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 $@ +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. +stddef.h: stddef.in.h + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ + -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ + -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ + < $(srcdir)/stddef.in.h; \ + } > $@-t && \ + mv $@-t $@ +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. +stdint.h: stdint.in.h + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -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|@''NEXT_STDINT_H''@|$(NEXT_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_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' \ + < $(srcdir)/stdint.in.h; \ + } > $@-t && \ + mv $@-t $@ +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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|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_FFLUSH''@|$(GNULIB_FFLUSH)|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_FREOPEN''@|$(GNULIB_FREOPEN)|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_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_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_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \ + -e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|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_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_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_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_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_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 '/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-write.c stdio.in.h + +EXTRA_libdiffutils_a_SOURCES += stdio-write.c + +## 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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|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_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_PTSNAME''@|$(GNULIB_PTSNAME)|g' \ + -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \ + -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \ + -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \ + -e 's|@''GNULIB_REALPATH''@|$(GNULIB_REALPATH)|g' \ + -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|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_UNLOCKPT''@|$(GNULIB_UNLOCKPT)|g' \ + -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|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_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|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_PTSNAME''@|$(HAVE_PTSNAME)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \ + -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|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_UNSETENV''@|$(HAVE_UNSETENV)|g' \ + -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|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 '/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)/stdlib.in.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_libdiffutils_a_SOURCES += strcasecmp.c strncasecmp.c + +## end gnulib module strcase + +## begin gnulib module streq + + +EXTRA_DIST += streq.h + +## end gnulib module streq + +## begin gnulib module strerror + + +EXTRA_DIST += strerror.c + +EXTRA_libdiffutils_a_SOURCES += strerror.c + +## end gnulib module strerror + +## begin gnulib module strftime + + +EXTRA_DIST += strftime.c strftime.h + +EXTRA_libdiffutils_a_SOURCES += strftime.c + +## end gnulib module strftime + +## begin gnulib module striconv + +libdiffutils_a_SOURCES += striconv.h striconv.c +if GL_COND_LIBTOOL +endif + +## end gnulib module striconv + +## 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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|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_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \ + -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \ + < $(srcdir)/string.in.h | \ + sed -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_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ + -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|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_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|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 $(WARN_ON_USE_H) $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ + -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ + -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ + -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 strndup + + +EXTRA_DIST += strndup.c + +EXTRA_libdiffutils_a_SOURCES += strndup.c + +## end gnulib module strndup + +## begin gnulib module strnlen + + +EXTRA_DIST += strnlen.c + +EXTRA_libdiffutils_a_SOURCES += strnlen.c + +## end gnulib module strnlen + +## begin gnulib module strnlen1 + +libdiffutils_a_SOURCES += strnlen1.h strnlen1.c + +## end gnulib module strnlen1 + +## begin gnulib module strptime + + +EXTRA_DIST += strptime.c + +EXTRA_libdiffutils_a_SOURCES += strptime.c + +## end gnulib module strptime + +## begin gnulib module strtoimax + + +EXTRA_DIST += strtoimax.c + +EXTRA_libdiffutils_a_SOURCES += strtoimax.c + +## end gnulib module strtoimax + +## begin gnulib module strtol + + +EXTRA_DIST += strtol.c + +EXTRA_libdiffutils_a_SOURCES += strtol.c + +## end gnulib module strtol + +## begin gnulib module strtoll + + +EXTRA_DIST += strtoll.c + +EXTRA_libdiffutils_a_SOURCES += strtoll.c + +## end gnulib module strtoll + +## begin gnulib module strtoul + + +EXTRA_DIST += strtoul.c + +EXTRA_libdiffutils_a_SOURCES += strtoul.c + +## end gnulib module strtoul + +## begin gnulib module strtoull + + +EXTRA_DIST += strtoull.c + +EXTRA_libdiffutils_a_SOURCES += strtoull.c + +## end gnulib module strtoull + +## begin gnulib module strtoumax + + +EXTRA_DIST += strtoumax.c + +EXTRA_libdiffutils_a_SOURCES += strtoumax.c + +## end gnulib module strtoumax + +## 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 $(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|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ + -e 's|@''GNULIB_FCHMODAT''@|$(GNULIB_FCHMODAT)|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|@''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 $(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/@''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|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ + -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/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 '/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_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 + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ + < $(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 + + +EXTRA_DIST += tempname.c tempname.h + +EXTRA_libdiffutils_a_SOURCES += tempname.c + +## end gnulib module tempname + +## 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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ + -e 's|@''GNULIB_MKTIME''@|$(GNULIB_MKTIME)|g' \ + -e 's|@''GNULIB_NANOSLEEP''@|$(GNULIB_NANOSLEEP)|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|@''HAVE_LOCALTIME_R''@|$(HAVE_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|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ + -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ + -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ + -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|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 '/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_libdiffutils_a_SOURCES += time_r.c + +## end gnulib module time_r + +## begin gnulib module timegm + + +EXTRA_DIST += mktime-internal.h timegm.c + +EXTRA_libdiffutils_a_SOURCES += timegm.c + +## end gnulib module timegm + +## begin gnulib module timespec + + +EXTRA_DIST += timespec.h + +## end gnulib module timespec + +## begin gnulib module trim + +libdiffutils_a_SOURCES += trim.c + +EXTRA_DIST += trim.h + +## end gnulib module trim + +## begin gnulib module unistd + +BUILT_SOURCES += unistd.h + +# 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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -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|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \ + -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|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_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_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|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_PIPE2''@|$(GNULIB_PIPE2)|g' \ + -e 's|@''GNULIB_PREAD''@|$(GNULIB_PREAD)|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_SLEEP''@|$(GNULIB_SLEEP)|g' \ + -e 's|@''GNULIB_SYMLINK''@|$(GNULIB_SYMLINK)|g' \ + -e 's|@''GNULIB_SYMLINKAT''@|$(GNULIB_SYMLINKAT)|g' \ + -e 's|@''GNULIB_TTYNAME_R''@|$(GNULIB_TTYNAME_R)|g' \ + -e 's|@''GNULIB_UNISTD_H_GETOPT''@|$(GNULIB_UNISTD_H_GETOPT)|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_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|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_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|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_PIPE2''@|$(HAVE_PIPE2)|g' \ + -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|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_TTYNAME_R''@|$(HAVE_TTYNAME_R)|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_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_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + -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_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|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_READLINK''@|$(REPLACE_READLINK)|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_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 unitypes + + +EXTRA_DIST += unitypes.h + +## end gnulib module unitypes + +## begin gnulib module uniwidth/base + + +EXTRA_DIST += localcharset.h uniwidth.h + +## end gnulib module uniwidth/base + +## begin gnulib module uniwidth/width + +libdiffutils_a_SOURCES += uniwidth/width.c + +EXTRA_DIST += uniwidth/cjk.h + +## end gnulib module uniwidth/width + +## begin gnulib module unlocked-io + + +EXTRA_DIST += unlocked-io.h + +## end gnulib module unlocked-io + +## begin gnulib module update-copyright + + +EXTRA_DIST += $(top_srcdir)/build-aux/update-copyright + +## end gnulib module update-copyright + +## 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 vc-list-files + + +EXTRA_DIST += $(top_srcdir)/build-aux/vc-list-files + +## end gnulib module vc-list-files + +## begin gnulib module verify + +libdiffutils_a_SOURCES += verify.h + +## end gnulib module verify + +## begin gnulib module version-etc + +libdiffutils_a_SOURCES += version-etc.h version-etc.c + +## end gnulib module version-etc + +## begin gnulib module version-etc-fsf + +libdiffutils_a_SOURCES += version-etc-fsf.c + +## end gnulib module version-etc-fsf + +## begin gnulib module warn-on-use + +BUILT_SOURCES += warn-on-use.h +# The warn-on-use.h that gets inserted into generated .h files is the same as +# build-aux/warn-on-use.h, except that it has the copyright header cut off. +warn-on-use.h: $(top_srcdir)/build-aux/warn-on-use.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/^.ifndef/,$$p' \ + < $(top_srcdir)/build-aux/warn-on-use.h \ + > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t + +WARN_ON_USE_H=warn-on-use.h + +EXTRA_DIST += $(top_srcdir)/build-aux/warn-on-use.h + +## end gnulib module warn-on-use + +## 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 $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|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|@''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_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + -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 '/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)/wchar.in.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_libdiffutils_a_SOURCES += wcrtomb.c + +## end gnulib module wcrtomb + +## begin gnulib module wctype + +BUILT_SOURCES += wctype.h + +# 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 $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -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|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ + -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ + -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ + -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/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 + +## begin gnulib module wcwidth + + +EXTRA_DIST += wcwidth.c + +EXTRA_libdiffutils_a_SOURCES += wcwidth.c + +## end gnulib module wcwidth + +## begin gnulib module xalloc + + +EXTRA_DIST += xalloc.h xmalloc.c + +EXTRA_libdiffutils_a_SOURCES += xmalloc.c + +## end gnulib module xalloc + +## begin gnulib module xalloc-die + +libdiffutils_a_SOURCES += xalloc-die.c + +## end gnulib module xalloc-die + +## begin gnulib module xfreopen + +libdiffutils_a_SOURCES += xfreopen.c xfreopen.h + +## end gnulib module xfreopen + +## begin gnulib module xstriconv + +libdiffutils_a_SOURCES += xstriconv.h xstriconv.c + +## end gnulib module xstriconv + +## begin gnulib module xstrndup + +libdiffutils_a_SOURCES += xstrndup.h xstrndup.c + +## end gnulib module xstrndup + +## begin gnulib module xstrtol + + +EXTRA_DIST += xstrtol-error.c xstrtol.c xstrtol.h xstrtoul.c + +EXTRA_libdiffutils_a_SOURCES += xstrtol-error.c xstrtol.c xstrtoul.c + +## end gnulib module xstrtol + +## begin gnulib module xstrtoumax + +libdiffutils_a_SOURCES += xstrtoumax.c + +## end gnulib module xstrtoumax + + +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/lib/hard-locale.c b/lib/hard-locale.c new file mode 100644 index 0000000..c868ac0 --- /dev/null +++ b/lib/hard-locale.c @@ -0,0 +1,70 @@ +/* hard-locale.c -- Determine whether a locale is hard. + + Copyright (C) 1997, 1998, 1999, 2002, 2003, 2004, 2006, 2007, 2009, 2010 + Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "hard-locale.h" + +#include <locale.h> +#include <stdlib.h> +#include <string.h> + +#ifdef __GLIBC__ +# define GLIBC_VERSION __GLIBC__ +#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/lib/hard-locale.h b/lib/hard-locale.h new file mode 100644 index 0000000..a1ce5bf --- /dev/null +++ b/lib/hard-locale.h @@ -0,0 +1,25 @@ +/* Determine whether a locale is hard. + + Copyright (C) 1999, 2003, 2004, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 HARD_LOCALE_H_ +# define HARD_LOCALE_H_ 1 + +# include <stdbool.h> + +bool hard_locale (int); + +#endif /* HARD_LOCALE_H_ */ diff --git a/lib/hash.c b/lib/hash.c new file mode 100644 index 0000000..f9abb9f --- /dev/null +++ b/lib/hash.c @@ -0,0 +1,1194 @@ +/* hash - hashing table processing. + + Copyright (C) 1998-2004, 2006-2007, 2009-2010 Free Software Foundation, Inc. + + Written by Jim Meyering, 1992. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* A generic hash table package. */ + +/* Define USE_OBSTACK to 1 if you want the allocator to use obstacks instead + of malloc. If you change USE_OBSTACK, you have to recompile! */ + +#include <config.h> + +#include "hash.h" + +#include "bitrotate.h" +#include "xalloc.h" + +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> + +#if USE_OBSTACK +# include "obstack.h" +# ifndef obstack_chunk_alloc +# define obstack_chunk_alloc malloc +# endif +# ifndef obstack_chunk_free +# define obstack_chunk_free free +# endif +#endif + +struct hash_entry + { + void *data; + struct hash_entry *next; + }; + +struct hash_table + { + /* The array of buckets starts at BUCKET and extends to BUCKET_LIMIT-1, + for a possibility of N_BUCKETS. Among those, N_BUCKETS_USED buckets + are not empty, there are N_ENTRIES active entries in the table. */ + struct hash_entry *bucket; + struct hash_entry const *bucket_limit; + size_t n_buckets; + size_t n_buckets_used; + size_t n_entries; + + /* Tuning arguments, kept in a physically separate structure. */ + const Hash_tuning *tuning; + + /* Three functions are given to `hash_initialize', see the documentation + block for this function. In a word, HASHER randomizes a user entry + into a number up from 0 up to some maximum minus 1; COMPARATOR returns + true if two user entries compare equally; and DATA_FREER is the cleanup + function for a user entry. */ + Hash_hasher hasher; + Hash_comparator comparator; + Hash_data_freer data_freer; + + /* A linked list of freed struct hash_entry structs. */ + struct hash_entry *free_entry_list; + +#if USE_OBSTACK + /* Whenever obstacks are used, it is possible to allocate all overflowed + entries into a single stack, so they all can be freed in a single + operation. It is not clear if the speedup is worth the trouble. */ + struct obstack entry_stack; +#endif + }; + +/* A hash table contains many internal entries, each holding a pointer to + some user-provided data (also called a user entry). An entry indistinctly + refers to both the internal entry and its associated user entry. A user + entry contents may be hashed by a randomization function (the hashing + function, or just `hasher' for short) into a number (or `slot') between 0 + and the current table size. At each slot position in the hash table, + starts a linked chain of entries for which the user data all hash to this + slot. A bucket is the collection of all entries hashing to the same slot. + + A good `hasher' function will distribute entries rather evenly in buckets. + In the ideal case, the length of each bucket is roughly the number of + entries divided by the table size. Finding the slot for a data is usually + done in constant time by the `hasher', and the later finding of a precise + entry is linear in time with the size of the bucket. Consequently, a + larger hash table size (that is, a larger number of buckets) is prone to + yielding shorter chains, *given* the `hasher' function behaves properly. + + Long buckets slow down the lookup algorithm. One might use big hash table + sizes in hope to reduce the average length of buckets, but this might + become inordinate, as unused slots in the hash table take some space. The + best bet is to make sure you are using a good `hasher' function (beware + that those are not that easy to write! :-), and to use a table size + larger than the actual number of entries. */ + +/* If an insertion makes the ratio of nonempty buckets to table size larger + than the growth threshold (a number between 0.0 and 1.0), then increase + the table size by multiplying by the growth factor (a number greater than + 1.0). The growth threshold defaults to 0.8, and the growth factor + defaults to 1.414, meaning that the table will have doubled its size + every second time 80% of the buckets get used. */ +#define DEFAULT_GROWTH_THRESHOLD 0.8 +#define DEFAULT_GROWTH_FACTOR 1.414 + +/* If a deletion empties a bucket and causes the ratio of used buckets to + table size to become smaller than the shrink threshold (a number between + 0.0 and 1.0), then shrink the table by multiplying by the shrink factor (a + number greater than the shrink threshold but smaller than 1.0). The shrink + threshold and factor default to 0.0 and 1.0, meaning that the table never + shrinks. */ +#define DEFAULT_SHRINK_THRESHOLD 0.0 +#define DEFAULT_SHRINK_FACTOR 1.0 + +/* Use this to initialize or reset a TUNING structure to + some sensible values. */ +static const Hash_tuning default_tuning = + { + DEFAULT_SHRINK_THRESHOLD, + DEFAULT_SHRINK_FACTOR, + DEFAULT_GROWTH_THRESHOLD, + DEFAULT_GROWTH_FACTOR, + false + }; + +/* Information and lookup. */ + +/* The following few functions provide information about the overall hash + table organization: the number of entries, number of buckets and maximum + length of buckets. */ + +/* Return the number of buckets in the hash table. The table size, the total + number of buckets (used plus unused), or the maximum number of slots, are + the same quantity. */ + +size_t +hash_get_n_buckets (const Hash_table *table) +{ + return table->n_buckets; +} + +/* Return the number of slots in use (non-empty buckets). */ + +size_t +hash_get_n_buckets_used (const Hash_table *table) +{ + return table->n_buckets_used; +} + +/* Return the number of active entries. */ + +size_t +hash_get_n_entries (const Hash_table *table) +{ + return table->n_entries; +} + +/* Return the length of the longest chain (bucket). */ + +size_t +hash_get_max_bucket_length (const Hash_table *table) +{ + struct hash_entry const *bucket; + size_t max_bucket_length = 0; + + for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) + { + if (bucket->data) + { + struct hash_entry const *cursor = bucket; + size_t bucket_length = 1; + + while (cursor = cursor->next, cursor) + bucket_length++; + + if (bucket_length > max_bucket_length) + max_bucket_length = bucket_length; + } + } + + return max_bucket_length; +} + +/* Do a mild validation of a hash table, by traversing it and checking two + statistics. */ + +bool +hash_table_ok (const Hash_table *table) +{ + struct hash_entry const *bucket; + size_t n_buckets_used = 0; + size_t n_entries = 0; + + for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) + { + if (bucket->data) + { + struct hash_entry const *cursor = bucket; + + /* Count bucket head. */ + n_buckets_used++; + n_entries++; + + /* Count bucket overflow. */ + while (cursor = cursor->next, cursor) + n_entries++; + } + } + + if (n_buckets_used == table->n_buckets_used && n_entries == table->n_entries) + return true; + + return false; +} + +void +hash_print_statistics (const Hash_table *table, FILE *stream) +{ + size_t n_entries = hash_get_n_entries (table); + size_t n_buckets = hash_get_n_buckets (table); + size_t n_buckets_used = hash_get_n_buckets_used (table); + size_t max_bucket_length = hash_get_max_bucket_length (table); + + fprintf (stream, "# entries: %lu\n", (unsigned long int) n_entries); + fprintf (stream, "# buckets: %lu\n", (unsigned long int) n_buckets); + fprintf (stream, "# buckets used: %lu (%.2f%%)\n", + (unsigned long int) n_buckets_used, + (100.0 * n_buckets_used) / n_buckets); + fprintf (stream, "max bucket length: %lu\n", + (unsigned long int) max_bucket_length); +} + +/* If ENTRY matches an entry already in the hash table, return the + entry from the table. Otherwise, return NULL. */ + +void * +hash_lookup (const Hash_table *table, const void *entry) +{ + struct hash_entry const *bucket + = table->bucket + table->hasher (entry, table->n_buckets); + struct hash_entry const *cursor; + + if (! (bucket < table->bucket_limit)) + abort (); + + if (bucket->data == NULL) + return NULL; + + for (cursor = bucket; cursor; cursor = cursor->next) + if (entry == cursor->data || table->comparator (entry, cursor->data)) + return cursor->data; + + return NULL; +} + +/* Walking. */ + +/* The functions in this page traverse the hash table and process the + contained entries. For the traversal to work properly, the hash table + should not be resized nor modified while any particular entry is being + processed. In particular, entries should not be added, and an entry + may be removed only if there is no shrink threshold and the entry being + removed has already been passed to hash_get_next. */ + +/* Return the first data in the table, or NULL if the table is empty. */ + +void * +hash_get_first (const Hash_table *table) +{ + struct hash_entry const *bucket; + + if (table->n_entries == 0) + return NULL; + + for (bucket = table->bucket; ; bucket++) + if (! (bucket < table->bucket_limit)) + abort (); + else if (bucket->data) + return bucket->data; +} + +/* Return the user data for the entry following ENTRY, where ENTRY has been + returned by a previous call to either `hash_get_first' or `hash_get_next'. + Return NULL if there are no more entries. */ + +void * +hash_get_next (const Hash_table *table, const void *entry) +{ + struct hash_entry const *bucket + = table->bucket + table->hasher (entry, table->n_buckets); + struct hash_entry const *cursor; + + if (! (bucket < table->bucket_limit)) + abort (); + + /* Find next entry in the same bucket. */ + for (cursor = bucket; cursor; cursor = cursor->next) + if (cursor->data == entry && cursor->next) + return cursor->next->data; + + /* Find first entry in any subsequent bucket. */ + while (++bucket < table->bucket_limit) + if (bucket->data) + return bucket->data; + + /* None found. */ + return NULL; +} + +/* Fill BUFFER with pointers to active user entries in the hash table, then + return the number of pointers copied. Do not copy more than BUFFER_SIZE + pointers. */ + +size_t +hash_get_entries (const Hash_table *table, void **buffer, + size_t buffer_size) +{ + size_t counter = 0; + struct hash_entry const *bucket; + struct hash_entry const *cursor; + + for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) + { + if (bucket->data) + { + for (cursor = bucket; cursor; cursor = cursor->next) + { + if (counter >= buffer_size) + return counter; + buffer[counter++] = cursor->data; + } + } + } + + return counter; +} + +/* Call a PROCESSOR function for each entry of a hash table, and return the + number of entries for which the processor function returned success. A + pointer to some PROCESSOR_DATA which will be made available to each call to + the processor function. The PROCESSOR accepts two arguments: the first is + the user entry being walked into, the second is the value of PROCESSOR_DATA + as received. The walking continue for as long as the PROCESSOR function + returns nonzero. When it returns zero, the walking is interrupted. */ + +size_t +hash_do_for_each (const Hash_table *table, Hash_processor processor, + void *processor_data) +{ + size_t counter = 0; + struct hash_entry const *bucket; + struct hash_entry const *cursor; + + for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) + { + if (bucket->data) + { + for (cursor = bucket; cursor; cursor = cursor->next) + { + if (! processor (cursor->data, processor_data)) + return counter; + counter++; + } + } + } + + return counter; +} + +/* Allocation and clean-up. */ + +/* Return a hash index for a NUL-terminated STRING between 0 and N_BUCKETS-1. + This is a convenience routine for constructing other hashing functions. */ + +#if USE_DIFF_HASH + +/* About hashings, Paul Eggert writes to me (FP), on 1994-01-01: "Please see + B. J. McKenzie, R. Harries & T. Bell, Selecting a hashing algorithm, + Software--practice & experience 20, 2 (Feb 1990), 209-224. Good hash + algorithms tend to be domain-specific, so what's good for [diffutils'] io.c + may not be good for your application." */ + +size_t +hash_string (const char *string, size_t n_buckets) +{ +# define HASH_ONE_CHAR(Value, Byte) \ + ((Byte) + rotl_sz (Value, 7)) + + size_t value = 0; + unsigned char ch; + + for (; (ch = *string); string++) + value = HASH_ONE_CHAR (value, ch); + return value % n_buckets; + +# undef HASH_ONE_CHAR +} + +#else /* not USE_DIFF_HASH */ + +/* This one comes from `recode', and performs a bit better than the above as + per a few experiments. It is inspired from a hashing routine found in the + very old Cyber `snoop', itself written in typical Greg Mansfield style. + (By the way, what happened to this excellent man? Is he still alive?) */ + +size_t +hash_string (const char *string, size_t n_buckets) +{ + size_t value = 0; + unsigned char ch; + + for (; (ch = *string); string++) + value = (value * 31 + ch) % n_buckets; + return value; +} + +#endif /* not USE_DIFF_HASH */ + +/* Return true if CANDIDATE is a prime number. CANDIDATE should be an odd + number at least equal to 11. */ + +static bool +is_prime (size_t candidate) +{ + size_t divisor = 3; + size_t square = divisor * divisor; + + while (square < candidate && (candidate % divisor)) + { + divisor++; + square += 4 * divisor; + divisor++; + } + + return (candidate % divisor ? true : false); +} + +/* Round a given CANDIDATE number up to the nearest prime, and return that + prime. Primes lower than 10 are merely skipped. */ + +static size_t +next_prime (size_t candidate) +{ + /* Skip small primes. */ + if (candidate < 10) + candidate = 10; + + /* Make it definitely odd. */ + candidate |= 1; + + while (SIZE_MAX != candidate && !is_prime (candidate)) + candidate += 2; + + return candidate; +} + +void +hash_reset_tuning (Hash_tuning *tuning) +{ + *tuning = default_tuning; +} + +/* If the user passes a NULL hasher, we hash the raw pointer. */ +static size_t +raw_hasher (const void *data, size_t n) +{ + /* When hashing unique pointers, it is often the case that they were + generated by malloc and thus have the property that the low-order + bits are 0. As this tends to give poorer performance with small + tables, we rotate the pointer value before performing division, + in an attempt to improve hash quality. */ + size_t val = rotr_sz ((size_t) data, 3); + return val % n; +} + +/* If the user passes a NULL comparator, we use pointer comparison. */ +static bool +raw_comparator (const void *a, const void *b) +{ + return a == b; +} + + +/* For the given hash TABLE, check the user supplied tuning structure for + reasonable values, and return true if there is no gross error with it. + Otherwise, definitively reset the TUNING field to some acceptable default + in the hash table (that is, the user loses the right of further modifying + tuning arguments), and return false. */ + +static bool +check_tuning (Hash_table *table) +{ + const Hash_tuning *tuning = table->tuning; + float epsilon; + if (tuning == &default_tuning) + return true; + + /* Be a bit stricter than mathematics would require, so that + rounding errors in size calculations do not cause allocations to + fail to grow or shrink as they should. The smallest allocation + is 11 (due to next_prime's algorithm), so an epsilon of 0.1 + should be good enough. */ + epsilon = 0.1f; + + if (epsilon < tuning->growth_threshold + && tuning->growth_threshold < 1 - epsilon + && 1 + epsilon < tuning->growth_factor + && 0 <= tuning->shrink_threshold + && tuning->shrink_threshold + epsilon < tuning->shrink_factor + && tuning->shrink_factor <= 1 + && tuning->shrink_threshold + epsilon < tuning->growth_threshold) + return true; + + table->tuning = &default_tuning; + return false; +} + +/* Compute the size of the bucket array for the given CANDIDATE and + TUNING, or return 0 if there is no possible way to allocate that + many entries. */ + +static size_t +compute_bucket_size (size_t candidate, const Hash_tuning *tuning) +{ + if (!tuning->is_n_buckets) + { + float new_candidate = candidate / tuning->growth_threshold; + if (SIZE_MAX <= new_candidate) + return 0; + candidate = new_candidate; + } + candidate = next_prime (candidate); + if (xalloc_oversized (candidate, sizeof (struct hash_entry *))) + return 0; + return candidate; +} + +/* Allocate and return a new hash table, or NULL upon failure. The initial + number of buckets is automatically selected so as to _guarantee_ that you + may insert at least CANDIDATE different user entries before any growth of + the hash table size occurs. So, if have a reasonably tight a-priori upper + bound on the number of entries you intend to insert in the hash table, you + may save some table memory and insertion time, by specifying it here. If + the IS_N_BUCKETS field of the TUNING structure is true, the CANDIDATE + argument has its meaning changed to the wanted number of buckets. + + TUNING points to a structure of user-supplied values, in case some fine + tuning is wanted over the default behavior of the hasher. If TUNING is + NULL, the default tuning parameters are used instead. If TUNING is + provided but the values requested are out of bounds or might cause + rounding errors, return NULL. + + The user-supplied HASHER function, when not NULL, accepts two + arguments ENTRY and TABLE_SIZE. It computes, by hashing ENTRY contents, a + slot number for that entry which should be in the range 0..TABLE_SIZE-1. + This slot number is then returned. + + The user-supplied COMPARATOR function, when not NULL, accepts two + arguments pointing to user data, it then returns true for a pair of entries + that compare equal, or false otherwise. This function is internally called + on entries which are already known to hash to the same bucket index, + but which are distinct pointers. + + The user-supplied DATA_FREER function, when not NULL, may be later called + with the user data as an argument, just before the entry containing the + data gets freed. This happens from within `hash_free' or `hash_clear'. + You should specify this function only if you want these functions to free + all of your `data' data. This is typically the case when your data is + simply an auxiliary struct that you have malloc'd to aggregate several + values. */ + +Hash_table * +hash_initialize (size_t candidate, const Hash_tuning *tuning, + Hash_hasher hasher, Hash_comparator comparator, + Hash_data_freer data_freer) +{ + Hash_table *table; + + if (hasher == NULL) + hasher = raw_hasher; + if (comparator == NULL) + comparator = raw_comparator; + + table = malloc (sizeof *table); + if (table == NULL) + return NULL; + + if (!tuning) + tuning = &default_tuning; + table->tuning = tuning; + if (!check_tuning (table)) + { + /* Fail if the tuning options are invalid. This is the only occasion + when the user gets some feedback about it. Once the table is created, + if the user provides invalid tuning options, we silently revert to + using the defaults, and ignore further request to change the tuning + options. */ + goto fail; + } + + table->n_buckets = compute_bucket_size (candidate, tuning); + if (!table->n_buckets) + goto fail; + + table->bucket = calloc (table->n_buckets, sizeof *table->bucket); + if (table->bucket == NULL) + goto fail; + table->bucket_limit = table->bucket + table->n_buckets; + table->n_buckets_used = 0; + table->n_entries = 0; + + table->hasher = hasher; + table->comparator = comparator; + table->data_freer = data_freer; + + table->free_entry_list = NULL; +#if USE_OBSTACK + obstack_init (&table->entry_stack); +#endif + return table; + + fail: + free (table); + return NULL; +} + +/* Make all buckets empty, placing any chained entries on the free list. + Apply the user-specified function data_freer (if any) to the datas of any + affected entries. */ + +void +hash_clear (Hash_table *table) +{ + struct hash_entry *bucket; + + for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) + { + if (bucket->data) + { + struct hash_entry *cursor; + struct hash_entry *next; + + /* Free the bucket overflow. */ + for (cursor = bucket->next; cursor; cursor = next) + { + if (table->data_freer) + table->data_freer (cursor->data); + cursor->data = NULL; + + next = cursor->next; + /* Relinking is done one entry at a time, as it is to be expected + that overflows are either rare or short. */ + cursor->next = table->free_entry_list; + table->free_entry_list = cursor; + } + + /* Free the bucket head. */ + if (table->data_freer) + table->data_freer (bucket->data); + bucket->data = NULL; + bucket->next = NULL; + } + } + + table->n_buckets_used = 0; + table->n_entries = 0; +} + +/* Reclaim all storage associated with a hash table. If a data_freer + function has been supplied by the user when the hash table was created, + this function applies it to the data of each entry before freeing that + entry. */ + +void +hash_free (Hash_table *table) +{ + struct hash_entry *bucket; + struct hash_entry *cursor; + struct hash_entry *next; + + /* Call the user data_freer function. */ + if (table->data_freer && table->n_entries) + { + for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) + { + if (bucket->data) + { + for (cursor = bucket; cursor; cursor = cursor->next) + table->data_freer (cursor->data); + } + } + } + +#if USE_OBSTACK + + obstack_free (&table->entry_stack, NULL); + +#else + + /* Free all bucket overflowed entries. */ + for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) + { + for (cursor = bucket->next; cursor; cursor = next) + { + next = cursor->next; + free (cursor); + } + } + + /* Also reclaim the internal list of previously freed entries. */ + for (cursor = table->free_entry_list; cursor; cursor = next) + { + next = cursor->next; + free (cursor); + } + +#endif + + /* Free the remainder of the hash table structure. */ + free (table->bucket); + free (table); +} + +/* Insertion and deletion. */ + +/* Get a new hash entry for a bucket overflow, possibly by recycling a + previously freed one. If this is not possible, allocate a new one. */ + +static struct hash_entry * +allocate_entry (Hash_table *table) +{ + struct hash_entry *new; + + if (table->free_entry_list) + { + new = table->free_entry_list; + table->free_entry_list = new->next; + } + else + { +#if USE_OBSTACK + new = obstack_alloc (&table->entry_stack, sizeof *new); +#else + new = malloc (sizeof *new); +#endif + } + + return new; +} + +/* Free a hash entry which was part of some bucket overflow, + saving it for later recycling. */ + +static void +free_entry (Hash_table *table, struct hash_entry *entry) +{ + entry->data = NULL; + entry->next = table->free_entry_list; + table->free_entry_list = entry; +} + +/* This private function is used to help with insertion and deletion. When + ENTRY matches an entry in the table, return a pointer to the corresponding + user data and set *BUCKET_HEAD to the head of the selected bucket. + Otherwise, return NULL. When DELETE is true and ENTRY matches an entry in + the table, unlink the matching entry. */ + +static void * +hash_find_entry (Hash_table *table, const void *entry, + struct hash_entry **bucket_head, bool delete) +{ + struct hash_entry *bucket + = table->bucket + table->hasher (entry, table->n_buckets); + struct hash_entry *cursor; + + if (! (bucket < table->bucket_limit)) + abort (); + + *bucket_head = bucket; + + /* Test for empty bucket. */ + if (bucket->data == NULL) + return NULL; + + /* See if the entry is the first in the bucket. */ + if (entry == bucket->data || table->comparator (entry, bucket->data)) + { + void *data = bucket->data; + + if (delete) + { + if (bucket->next) + { + struct hash_entry *next = bucket->next; + + /* Bump the first overflow entry into the bucket head, then save + the previous first overflow entry for later recycling. */ + *bucket = *next; + free_entry (table, next); + } + else + { + bucket->data = NULL; + } + } + + return data; + } + + /* Scan the bucket overflow. */ + for (cursor = bucket; cursor->next; cursor = cursor->next) + { + if (entry == cursor->next->data + || table->comparator (entry, cursor->next->data)) + { + void *data = cursor->next->data; + + if (delete) + { + struct hash_entry *next = cursor->next; + + /* Unlink the entry to delete, then save the freed entry for later + recycling. */ + cursor->next = next->next; + free_entry (table, next); + } + + return data; + } + } + + /* No entry found. */ + return NULL; +} + +/* Internal helper, to move entries from SRC to DST. Both tables must + share the same free entry list. If SAFE, only move overflow + entries, saving bucket heads for later, so that no allocations will + occur. Return false if the free entry list is exhausted and an + allocation fails. */ + +static bool +transfer_entries (Hash_table *dst, Hash_table *src, bool safe) +{ + struct hash_entry *bucket; + struct hash_entry *cursor; + struct hash_entry *next; + for (bucket = src->bucket; bucket < src->bucket_limit; bucket++) + if (bucket->data) + { + void *data; + struct hash_entry *new_bucket; + + /* Within each bucket, transfer overflow entries first and + then the bucket head, to minimize memory pressure. After + all, the only time we might allocate is when moving the + bucket head, but moving overflow entries first may create + free entries that can be recycled by the time we finally + get to the bucket head. */ + for (cursor = bucket->next; cursor; cursor = next) + { + data = cursor->data; + new_bucket = (dst->bucket + dst->hasher (data, dst->n_buckets)); + + if (! (new_bucket < dst->bucket_limit)) + abort (); + + next = cursor->next; + + if (new_bucket->data) + { + /* Merely relink an existing entry, when moving from a + bucket overflow into a bucket overflow. */ + cursor->next = new_bucket->next; + new_bucket->next = cursor; + } + else + { + /* Free an existing entry, when moving from a bucket + overflow into a bucket header. */ + new_bucket->data = data; + dst->n_buckets_used++; + free_entry (dst, cursor); + } + } + /* Now move the bucket head. Be sure that if we fail due to + allocation failure that the src table is in a consistent + state. */ + data = bucket->data; + bucket->next = NULL; + if (safe) + continue; + new_bucket = (dst->bucket + dst->hasher (data, dst->n_buckets)); + + if (! (new_bucket < dst->bucket_limit)) + abort (); + + if (new_bucket->data) + { + /* Allocate or recycle an entry, when moving from a bucket + header into a bucket overflow. */ + struct hash_entry *new_entry = allocate_entry (dst); + + if (new_entry == NULL) + return false; + + new_entry->data = data; + new_entry->next = new_bucket->next; + new_bucket->next = new_entry; + } + else + { + /* Move from one bucket header to another. */ + new_bucket->data = data; + dst->n_buckets_used++; + } + bucket->data = NULL; + src->n_buckets_used--; + } + return true; +} + +/* For an already existing hash table, change the number of buckets through + specifying CANDIDATE. The contents of the hash table are preserved. The + new number of buckets is automatically selected so as to _guarantee_ that + the table may receive at least CANDIDATE different user entries, including + those already in the table, before any other growth of the hash table size + occurs. If TUNING->IS_N_BUCKETS is true, then CANDIDATE specifies the + exact number of buckets desired. Return true iff the rehash succeeded. */ + +bool +hash_rehash (Hash_table *table, size_t candidate) +{ + Hash_table storage; + Hash_table *new_table; + size_t new_size = compute_bucket_size (candidate, table->tuning); + + if (!new_size) + return false; + if (new_size == table->n_buckets) + return true; + new_table = &storage; + new_table->bucket = calloc (new_size, sizeof *new_table->bucket); + if (new_table->bucket == NULL) + return false; + new_table->n_buckets = new_size; + new_table->bucket_limit = new_table->bucket + new_size; + new_table->n_buckets_used = 0; + new_table->n_entries = 0; + new_table->tuning = table->tuning; + new_table->hasher = table->hasher; + new_table->comparator = table->comparator; + new_table->data_freer = table->data_freer; + + /* In order for the transfer to successfully complete, we need + additional overflow entries when distinct buckets in the old + table collide into a common bucket in the new table. The worst + case possible is a hasher that gives a good spread with the old + size, but returns a constant with the new size; if we were to + guarantee table->n_buckets_used-1 free entries in advance, then + the transfer would be guaranteed to not allocate memory. + However, for large tables, a guarantee of no further allocation + introduces a lot of extra memory pressure, all for an unlikely + corner case (most rehashes reduce, rather than increase, the + number of overflow entries needed). So, we instead ensure that + the transfer process can be reversed if we hit a memory + allocation failure mid-transfer. */ + + /* Merely reuse the extra old space into the new table. */ +#if USE_OBSTACK + new_table->entry_stack = table->entry_stack; +#endif + new_table->free_entry_list = table->free_entry_list; + + if (transfer_entries (new_table, table, false)) + { + /* Entries transferred successfully; tie up the loose ends. */ + free (table->bucket); + table->bucket = new_table->bucket; + table->bucket_limit = new_table->bucket_limit; + table->n_buckets = new_table->n_buckets; + table->n_buckets_used = new_table->n_buckets_used; + table->free_entry_list = new_table->free_entry_list; + /* table->n_entries and table->entry_stack already hold their value. */ + return true; + } + + /* We've allocated new_table->bucket (and possibly some entries), + exhausted the free list, and moved some but not all entries into + new_table. We must undo the partial move before returning + failure. The only way to get into this situation is if new_table + uses fewer buckets than the old table, so we will reclaim some + free entries as overflows in the new table are put back into + distinct buckets in the old table. + + There are some pathological cases where a single pass through the + table requires more intermediate overflow entries than using two + passes. Two passes give worse cache performance and takes + longer, but at this point, we're already out of memory, so slow + and safe is better than failure. */ + table->free_entry_list = new_table->free_entry_list; + if (! (transfer_entries (table, new_table, true) + && transfer_entries (table, new_table, false))) + abort (); + /* table->n_entries already holds its value. */ + free (new_table->bucket); + return false; +} + +/* If ENTRY matches an entry already in the hash table, return the pointer + to the entry from the table. Otherwise, insert ENTRY and return ENTRY. + Return NULL if the storage required for insertion cannot be allocated. + This implementation does not support duplicate entries or insertion of + NULL. */ + +void * +hash_insert (Hash_table *table, const void *entry) +{ + void *data; + struct hash_entry *bucket; + + /* The caller cannot insert a NULL entry. */ + if (! entry) + abort (); + + /* If there's a matching entry already in the table, return that. */ + if ((data = hash_find_entry (table, entry, &bucket, false)) != NULL) + return data; + + /* If the growth threshold of the buckets in use has been reached, increase + the table size and rehash. There's no point in checking the number of + entries: if the hashing function is ill-conditioned, rehashing is not + likely to improve it. */ + + if (table->n_buckets_used + > table->tuning->growth_threshold * table->n_buckets) + { + /* Check more fully, before starting real work. If tuning arguments + became invalid, the second check will rely on proper defaults. */ + check_tuning (table); + if (table->n_buckets_used + > table->tuning->growth_threshold * table->n_buckets) + { + const Hash_tuning *tuning = table->tuning; + float candidate = + (tuning->is_n_buckets + ? (table->n_buckets * tuning->growth_factor) + : (table->n_buckets * tuning->growth_factor + * tuning->growth_threshold)); + + if (SIZE_MAX <= candidate) + return NULL; + + /* If the rehash fails, arrange to return NULL. */ + if (!hash_rehash (table, candidate)) + return NULL; + + /* Update the bucket we are interested in. */ + if (hash_find_entry (table, entry, &bucket, false) != NULL) + abort (); + } + } + + /* ENTRY is not matched, it should be inserted. */ + + if (bucket->data) + { + struct hash_entry *new_entry = allocate_entry (table); + + if (new_entry == NULL) + return NULL; + + /* Add ENTRY in the overflow of the bucket. */ + + new_entry->data = (void *) entry; + new_entry->next = bucket->next; + bucket->next = new_entry; + table->n_entries++; + return (void *) entry; + } + + /* Add ENTRY right in the bucket head. */ + + bucket->data = (void *) entry; + table->n_entries++; + table->n_buckets_used++; + + return (void *) entry; +} + +/* If ENTRY is already in the table, remove it and return the just-deleted + data (the user may want to deallocate its storage). If ENTRY is not in the + table, don't modify the table and return NULL. */ + +void * +hash_delete (Hash_table *table, const void *entry) +{ + void *data; + struct hash_entry *bucket; + + data = hash_find_entry (table, entry, &bucket, true); + if (!data) + return NULL; + + table->n_entries--; + if (!bucket->data) + { + table->n_buckets_used--; + + /* If the shrink threshold of the buckets in use has been reached, + rehash into a smaller table. */ + + if (table->n_buckets_used + < table->tuning->shrink_threshold * table->n_buckets) + { + /* Check more fully, before starting real work. If tuning arguments + became invalid, the second check will rely on proper defaults. */ + check_tuning (table); + if (table->n_buckets_used + < table->tuning->shrink_threshold * table->n_buckets) + { + const Hash_tuning *tuning = table->tuning; + size_t candidate = + (tuning->is_n_buckets + ? table->n_buckets * tuning->shrink_factor + : (table->n_buckets * tuning->shrink_factor + * tuning->growth_threshold)); + + if (!hash_rehash (table, candidate)) + { + /* Failure to allocate memory in an attempt to + shrink the table is not fatal. But since memory + is low, we can at least be kind and free any + spare entries, rather than keeping them tied up + in the free entry list. */ +#if ! USE_OBSTACK + struct hash_entry *cursor = table->free_entry_list; + struct hash_entry *next; + while (cursor) + { + next = cursor->next; + free (cursor); + cursor = next; + } + table->free_entry_list = NULL; +#endif + } + } + } + } + + return data; +} + +/* Testing. */ + +#if TESTING + +void +hash_print (const Hash_table *table) +{ + struct hash_entry *bucket = (struct hash_entry *) table->bucket; + + for ( ; bucket < table->bucket_limit; bucket++) + { + struct hash_entry *cursor; + + if (bucket) + printf ("%lu:\n", (unsigned long int) (bucket - table->bucket)); + + for (cursor = bucket; cursor; cursor = cursor->next) + { + char const *s = cursor->data; + /* FIXME */ + if (s) + printf (" %s\n", s); + } + } +} + +#endif /* TESTING */ diff --git a/lib/hash.h b/lib/hash.h new file mode 100644 index 0000000..e795cdc --- /dev/null +++ b/lib/hash.h @@ -0,0 +1,93 @@ +/* hash - hashing table processing. + Copyright (C) 1998-1999, 2001, 2003, 2009-2010 Free Software Foundation, + Inc. + Written by Jim Meyering <meyering@ascend.com>, 1998. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* A generic hash table package. */ + +/* Make sure USE_OBSTACK is defined to 1 if you want the allocator to use + obstacks instead of malloc, and recompile `hash.c' with same setting. */ + +#ifndef HASH_H_ +# define HASH_H_ + +# include <stdio.h> +# include <stdbool.h> + +/* The warn_unused_result attribute appeared first in gcc-3.4.0 */ +# ifndef __attribute__ +# if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) +# define __attribute__(x) +# endif +# endif + +# ifndef ATTRIBUTE_WUR +# define ATTRIBUTE_WUR __attribute__ ((__warn_unused_result__)) +# endif + +typedef size_t (*Hash_hasher) (const void *, size_t); +typedef bool (*Hash_comparator) (const void *, const void *); +typedef void (*Hash_data_freer) (void *); +typedef bool (*Hash_processor) (void *, void *); + +struct hash_tuning + { + /* This structure is mainly used for `hash_initialize', see the block + documentation of `hash_reset_tuning' for more complete comments. */ + + float shrink_threshold; /* ratio of used buckets to trigger a shrink */ + float shrink_factor; /* ratio of new smaller size to original size */ + float growth_threshold; /* ratio of used buckets to trigger a growth */ + float growth_factor; /* ratio of new bigger size to original size */ + bool is_n_buckets; /* if CANDIDATE really means table size */ + }; + +typedef struct hash_tuning Hash_tuning; + +struct hash_table; + +typedef struct hash_table Hash_table; + +/* Information and lookup. */ +size_t hash_get_n_buckets (const Hash_table *); +size_t hash_get_n_buckets_used (const Hash_table *); +size_t hash_get_n_entries (const Hash_table *); +size_t hash_get_max_bucket_length (const Hash_table *); +bool hash_table_ok (const Hash_table *); +void hash_print_statistics (const Hash_table *, FILE *); +void *hash_lookup (const Hash_table *, const void *); + +/* Walking. */ +void *hash_get_first (const Hash_table *); +void *hash_get_next (const Hash_table *, const void *); +size_t hash_get_entries (const Hash_table *, void **, size_t); +size_t hash_do_for_each (const Hash_table *, Hash_processor, void *); + +/* Allocation and clean-up. */ +size_t hash_string (const char *, size_t); +void hash_reset_tuning (Hash_tuning *); +Hash_table *hash_initialize (size_t, const Hash_tuning *, + Hash_hasher, Hash_comparator, + Hash_data_freer) ATTRIBUTE_WUR; +void hash_clear (Hash_table *); +void hash_free (Hash_table *); + +/* Insertion and deletion. */ +bool hash_rehash (Hash_table *, size_t) ATTRIBUTE_WUR; +void *hash_insert (Hash_table *, const void *) ATTRIBUTE_WUR; +void *hash_delete (Hash_table *, const void *); + +#endif diff --git a/lib/iconv.in.h b/lib/iconv.in.h new file mode 100644 index 0000000..00c8fbd --- /dev/null +++ b/lib/iconv.in.h @@ -0,0 +1,103 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like <iconv.h>. + + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_ICONV_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_ICONV_H@ + +#ifndef _GL_ICONV_H +#define _GL_ICONV_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. */ + + +#if @REPLACE_ICONV_OPEN@ +/* An iconv_open wrapper that supports the IANA standardized encoding names + ("ISO-8859-1" etc.) as far as possible. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iconv_open rpl_iconv_open +# endif +_GL_FUNCDECL_RPL (iconv_open, iconv_t, + (const char *tocode, const char *fromcode) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (iconv_open, iconv_t, + (const char *tocode, const char *fromcode)); +#else +_GL_CXXALIAS_SYS (iconv_open, iconv_t, + (const char *tocode, const char *fromcode)); +#endif +_GL_CXXALIASWARN (iconv_open); + +#if @REPLACE_ICONV_UTF@ +/* Special constants for supporting UTF-{16,32}{BE,LE} encodings. + Not public. */ +# define _ICONV_UTF8_UTF16BE (iconv_t)(-161) +# define _ICONV_UTF8_UTF16LE (iconv_t)(-162) +# define _ICONV_UTF8_UTF32BE (iconv_t)(-163) +# define _ICONV_UTF8_UTF32LE (iconv_t)(-164) +# define _ICONV_UTF16BE_UTF8 (iconv_t)(-165) +# define _ICONV_UTF16LE_UTF8 (iconv_t)(-166) +# define _ICONV_UTF32BE_UTF8 (iconv_t)(-167) +# define _ICONV_UTF32LE_UTF8 (iconv_t)(-168) +#endif + +#if @REPLACE_ICONV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iconv rpl_iconv +# endif +_GL_FUNCDECL_RPL (iconv, size_t, + (iconv_t cd, + @ICONV_CONST@ char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft)); +_GL_CXXALIAS_RPL (iconv, size_t, + (iconv_t cd, + @ICONV_CONST@ char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft)); +#else +_GL_CXXALIAS_SYS (iconv, size_t, + (iconv_t cd, + @ICONV_CONST@ char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft)); +#endif +_GL_CXXALIASWARN (iconv); + +#if @REPLACE_ICONV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iconv_close rpl_iconv_close +# endif +_GL_FUNCDECL_RPL (iconv_close, int, (iconv_t cd)); +_GL_CXXALIAS_RPL (iconv_close, int, (iconv_t cd)); +#else +_GL_CXXALIAS_SYS (iconv_close, int, (iconv_t cd)); +#endif +_GL_CXXALIASWARN (iconv_close); + + +#endif /* _GL_ICONV_H */ +#endif /* _GL_ICONV_H */ diff --git a/lib/iconv_open-aix.gperf b/lib/iconv_open-aix.gperf new file mode 100644 index 0000000..6782b99 --- /dev/null +++ b/lib/iconv_open-aix.gperf @@ -0,0 +1,44 @@ +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On AIX 5.1, look in /usr/lib/nls/loc/uconvTable. +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-3, "ISO8859-3" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "ISO8859-8" +ISO-8859-9, "ISO8859-9" +ISO-8859-15, "ISO8859-15" +CP437, "IBM-437" +CP850, "IBM-850" +CP852, "IBM-852" +CP856, "IBM-856" +CP857, "IBM-857" +CP861, "IBM-861" +CP865, "IBM-865" +CP869, "IBM-869" +ISO-8859-13, "IBM-921" +CP922, "IBM-922" +CP932, "IBM-932" +CP943, "IBM-943" +CP1046, "IBM-1046" +CP1124, "IBM-1124" +CP1125, "IBM-1125" +CP1129, "IBM-1129" +CP1252, "IBM-1252" +GB2312, "IBM-eucCN" +EUC-JP, "IBM-eucJP" +EUC-KR, "IBM-eucKR" +EUC-TW, "IBM-eucTW" +BIG5, "big5" diff --git a/lib/iconv_open-aix.h b/lib/iconv_open-aix.h new file mode 100644 index 0000000..0ffc3fe --- /dev/null +++ b/lib/iconv_open-aix.h @@ -0,0 +1,256 @@ +/* ANSI-C code produced by gperf version 3.0.3 */ +/* Command-line: gperf -m 10 ./iconv_open-aix.gperf */ +/* Computed positions: -k'4,$' */ + +#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 not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." +#endif + +#line 1 "./iconv_open-aix.gperf" +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; + +#define TOTAL_KEYWORDS 32 +#define MIN_WORD_LENGTH 4 +#define MAX_WORD_LENGTH 11 +#define MIN_HASH_VALUE 6 +#define MAX_HASH_VALUE 44 +/* maximum key range = 39, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +mapping_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 0, 4, 25, + 0, 11, 24, 9, 17, 3, 14, 21, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 3, 45, 1, 45, 45, 45, 45, 0, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45 + }; + return len + asso_values[(unsigned char)str[3]+2] + asso_values[(unsigned char)str[len - 1]]; +} + +struct stringpool_t + { + char stringpool_str6[sizeof("EUC-TW")]; + char stringpool_str7[sizeof("EUC-KR")]; + char stringpool_str8[sizeof("CP852")]; + char stringpool_str9[sizeof("EUC-JP")]; + char stringpool_str10[sizeof("ISO-8859-2")]; + char stringpool_str11[sizeof("CP857")]; + char stringpool_str12[sizeof("CP850")]; + char stringpool_str13[sizeof("ISO-8859-7")]; + char stringpool_str14[sizeof("CP932")]; + char stringpool_str15[sizeof("GB2312")]; + char stringpool_str16[sizeof("BIG5")]; + char stringpool_str17[sizeof("CP437")]; + char stringpool_str19[sizeof("ISO-8859-5")]; + char stringpool_str20[sizeof("ISO-8859-15")]; + char stringpool_str21[sizeof("ISO-8859-3")]; + char stringpool_str22[sizeof("ISO-8859-13")]; + char stringpool_str23[sizeof("CP1046")]; + char stringpool_str24[sizeof("ISO-8859-8")]; + char stringpool_str25[sizeof("CP856")]; + char stringpool_str26[sizeof("CP1125")]; + char stringpool_str27[sizeof("ISO-8859-6")]; + char stringpool_str28[sizeof("CP865")]; + char stringpool_str29[sizeof("CP922")]; + char stringpool_str30[sizeof("CP1252")]; + char stringpool_str31[sizeof("ISO-8859-9")]; + char stringpool_str33[sizeof("CP943")]; + char stringpool_str34[sizeof("ISO-8859-4")]; + char stringpool_str35[sizeof("ISO-8859-1")]; + char stringpool_str38[sizeof("CP1129")]; + char stringpool_str40[sizeof("CP869")]; + char stringpool_str41[sizeof("CP1124")]; + char stringpool_str44[sizeof("CP861")]; + }; +static const struct stringpool_t stringpool_contents = + { + "EUC-TW", + "EUC-KR", + "CP852", + "EUC-JP", + "ISO-8859-2", + "CP857", + "CP850", + "ISO-8859-7", + "CP932", + "GB2312", + "BIG5", + "CP437", + "ISO-8859-5", + "ISO-8859-15", + "ISO-8859-3", + "ISO-8859-13", + "CP1046", + "ISO-8859-8", + "CP856", + "CP1125", + "ISO-8859-6", + "CP865", + "CP922", + "CP1252", + "ISO-8859-9", + "CP943", + "ISO-8859-4", + "ISO-8859-1", + "CP1129", + "CP869", + "CP1124", + "CP861" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct mapping mappings[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 43 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str6, "IBM-eucTW"}, +#line 42 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str7, "IBM-eucKR"}, +#line 25 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str8, "IBM-852"}, +#line 41 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str9, "IBM-eucJP"}, +#line 14 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str10, "ISO8859-2"}, +#line 27 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str11, "IBM-857"}, +#line 24 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str12, "IBM-850"}, +#line 19 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str13, "ISO8859-7"}, +#line 33 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str14, "IBM-932"}, +#line 40 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str15, "IBM-eucCN"}, +#line 44 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str16, "big5"}, +#line 23 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str17, "IBM-437"}, + {-1}, +#line 17 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str19, "ISO8859-5"}, +#line 22 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str20, "ISO8859-15"}, +#line 15 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str21, "ISO8859-3"}, +#line 31 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str22, "IBM-921"}, +#line 35 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str23, "IBM-1046"}, +#line 20 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str24, "ISO8859-8"}, +#line 26 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str25, "IBM-856"}, +#line 37 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str26, "IBM-1125"}, +#line 18 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str27, "ISO8859-6"}, +#line 29 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str28, "IBM-865"}, +#line 32 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str29, "IBM-922"}, +#line 39 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str30, "IBM-1252"}, +#line 21 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str31, "ISO8859-9"}, + {-1}, +#line 34 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str33, "IBM-943"}, +#line 16 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str34, "ISO8859-4"}, +#line 13 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str35, "ISO8859-1"}, + {-1}, {-1}, +#line 38 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str38, "IBM-1129"}, + {-1}, +#line 30 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str40, "IBM-869"}, +#line 36 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str41, "IBM-1124"}, + {-1}, {-1}, +#line 28 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str44, "IBM-861"} + }; + +#ifdef __GNUC__ +__inline +#ifdef __GNUC_STDC_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct mapping * +mapping_lookup (register const char *str, register unsigned int len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = mapping_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register int o = mappings[key].standard_name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &mappings[key]; + } + } + } + return 0; +} diff --git a/lib/iconv_open-hpux.gperf b/lib/iconv_open-hpux.gperf new file mode 100644 index 0000000..5a35c83 --- /dev/null +++ b/lib/iconv_open-hpux.gperf @@ -0,0 +1,56 @@ +struct mapping { int standard_name; const char vendor_name[9 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On HP-UX 11.11, look in /usr/lib/nls/iconv. +ISO-8859-1, "iso88591" +ISO-8859-2, "iso88592" +ISO-8859-5, "iso88595" +ISO-8859-6, "iso88596" +ISO-8859-7, "iso88597" +ISO-8859-8, "iso88598" +ISO-8859-9, "iso88599" +ISO-8859-15, "iso885915" +CP437, "cp437" +CP775, "cp775" +CP850, "cp850" +CP852, "cp852" +CP855, "cp855" +CP857, "cp857" +CP861, "cp861" +CP862, "cp862" +CP864, "cp864" +CP865, "cp865" +CP866, "cp866" +CP869, "cp869" +CP874, "cp874" +CP1250, "cp1250" +CP1251, "cp1251" +CP1252, "cp1252" +CP1253, "cp1253" +CP1254, "cp1254" +CP1255, "cp1255" +CP1256, "cp1256" +CP1257, "cp1257" +CP1258, "cp1258" +HP-ROMAN8, "roman8" +HP-ARABIC8, "arabic8" +HP-GREEK8, "greek8" +HP-HEBREW8, "hebrew8" +HP-TURKISH8, "turkish8" +HP-KANA8, "kana8" +TIS-620, "tis620" +GB2312, "hp15CN" +EUC-JP, "eucJP" +EUC-KR, "eucKR" +EUC-TW, "eucTW" +BIG5, "big5" +SHIFT_JIS, "sjis" +UTF-8, "utf8" diff --git a/lib/iconv_open-hpux.h b/lib/iconv_open-hpux.h new file mode 100644 index 0000000..8f9f0a9 --- /dev/null +++ b/lib/iconv_open-hpux.h @@ -0,0 +1,299 @@ +/* ANSI-C code produced by gperf version 3.0.3 */ +/* Command-line: gperf -m 10 ./iconv_open-hpux.gperf */ +/* Computed positions: -k'4,$' */ + +#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 not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." +#endif + +#line 1 "./iconv_open-hpux.gperf" +struct mapping { int standard_name; const char vendor_name[9 + 1]; }; + +#define TOTAL_KEYWORDS 44 +#define MIN_WORD_LENGTH 4 +#define MAX_WORD_LENGTH 11 +#define MIN_HASH_VALUE 6 +#define MAX_HASH_VALUE 49 +/* maximum key range = 44, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +mapping_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 1, 2, + 24, 43, 5, 10, 0, 13, 32, 3, 19, 18, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, + 50, 50, 50, 50, 14, 5, 0, 50, 50, 0, + 27, 50, 12, 14, 50, 50, 0, 5, 2, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + }; + return len + asso_values[(unsigned char)str[3]+4] + asso_values[(unsigned char)str[len - 1]]; +} + +struct stringpool_t + { + char stringpool_str6[sizeof("CP1256")]; + char stringpool_str7[sizeof("CP1250")]; + char stringpool_str8[sizeof("CP1251")]; + char stringpool_str9[sizeof("CP850")]; + char stringpool_str10[sizeof("TIS-620")]; + char stringpool_str11[sizeof("CP1254")]; + char stringpool_str12[sizeof("ISO-8859-6")]; + char stringpool_str13[sizeof("EUC-TW")]; + char stringpool_str14[sizeof("ISO-8859-1")]; + char stringpool_str15[sizeof("ISO-8859-9")]; + char stringpool_str16[sizeof("CP1255")]; + char stringpool_str17[sizeof("BIG5")]; + char stringpool_str18[sizeof("CP855")]; + char stringpool_str19[sizeof("CP1257")]; + char stringpool_str20[sizeof("EUC-KR")]; + char stringpool_str21[sizeof("CP857")]; + char stringpool_str22[sizeof("ISO-8859-5")]; + char stringpool_str23[sizeof("ISO-8859-15")]; + char stringpool_str24[sizeof("CP866")]; + char stringpool_str25[sizeof("ISO-8859-7")]; + char stringpool_str26[sizeof("CP861")]; + char stringpool_str27[sizeof("CP869")]; + char stringpool_str28[sizeof("CP874")]; + char stringpool_str29[sizeof("CP864")]; + char stringpool_str30[sizeof("CP1252")]; + char stringpool_str31[sizeof("CP437")]; + char stringpool_str32[sizeof("CP852")]; + char stringpool_str33[sizeof("CP775")]; + char stringpool_str34[sizeof("CP865")]; + char stringpool_str35[sizeof("EUC-JP")]; + char stringpool_str36[sizeof("ISO-8859-2")]; + char stringpool_str37[sizeof("SHIFT_JIS")]; + char stringpool_str38[sizeof("CP1258")]; + char stringpool_str39[sizeof("UTF-8")]; + char stringpool_str40[sizeof("HP-KANA8")]; + char stringpool_str41[sizeof("HP-ROMAN8")]; + char stringpool_str42[sizeof("HP-HEBREW8")]; + char stringpool_str43[sizeof("GB2312")]; + char stringpool_str44[sizeof("ISO-8859-8")]; + char stringpool_str45[sizeof("HP-TURKISH8")]; + char stringpool_str46[sizeof("HP-GREEK8")]; + char stringpool_str47[sizeof("HP-ARABIC8")]; + char stringpool_str48[sizeof("CP862")]; + char stringpool_str49[sizeof("CP1253")]; + }; +static const struct stringpool_t stringpool_contents = + { + "CP1256", + "CP1250", + "CP1251", + "CP850", + "TIS-620", + "CP1254", + "ISO-8859-6", + "EUC-TW", + "ISO-8859-1", + "ISO-8859-9", + "CP1255", + "BIG5", + "CP855", + "CP1257", + "EUC-KR", + "CP857", + "ISO-8859-5", + "ISO-8859-15", + "CP866", + "ISO-8859-7", + "CP861", + "CP869", + "CP874", + "CP864", + "CP1252", + "CP437", + "CP852", + "CP775", + "CP865", + "EUC-JP", + "ISO-8859-2", + "SHIFT_JIS", + "CP1258", + "UTF-8", + "HP-KANA8", + "HP-ROMAN8", + "HP-HEBREW8", + "GB2312", + "ISO-8859-8", + "HP-TURKISH8", + "HP-GREEK8", + "HP-ARABIC8", + "CP862", + "CP1253" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct mapping mappings[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 40 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str6, "cp1256"}, +#line 34 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str7, "cp1250"}, +#line 35 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str8, "cp1251"}, +#line 23 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str9, "cp850"}, +#line 49 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str10, "tis620"}, +#line 38 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str11, "cp1254"}, +#line 16 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str12, "iso88596"}, +#line 53 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str13, "eucTW"}, +#line 13 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str14, "iso88591"}, +#line 19 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str15, "iso88599"}, +#line 39 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str16, "cp1255"}, +#line 54 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str17, "big5"}, +#line 25 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str18, "cp855"}, +#line 41 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str19, "cp1257"}, +#line 52 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str20, "eucKR"}, +#line 26 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str21, "cp857"}, +#line 15 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str22, "iso88595"}, +#line 20 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str23, "iso885915"}, +#line 31 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str24, "cp866"}, +#line 17 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str25, "iso88597"}, +#line 27 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str26, "cp861"}, +#line 32 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str27, "cp869"}, +#line 33 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str28, "cp874"}, +#line 29 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str29, "cp864"}, +#line 36 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str30, "cp1252"}, +#line 21 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str31, "cp437"}, +#line 24 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str32, "cp852"}, +#line 22 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str33, "cp775"}, +#line 30 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str34, "cp865"}, +#line 51 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str35, "eucJP"}, +#line 14 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str36, "iso88592"}, +#line 55 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str37, "sjis"}, +#line 42 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str38, "cp1258"}, +#line 56 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str39, "utf8"}, +#line 48 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str40, "kana8"}, +#line 43 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str41, "roman8"}, +#line 46 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str42, "hebrew8"}, +#line 50 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str43, "hp15CN"}, +#line 18 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str44, "iso88598"}, +#line 47 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str45, "turkish8"}, +#line 45 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str46, "greek8"}, +#line 44 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str47, "arabic8"}, +#line 28 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str48, "cp862"}, +#line 37 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str49, "cp1253"} + }; + +#ifdef __GNUC__ +__inline +#ifdef __GNUC_STDC_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct mapping * +mapping_lookup (register const char *str, register unsigned int len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = mapping_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register int o = mappings[key].standard_name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &mappings[key]; + } + } + } + return 0; +} diff --git a/lib/iconv_open-irix.gperf b/lib/iconv_open-irix.gperf new file mode 100644 index 0000000..3672a80 --- /dev/null +++ b/lib/iconv_open-irix.gperf @@ -0,0 +1,31 @@ +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On IRIX 6.5, look in /usr/lib/iconv and /usr/lib/international/encodings. +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-3, "ISO8859-3" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "ISO8859-8" +ISO-8859-9, "ISO8859-9" +ISO-8859-15, "ISO8859-15" +KOI8-R, "KOI8" +CP855, "DOS855" +CP1251, "WIN1251" +GB2312, "eucCN" +EUC-JP, "eucJP" +EUC-KR, "eucKR" +EUC-TW, "eucTW" +SHIFT_JIS, "sjis" +TIS-620, "TIS620" diff --git a/lib/iconv_open-irix.h b/lib/iconv_open-irix.h new file mode 100644 index 0000000..520582e --- /dev/null +++ b/lib/iconv_open-irix.h @@ -0,0 +1,199 @@ +/* ANSI-C code produced by gperf version 3.0.3 */ +/* Command-line: gperf -m 10 ./iconv_open-irix.gperf */ +/* Computed positions: -k'1,$' */ + +#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 not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." +#endif + +#line 1 "./iconv_open-irix.gperf" +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; + +#define TOTAL_KEYWORDS 19 +#define MIN_WORD_LENGTH 5 +#define MAX_WORD_LENGTH 11 +#define MIN_HASH_VALUE 5 +#define MAX_HASH_VALUE 23 +/* maximum key range = 19, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +mapping_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 8, 2, + 5, 12, 11, 0, 10, 9, 8, 7, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 0, 24, 0, + 24, 5, 24, 0, 24, 7, 24, 24, 24, 24, + 7, 24, 1, 0, 8, 24, 24, 0, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24 + }; + return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]]; +} + +struct stringpool_t + { + char stringpool_str5[sizeof("CP855")]; + char stringpool_str6[sizeof("EUC-TW")]; + char stringpool_str7[sizeof("EUC-KR")]; + char stringpool_str8[sizeof("CP1251")]; + char stringpool_str9[sizeof("SHIFT_JIS")]; + char stringpool_str10[sizeof("ISO-8859-5")]; + char stringpool_str11[sizeof("ISO-8859-15")]; + char stringpool_str12[sizeof("ISO-8859-1")]; + char stringpool_str13[sizeof("EUC-JP")]; + char stringpool_str14[sizeof("KOI8-R")]; + char stringpool_str15[sizeof("ISO-8859-2")]; + char stringpool_str16[sizeof("GB2312")]; + char stringpool_str17[sizeof("ISO-8859-9")]; + char stringpool_str18[sizeof("ISO-8859-8")]; + char stringpool_str19[sizeof("ISO-8859-7")]; + char stringpool_str20[sizeof("ISO-8859-6")]; + char stringpool_str21[sizeof("ISO-8859-4")]; + char stringpool_str22[sizeof("ISO-8859-3")]; + char stringpool_str23[sizeof("TIS-620")]; + }; +static const struct stringpool_t stringpool_contents = + { + "CP855", + "EUC-TW", + "EUC-KR", + "CP1251", + "SHIFT_JIS", + "ISO-8859-5", + "ISO-8859-15", + "ISO-8859-1", + "EUC-JP", + "KOI8-R", + "ISO-8859-2", + "GB2312", + "ISO-8859-9", + "ISO-8859-8", + "ISO-8859-7", + "ISO-8859-6", + "ISO-8859-4", + "ISO-8859-3", + "TIS-620" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct mapping mappings[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 24 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str5, "DOS855"}, +#line 29 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str6, "eucTW"}, +#line 28 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str7, "eucKR"}, +#line 25 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str8, "WIN1251"}, +#line 30 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str9, "sjis"}, +#line 17 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str10, "ISO8859-5"}, +#line 22 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str11, "ISO8859-15"}, +#line 13 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str12, "ISO8859-1"}, +#line 27 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str13, "eucJP"}, +#line 23 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str14, "KOI8"}, +#line 14 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str15, "ISO8859-2"}, +#line 26 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str16, "eucCN"}, +#line 21 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str17, "ISO8859-9"}, +#line 20 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str18, "ISO8859-8"}, +#line 19 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str19, "ISO8859-7"}, +#line 18 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str20, "ISO8859-6"}, +#line 16 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str21, "ISO8859-4"}, +#line 15 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str22, "ISO8859-3"}, +#line 31 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str23, "TIS620"} + }; + +#ifdef __GNUC__ +__inline +#ifdef __GNUC_STDC_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct mapping * +mapping_lookup (register const char *str, register unsigned int len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = mapping_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register int o = mappings[key].standard_name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &mappings[key]; + } + } + } + return 0; +} diff --git a/lib/iconv_open-osf.gperf b/lib/iconv_open-osf.gperf new file mode 100644 index 0000000..f468ff6 --- /dev/null +++ b/lib/iconv_open-osf.gperf @@ -0,0 +1,50 @@ +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On OSF/1 5.1, look in /usr/lib/nls/loc/iconv. +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-3, "ISO8859-3" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "ISO8859-8" +ISO-8859-9, "ISO8859-9" +ISO-8859-15, "ISO8859-15" +CP437, "cp437" +CP775, "cp775" +CP850, "cp850" +CP852, "cp852" +CP855, "cp855" +CP857, "cp857" +CP861, "cp861" +CP862, "cp862" +CP865, "cp865" +CP866, "cp866" +CP869, "cp869" +CP874, "cp874" +CP949, "KSC5601" +CP1250, "cp1250" +CP1251, "cp1251" +CP1252, "cp1252" +CP1253, "cp1253" +CP1254, "cp1254" +CP1255, "cp1255" +CP1256, "cp1256" +CP1257, "cp1257" +CP1258, "cp1258" +EUC-JP, "eucJP" +EUC-KR, "eucKR" +EUC-TW, "eucTW" +BIG5, "big5" +SHIFT_JIS, "SJIS" +TIS-620, "TACTIS" diff --git a/lib/iconv_open-osf.h b/lib/iconv_open-osf.h new file mode 100644 index 0000000..85e4c0f --- /dev/null +++ b/lib/iconv_open-osf.h @@ -0,0 +1,278 @@ +/* ANSI-C code produced by gperf version 3.0.3 */ +/* Command-line: gperf -m 10 ./iconv_open-osf.gperf */ +/* Computed positions: -k'4,$' */ + +#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 not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." +#endif + +#line 1 "./iconv_open-osf.gperf" +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; + +#define TOTAL_KEYWORDS 38 +#define MIN_WORD_LENGTH 4 +#define MAX_WORD_LENGTH 11 +#define MIN_HASH_VALUE 6 +#define MAX_HASH_VALUE 47 +/* maximum key range = 42, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +mapping_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 2, 29, + 24, 34, 31, 0, 15, 14, 10, 13, 2, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 7, 48, 48, 48, 48, 48, 48, + 11, 48, 2, 7, 48, 48, 48, 1, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48 + }; + return len + asso_values[(unsigned char)str[3]+3] + asso_values[(unsigned char)str[len - 1]]; +} + +struct stringpool_t + { + char stringpool_str6[sizeof("CP1255")]; + char stringpool_str7[sizeof("CP775")]; + char stringpool_str8[sizeof("CP1250")]; + char stringpool_str9[sizeof("EUC-TW")]; + char stringpool_str10[sizeof("EUC-KR")]; + char stringpool_str11[sizeof("TIS-620")]; + char stringpool_str12[sizeof("ISO-8859-5")]; + char stringpool_str13[sizeof("ISO-8859-15")]; + char stringpool_str14[sizeof("BIG5")]; + char stringpool_str15[sizeof("CP855")]; + char stringpool_str16[sizeof("CP1258")]; + char stringpool_str17[sizeof("CP850")]; + char stringpool_str18[sizeof("CP865")]; + char stringpool_str19[sizeof("EUC-JP")]; + char stringpool_str20[sizeof("CP1257")]; + char stringpool_str21[sizeof("CP1256")]; + char stringpool_str22[sizeof("ISO-8859-8")]; + char stringpool_str23[sizeof("SHIFT_JIS")]; + char stringpool_str25[sizeof("ISO-8859-9")]; + char stringpool_str26[sizeof("ISO-8859-7")]; + char stringpool_str27[sizeof("ISO-8859-6")]; + char stringpool_str29[sizeof("CP857")]; + char stringpool_str30[sizeof("CP1252")]; + char stringpool_str31[sizeof("CP869")]; + char stringpool_str32[sizeof("CP949")]; + char stringpool_str33[sizeof("CP866")]; + char stringpool_str34[sizeof("CP437")]; + char stringpool_str35[sizeof("CP1251")]; + char stringpool_str36[sizeof("ISO-8859-2")]; + char stringpool_str37[sizeof("CP1254")]; + char stringpool_str38[sizeof("CP874")]; + char stringpool_str39[sizeof("CP852")]; + char stringpool_str40[sizeof("CP1253")]; + char stringpool_str41[sizeof("ISO-8859-1")]; + char stringpool_str42[sizeof("CP862")]; + char stringpool_str43[sizeof("ISO-8859-4")]; + char stringpool_str46[sizeof("ISO-8859-3")]; + char stringpool_str47[sizeof("CP861")]; + }; +static const struct stringpool_t stringpool_contents = + { + "CP1255", + "CP775", + "CP1250", + "EUC-TW", + "EUC-KR", + "TIS-620", + "ISO-8859-5", + "ISO-8859-15", + "BIG5", + "CP855", + "CP1258", + "CP850", + "CP865", + "EUC-JP", + "CP1257", + "CP1256", + "ISO-8859-8", + "SHIFT_JIS", + "ISO-8859-9", + "ISO-8859-7", + "ISO-8859-6", + "CP857", + "CP1252", + "CP869", + "CP949", + "CP866", + "CP437", + "CP1251", + "ISO-8859-2", + "CP1254", + "CP874", + "CP852", + "CP1253", + "ISO-8859-1", + "CP862", + "ISO-8859-4", + "ISO-8859-3", + "CP861" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct mapping mappings[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 41 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str6, "cp1255"}, +#line 24 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str7, "cp775"}, +#line 36 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str8, "cp1250"}, +#line 47 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str9, "eucTW"}, +#line 46 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str10, "eucKR"}, +#line 50 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str11, "TACTIS"}, +#line 17 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str12, "ISO8859-5"}, +#line 22 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str13, "ISO8859-15"}, +#line 48 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str14, "big5"}, +#line 27 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str15, "cp855"}, +#line 44 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str16, "cp1258"}, +#line 25 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str17, "cp850"}, +#line 31 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str18, "cp865"}, +#line 45 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str19, "eucJP"}, +#line 43 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str20, "cp1257"}, +#line 42 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str21, "cp1256"}, +#line 20 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str22, "ISO8859-8"}, +#line 49 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str23, "SJIS"}, + {-1}, +#line 21 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str25, "ISO8859-9"}, +#line 19 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str26, "ISO8859-7"}, +#line 18 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str27, "ISO8859-6"}, + {-1}, +#line 28 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str29, "cp857"}, +#line 38 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str30, "cp1252"}, +#line 33 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str31, "cp869"}, +#line 35 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str32, "KSC5601"}, +#line 32 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str33, "cp866"}, +#line 23 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str34, "cp437"}, +#line 37 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str35, "cp1251"}, +#line 14 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str36, "ISO8859-2"}, +#line 40 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str37, "cp1254"}, +#line 34 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str38, "cp874"}, +#line 26 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str39, "cp852"}, +#line 39 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str40, "cp1253"}, +#line 13 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str41, "ISO8859-1"}, +#line 30 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str42, "cp862"}, +#line 16 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str43, "ISO8859-4"}, + {-1}, {-1}, +#line 15 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str46, "ISO8859-3"}, +#line 29 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str47, "cp861"} + }; + +#ifdef __GNUC__ +__inline +#ifdef __GNUC_STDC_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct mapping * +mapping_lookup (register const char *str, register unsigned int len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = mapping_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register int o = mappings[key].standard_name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &mappings[key]; + } + } + } + return 0; +} diff --git a/lib/iconv_open-solaris.gperf b/lib/iconv_open-solaris.gperf new file mode 100644 index 0000000..7d7da38 --- /dev/null +++ b/lib/iconv_open-solaris.gperf @@ -0,0 +1,30 @@ +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On Solaris 10, look in the "iconv -l" output. Some aliases are advertised but +# not actually supported by the iconv() function and by the 'iconv' program. +# For example: +# $ echo abc | iconv -f 646 -t ISO-8859-1 +# Not supported 646 to ISO-8859-1 +# $ echo abc | iconv -f 646 -t ISO8859-1 +$ abc +ASCII, "646" +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-3, "ISO8859-3" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "ISO8859-8" +ISO-8859-9, "ISO8859-9" +ISO-8859-15, "ISO8859-15" +CP1251, "ansi-1251" diff --git a/lib/iconv_open-solaris.h b/lib/iconv_open-solaris.h new file mode 100644 index 0000000..2963145 --- /dev/null +++ b/lib/iconv_open-solaris.h @@ -0,0 +1,190 @@ +/* ANSI-C code produced by gperf version 3.0.3 */ +/* Command-line: gperf -m 10 ./iconv_open-solaris.gperf */ +/* Computed positions: -k'10' */ + +#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 not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." +#endif + +#line 1 "./iconv_open-solaris.gperf" +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; + +#define TOTAL_KEYWORDS 13 +#define MIN_WORD_LENGTH 5 +#define MAX_WORD_LENGTH 11 +#define MIN_HASH_VALUE 5 +#define MAX_HASH_VALUE 19 +/* maximum key range = 15, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +mapping_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, + 9, 8, 7, 6, 5, 4, 3, 2, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20 + }; + register int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[9]]; + /*FALLTHROUGH*/ + case 9: + case 8: + case 7: + case 6: + case 5: + break; + } + return hval; +} + +struct stringpool_t + { + char stringpool_str5[sizeof("ASCII")]; + char stringpool_str6[sizeof("CP1251")]; + char stringpool_str7[sizeof("$ abc")]; + char stringpool_str10[sizeof("ISO-8859-1")]; + char stringpool_str11[sizeof("ISO-8859-15")]; + char stringpool_str12[sizeof("ISO-8859-9")]; + char stringpool_str13[sizeof("ISO-8859-8")]; + char stringpool_str14[sizeof("ISO-8859-7")]; + char stringpool_str15[sizeof("ISO-8859-6")]; + char stringpool_str16[sizeof("ISO-8859-5")]; + char stringpool_str17[sizeof("ISO-8859-4")]; + char stringpool_str18[sizeof("ISO-8859-3")]; + char stringpool_str19[sizeof("ISO-8859-2")]; + }; +static const struct stringpool_t stringpool_contents = + { + "ASCII", + "CP1251", + "$ abc", + "ISO-8859-1", + "ISO-8859-15", + "ISO-8859-9", + "ISO-8859-8", + "ISO-8859-7", + "ISO-8859-6", + "ISO-8859-5", + "ISO-8859-4", + "ISO-8859-3", + "ISO-8859-2" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct mapping mappings[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 19 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str5, "646"}, +#line 30 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str6, "ansi-1251"}, +#line 18 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str7}, + {-1}, {-1}, +#line 20 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str10, "ISO8859-1"}, +#line 29 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str11, "ISO8859-15"}, +#line 28 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str12, "ISO8859-9"}, +#line 27 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str13, "ISO8859-8"}, +#line 26 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str14, "ISO8859-7"}, +#line 25 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str15, "ISO8859-6"}, +#line 24 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str16, "ISO8859-5"}, +#line 23 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str17, "ISO8859-4"}, +#line 22 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str18, "ISO8859-3"}, +#line 21 "./iconv_open-solaris.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str19, "ISO8859-2"} + }; + +#ifdef __GNUC__ +__inline +#ifdef __GNUC_STDC_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct mapping * +mapping_lookup (register const char *str, register unsigned int len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = mapping_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register int o = mappings[key].standard_name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &mappings[key]; + } + } + } + return 0; +} diff --git a/lib/iconv_open.c b/lib/iconv_open.c new file mode 100644 index 0000000..91ede00 --- /dev/null +++ b/lib/iconv_open.c @@ -0,0 +1,175 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Character set conversion. + Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include <config.h> + +/* Specification. */ +#include <iconv.h> + +#include <errno.h> +#include <string.h> +#include "c-ctype.h" +#include "c-strcase.h" + +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + +/* Namespace cleanliness. */ +#define mapping_lookup rpl_iconv_open_mapping_lookup + +/* The macro ICONV_FLAVOR is defined to one of these or undefined. */ + +#define ICONV_FLAVOR_AIX "iconv_open-aix.h" +#define ICONV_FLAVOR_HPUX "iconv_open-hpux.h" +#define ICONV_FLAVOR_IRIX "iconv_open-irix.h" +#define ICONV_FLAVOR_OSF "iconv_open-osf.h" +#define ICONV_FLAVOR_SOLARIS "iconv_open-solaris.h" + +#ifdef ICONV_FLAVOR +# include ICONV_FLAVOR +#endif + +iconv_t +rpl_iconv_open (const char *tocode, const char *fromcode) +#undef iconv_open +{ + char fromcode_upper[32]; + char tocode_upper[32]; + char *fromcode_upper_end; + char *tocode_upper_end; + +#if REPLACE_ICONV_UTF + /* Special handling of conversion between UTF-8 and UTF-{16,32}{BE,LE}. + Do this here, before calling the real iconv_open(), because OSF/1 5.1 + iconv() to these encoding inserts a BOM, which is wrong. + We do not need to handle conversion between arbitrary encodings and + UTF-{16,32}{BE,LE}, because the 'striconveh' module implements two-step + conversion throough UTF-8. + The _ICONV_* constants are chosen to be disjoint from any iconv_t + returned by the system's iconv_open() functions. Recall that iconv_t + is a scalar type. */ + if (c_toupper (fromcode[0]) == 'U' + && c_toupper (fromcode[1]) == 'T' + && c_toupper (fromcode[2]) == 'F' + && fromcode[3] == '-') + { + if (c_toupper (tocode[0]) == 'U' + && c_toupper (tocode[1]) == 'T' + && c_toupper (tocode[2]) == 'F' + && tocode[3] == '-') + { + if (strcmp (fromcode + 4, "8") == 0) + { + if (c_strcasecmp (tocode + 4, "16BE") == 0) + return _ICONV_UTF8_UTF16BE; + if (c_strcasecmp (tocode + 4, "16LE") == 0) + return _ICONV_UTF8_UTF16LE; + if (c_strcasecmp (tocode + 4, "32BE") == 0) + return _ICONV_UTF8_UTF32BE; + if (c_strcasecmp (tocode + 4, "32LE") == 0) + return _ICONV_UTF8_UTF32LE; + } + else if (strcmp (tocode + 4, "8") == 0) + { + if (c_strcasecmp (fromcode + 4, "16BE") == 0) + return _ICONV_UTF16BE_UTF8; + if (c_strcasecmp (fromcode + 4, "16LE") == 0) + return _ICONV_UTF16LE_UTF8; + if (c_strcasecmp (fromcode + 4, "32BE") == 0) + return _ICONV_UTF32BE_UTF8; + if (c_strcasecmp (fromcode + 4, "32LE") == 0) + return _ICONV_UTF32LE_UTF8; + } + } + } +#endif + + /* Do *not* add special support for 8-bit encodings like ASCII or ISO-8859-1 + here. This would lead to programs that work in some locales (such as the + "C" or "en_US" locales) but do not work in East Asian locales. It is + better if programmers make their programs depend on GNU libiconv (except + on glibc systems), e.g. by using the AM_ICONV macro and documenting the + dependency in an INSTALL or DEPENDENCIES file. */ + + /* Try with the original names first. + This covers the case when fromcode or tocode is a lowercase encoding name + that is understood by the system's iconv_open but not listed in our + mappings table. */ + { + iconv_t cd = iconv_open (tocode, fromcode); + if (cd != (iconv_t)(-1)) + return cd; + } + + /* Convert the encodings to upper case, because + 1. in the arguments of iconv_open() on AIX, HP-UX, and OSF/1 the case + matters, + 2. it makes searching in the table faster. */ + { + const char *p = fromcode; + char *q = fromcode_upper; + while ((*q = c_toupper (*p)) != '\0') + { + p++; + q++; + if (q == &fromcode_upper[SIZEOF (fromcode_upper)]) + { + errno = EINVAL; + return (iconv_t)(-1); + } + } + fromcode_upper_end = q; + } + + { + const char *p = tocode; + char *q = tocode_upper; + while ((*q = c_toupper (*p)) != '\0') + { + p++; + q++; + if (q == &tocode_upper[SIZEOF (tocode_upper)]) + { + errno = EINVAL; + return (iconv_t)(-1); + } + } + tocode_upper_end = q; + } + +#ifdef ICONV_FLAVOR + /* Apply the mappings. */ + { + const struct mapping *m = + mapping_lookup (fromcode_upper, fromcode_upper_end - fromcode_upper); + + fromcode = (m != NULL ? m->vendor_name : fromcode_upper); + } + { + const struct mapping *m = + mapping_lookup (tocode_upper, tocode_upper_end - tocode_upper); + + tocode = (m != NULL ? m->vendor_name : tocode_upper); + } +#else + fromcode = fromcode_upper; + tocode = tocode_upper; +#endif + + return iconv_open (tocode, fromcode); +} diff --git a/lib/ignore-value.h b/lib/ignore-value.h new file mode 100644 index 0000000..2eb6918 --- /dev/null +++ b/lib/ignore-value.h @@ -0,0 +1,37 @@ +/* ignore a function return without a compiler warning + + Copyright (C) 2008-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Jim Meyering. */ + +/* Use these functions to avoid a warning when using a function declared with + gcc's warn_unused_result attribute, but for which you really do want to + ignore the result. Traditionally, people have used a "(void)" cast to + indicate that a function's return value is deliberately unused. However, + if the function is declared with __attribute__((warn_unused_result)), + gcc issues a warning even with the cast. + + Caution: most of the time, you really should heed gcc's warning, and + check the return value. However, in those exceptional cases in which + you're sure you know what you're doing, use this function. + + For the record, here's one of the ignorable warnings: + "copy.c:233: warning: ignoring return value of 'fchown', + declared with attribute warn_unused_result". */ + +static inline void ignore_value (int i) { (void) i; } +static inline void ignore_ptr (void* p) { (void) p; } +/* FIXME: what about aggregate types? */ diff --git a/lib/imaxtostr.c b/lib/imaxtostr.c new file mode 100644 index 0000000..34ef96c --- /dev/null +++ b/lib/imaxtostr.c @@ -0,0 +1,4 @@ +#define inttostr imaxtostr +#define inttype intmax_t +#define inttype_is_signed 1 +#include "inttostr.c" diff --git a/lib/intprops.h b/lib/intprops.h new file mode 100644 index 0000000..46f4d47 --- /dev/null +++ b/lib/intprops.h @@ -0,0 +1,83 @@ +/* intprops.h -- properties of integer types + + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert. */ + +#ifndef GL_INTPROPS_H +# define GL_INTPROPS_H + +# include <limits.h> + +/* 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 negative values of the signed integer type T use two's + complement, ones' complement, or signed magnitude representation, + respectively. Much GNU code assumes two's complement, but some + people like to be portable to all possible C hosts. */ +# define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) +# define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) +# define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) + +/* True if the arithmetic type T is signed. */ +# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + +/* The maximum and minimum values for the integer type T. These + macros have undefined behavior if T is signed and has padding bits. + If this is a problem for you, please let us know how to fix it for + your host. */ +# define TYPE_MINIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) 0 \ + : TYPE_SIGNED_MAGNITUDE (t) \ + ? ~ (t) 0 \ + : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +# define TYPE_MAXIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) -1 \ + : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) + +/* Return zero if T can be determined to be an unsigned type. + Otherwise, return 1. + When compiling with GCC, INT_STRLEN_BOUND uses this macro to obtain a + tighter bound. Otherwise, it overestimates the true bound by one byte + when applied to unsigned types of size 2, 4, 16, ... bytes. + The symbol signed_type_or_expr__ is private to this header file. */ +# if __GNUC__ >= 2 +# define signed_type_or_expr__(t) TYPE_SIGNED (__typeof__ (t)) +# else +# define signed_type_or_expr__(t) 1 +# endif + +/* 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 - signed_type_or_expr__ (t)) * 146 / 485 \ + + signed_type_or_expr__ (t) + 1) + +/* 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) + +#endif /* GL_INTPROPS_H */ diff --git a/lib/inttostr.c b/lib/inttostr.c new file mode 100644 index 0000000..7a4a47f --- /dev/null +++ b/lib/inttostr.c @@ -0,0 +1,54 @@ +/* inttostr.c -- convert integers to printable strings + + Copyright (C) 2001, 2006, 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert */ + +#include <config.h> + +#include "inttostr.h" +#include "verify.h" + +/* Convert I to a printable string in BUF, which must be at least + INT_BUFSIZE_BOUND (INTTYPE) bytes long. Return the address of the + printable string, which need not start at BUF. */ + +char * +inttostr (inttype i, char *buf) +{ + verify (TYPE_SIGNED (inttype) == inttype_is_signed); + char *p = buf + INT_STRLEN_BOUND (inttype); + *p = 0; + +#if inttype_is_signed + if (i < 0) + { + do + *--p = '0' - i % 10; + while ((i /= 10) != 0); + + *--p = '-'; + } + else +#endif + { + do + *--p = '0' + i % 10; + while ((i /= 10) != 0); + } + + return p; +} diff --git a/lib/inttostr.h b/lib/inttostr.h new file mode 100644 index 0000000..f11a5ff --- /dev/null +++ b/lib/inttostr.h @@ -0,0 +1,45 @@ +/* inttostr.h -- convert integers to printable strings + + Copyright (C) 2001-2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert */ + +#include <stdint.h> +#include <sys/types.h> + +#include "intprops.h" + +#ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_MINOR__ +# define __GNUC_PREREQ(maj, min) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) +# else +# define __GNUC_PREREQ(maj, min) 0 +# endif +#endif + +#if __GNUC_PREREQ (3,4) +# undef __attribute_warn_unused_result__ +# define __attribute_warn_unused_result__ \ + __attribute__ ((__warn_unused_result__)) +#else +# define __attribute_warn_unused_result__ /* empty */ +#endif + +char *offtostr (off_t, char *) __attribute_warn_unused_result__; +char *imaxtostr (intmax_t, char *) __attribute_warn_unused_result__; +char *umaxtostr (uintmax_t, char *) __attribute_warn_unused_result__; +char *uinttostr (unsigned int, char *) __attribute_warn_unused_result__; diff --git a/lib/inttypes.in.h b/lib/inttypes.in.h new file mode 100644 index 0000000..aef157d --- /dev/null +++ b/lib/inttypes.in.h @@ -0,0 +1,1104 @@ +/* Copyright (C) 2006-2010 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 <http://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 + +/* 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@ +# @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> + +#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 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 __cplusplus || defined __STDC_FORMAT_MACROS + +# 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 + +#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_DECL_IMAXDIV@ +typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; +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 !@HAVE_DECL_STRTOIMAX@ +extern intmax_t strtoimax (const char *, char **, int) _GL_ARG_NONNULL ((1)); +# endif +#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 !@HAVE_DECL_STRTOUMAX@ +extern uintmax_t strtoumax (const char *, char **, int) _GL_ARG_NONNULL ((1)); +# endif +#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/lib/langinfo.in.h b/lib/langinfo.in.h new file mode 100644 index 0000000..5a41111 --- /dev/null +++ b/lib/langinfo.in.h @@ -0,0 +1,164 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Substitute for and wrapper around <langinfo.h>. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* + * 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_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_LANGINFO_H@ +# @INCLUDE_NEXT@ @NEXT_LANGINFO_H@ +#endif + +#ifndef _GL_LANGINFO_H +#define _GL_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. */ +typedef int nl_item; + +/* nl_langinfo items of the LC_CTYPE category */ +# define CODESET 10000 +/* nl_langinfo items of the LC_NUMERIC category */ +# define RADIXCHAR 10001 +# define THOUSEP 10002 +/* 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 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 +/* 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_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 + +#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 /* _GL_LANGINFO_H */ +#endif /* _GL_LANGINFO_H */ diff --git a/lib/localcharset.c b/lib/localcharset.c new file mode 100644 index 0000000..4255174 --- /dev/null +++ b/lib/localcharset.c @@ -0,0 +1,551 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Determine a canonical name for the current locale's character encoding. + + Copyright (C) 2000-2006, 2008-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Bruno Haible <bruno@clisp.org>. */ + +#include <config.h> + +/* Specification. */ +#include "localcharset.h" + +#include <fcntl.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. MacOS X 10.3 or newer */ +#endif + +#if defined _WIN32 || defined __WIN32__ +# define WIN32_NATIVE +#endif + +#if defined __EMX__ +/* Assume EMX program runs on OS/2, even if compiled under DOS. */ +# ifndef OS2 +# define OS2 +# endif +#endif + +#if !defined WIN32_NATIVE +# include <unistd.h> +# if HAVE_LANGINFO_CODESET +# include <langinfo.h> +# else +# if 0 /* see comment below */ +# include <locale.h> +# endif +# endif +# ifdef __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +# endif +#elif defined WIN32_NATIVE +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +#endif +#if defined OS2 +# define INCL_DOS +# include <os2.h> +#endif + +#if ENABLE_RELOCATABLE +# include "relocatable.h" +#else +# define relocate(pathname) (pathname) +#endif + +/* Get LIBDIR. */ +#ifndef LIBDIR +# include "configmake.h" +#endif + +/* Define O_NOFOLLOW to 0 on platforms where it does not exist. */ +#ifndef O_NOFOLLOW +# define O_NOFOLLOW 0 +#endif + +#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Win32, Cygwin, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#endif + +#ifndef DIRECTORY_SEPARATOR +# define DIRECTORY_SEPARATOR '/' +#endif + +#ifndef ISSLASH +# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) +#endif + +#if HAVE_DECL_GETC_UNLOCKED +# undef getc +# define getc getc_unlocked +#endif + +/* The following static variable is declared 'volatile' to avoid a + possible multithread problem in the function get_charset_aliases. If we + are running in a threaded environment, and if two threads initialize + 'charset_aliases' simultaneously, both will produce the same value, + and everything will be ok if the two assignments to 'charset_aliases' + are atomic. But I don't know what will happen if the two assignments mix. */ +#if __STDC__ != 1 +# define volatile /* empty */ +#endif +/* Pointer to the contents of the charset.alias file, if it has already been + read, else NULL. Its format is: + ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ +static const char * volatile charset_aliases; + +/* Return a pointer to the contents of the charset.alias file. */ +static const char * +get_charset_aliases (void) +{ + const char *cp; + + cp = charset_aliases; + if (cp == NULL) + { +#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) + const char *dir; + const char *base = "charset.alias"; + char *file_name; + + /* Make it possible to override the charset.alias location. This is + necessary for running the testsuite before "make install". */ + dir = getenv ("CHARSETALIASDIR"); + if (dir == NULL || dir[0] == '\0') + dir = relocate (LIBDIR); + + /* Concatenate dir and base into freshly allocated file_name. */ + { + size_t dir_len = strlen (dir); + size_t base_len = strlen (base); + int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); + file_name = (char *) malloc (dir_len + add_slash + base_len + 1); + if (file_name != NULL) + { + memcpy (file_name, dir, dir_len); + if (add_slash) + file_name[dir_len] = DIRECTORY_SEPARATOR; + memcpy (file_name + dir_len + add_slash, base, base_len + 1); + } + } + + if (file_name == NULL) + /* Out of memory. Treat the file as empty. */ + cp = ""; + else + { + int fd; + + /* Open the file. Reject symbolic links on platforms that support + O_NOFOLLOW. This is a security feature. Without it, an attacker + could retrieve parts of the contents (namely, the tail of the + first line that starts with "* ") of an arbitrary file by placing + a symbolic link to that file under the name "charset.alias" in + some writable directory and defining the environment variable + CHARSETALIASDIR to point to that directory. */ + fd = open (file_name, + O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0)); + if (fd < 0) + /* File not found. Treat it as empty. */ + cp = ""; + else + { + FILE *fp; + + fp = fdopen (fd, "r"); + if (fp == NULL) + { + /* Out of memory. Treat the file as empty. */ + close (fd); + cp = ""; + } + else + { + /* Parse the file's contents. */ + char *res_ptr = NULL; + size_t res_size = 0; + + for (;;) + { + int c; + char buf1[50+1]; + char buf2[50+1]; + size_t l1, l2; + char *old_res_ptr; + + c = getc (fp); + if (c == EOF) + break; + if (c == '\n' || c == ' ' || c == '\t') + continue; + if (c == '#') + { + /* Skip comment, to end of line. */ + do + c = getc (fp); + while (!(c == EOF || c == '\n')); + if (c == EOF) + break; + continue; + } + ungetc (c, fp); + if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) + break; + l1 = strlen (buf1); + l2 = strlen (buf2); + old_res_ptr = res_ptr; + if (res_size == 0) + { + res_size = l1 + 1 + l2 + 1; + res_ptr = (char *) malloc (res_size + 1); + } + else + { + res_size += l1 + 1 + l2 + 1; + res_ptr = (char *) realloc (res_ptr, res_size + 1); + } + if (res_ptr == NULL) + { + /* Out of memory. */ + res_size = 0; + if (old_res_ptr != NULL) + free (old_res_ptr); + break; + } + strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); + strcpy (res_ptr + res_size - (l2 + 1), buf2); + } + fclose (fp); + if (res_size == 0) + cp = ""; + else + { + *(res_ptr + res_size) = '\0'; + cp = res_ptr; + } + } + } + + free (file_name); + } + +#else + +# if defined DARWIN7 + /* To avoid the trouble of installing a file that is shared by many + GNU packages -- many packaging systems have problems with this --, + simply inline the aliases here. */ + cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" + "ISO8859-2" "\0" "ISO-8859-2" "\0" + "ISO8859-4" "\0" "ISO-8859-4" "\0" + "ISO8859-5" "\0" "ISO-8859-5" "\0" + "ISO8859-7" "\0" "ISO-8859-7" "\0" + "ISO8859-9" "\0" "ISO-8859-9" "\0" + "ISO8859-13" "\0" "ISO-8859-13" "\0" + "ISO8859-15" "\0" "ISO-8859-15" "\0" + "KOI8-R" "\0" "KOI8-R" "\0" + "KOI8-U" "\0" "KOI8-U" "\0" + "CP866" "\0" "CP866" "\0" + "CP949" "\0" "CP949" "\0" + "CP1131" "\0" "CP1131" "\0" + "CP1251" "\0" "CP1251" "\0" + "eucCN" "\0" "GB2312" "\0" + "GB2312" "\0" "GB2312" "\0" + "eucJP" "\0" "EUC-JP" "\0" + "eucKR" "\0" "EUC-KR" "\0" + "Big5" "\0" "BIG5" "\0" + "Big5HKSCS" "\0" "BIG5-HKSCS" "\0" + "GBK" "\0" "GBK" "\0" + "GB18030" "\0" "GB18030" "\0" + "SJIS" "\0" "SHIFT_JIS" "\0" + "ARMSCII-8" "\0" "ARMSCII-8" "\0" + "PT154" "\0" "PT154" "\0" + /*"ISCII-DEV" "\0" "?" "\0"*/ + "*" "\0" "UTF-8" "\0"; +# endif + +# if defined VMS + /* To avoid the troubles of an extra file charset.alias_vms in the + sources of many GNU packages, simply inline the aliases here. */ + /* 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". */ + cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" + "ISO8859-2" "\0" "ISO-8859-2" "\0" + "ISO8859-5" "\0" "ISO-8859-5" "\0" + "ISO8859-7" "\0" "ISO-8859-7" "\0" + "ISO8859-8" "\0" "ISO-8859-8" "\0" + "ISO8859-9" "\0" "ISO-8859-9" "\0" + /* Japanese */ + "eucJP" "\0" "EUC-JP" "\0" + "SJIS" "\0" "SHIFT_JIS" "\0" + "DECKANJI" "\0" "DEC-KANJI" "\0" + "SDECKANJI" "\0" "EUC-JP" "\0" + /* Chinese */ + "eucTW" "\0" "EUC-TW" "\0" + "DECHANYU" "\0" "DEC-HANYU" "\0" + "DECHANZI" "\0" "GB2312" "\0" + /* Korean */ + "DECKOREAN" "\0" "EUC-KR" "\0"; +# endif + +# if defined WIN32_NATIVE || defined __CYGWIN__ + /* To avoid the troubles of installing a separate file in the same + directory as the DLL and of retrieving the DLL's directory at + runtime, simply inline the aliases here. */ + + cp = "CP936" "\0" "GBK" "\0" + "CP1361" "\0" "JOHAB" "\0" + "CP20127" "\0" "ASCII" "\0" + "CP20866" "\0" "KOI8-R" "\0" + "CP20936" "\0" "GB2312" "\0" + "CP21866" "\0" "KOI8-RU" "\0" + "CP28591" "\0" "ISO-8859-1" "\0" + "CP28592" "\0" "ISO-8859-2" "\0" + "CP28593" "\0" "ISO-8859-3" "\0" + "CP28594" "\0" "ISO-8859-4" "\0" + "CP28595" "\0" "ISO-8859-5" "\0" + "CP28596" "\0" "ISO-8859-6" "\0" + "CP28597" "\0" "ISO-8859-7" "\0" + "CP28598" "\0" "ISO-8859-8" "\0" + "CP28599" "\0" "ISO-8859-9" "\0" + "CP28605" "\0" "ISO-8859-15" "\0" + "CP38598" "\0" "ISO-8859-8" "\0" + "CP51932" "\0" "EUC-JP" "\0" + "CP51936" "\0" "GB2312" "\0" + "CP51949" "\0" "EUC-KR" "\0" + "CP51950" "\0" "EUC-TW" "\0" + "CP54936" "\0" "GB18030" "\0" + "CP65001" "\0" "UTF-8" "\0"; +# endif +#endif + + charset_aliases = cp; + } + + return cp; +} + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed in config.charset. + 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; + const char *aliases; + +#if !(defined WIN32_NATIVE || defined OS2) + +# if HAVE_LANGINFO_CODESET + + /* Most systems support nl_langinfo (CODESET) nowadays. */ + codeset = nl_langinfo (CODESET); + +# ifdef __CYGWIN__ + /* Cygwin 1.5.x does not have locales. nl_langinfo (CODESET) always + returns "US-ASCII". As long as this is not fixed, 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; + } + } + } + + /* Woe32 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 + +# 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 SunOS 4 or 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"); + } + } + + /* On some old systems, one used to set locale = "iso8859_1". On others, + you set it to "language_COUNTRY.charset". In any case, we resolve it + through the charset.alias file. */ + codeset = locale; + +# endif + +#elif defined WIN32_NATIVE + + static char buf[2 + 10 + 1]; + + /* Woe32 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; + + /* 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; + } + } + + /* Resolve through the charset.alias file. */ + codeset = locale; + } + else + { + /* 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; + } + } + +#endif + + if (codeset == NULL) + /* The canonical name cannot be determined. */ + codeset = ""; + + /* Resolve alias. */ + for (aliases = get_charset_aliases (); + *aliases != '\0'; + aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) + if (strcmp (codeset, aliases) == 0 + || (aliases[0] == '*' && aliases[1] == '\0')) + { + codeset = aliases + strlen (aliases) + 1; + break; + } + + /* 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"; + + return codeset; +} diff --git a/lib/localcharset.h b/lib/localcharset.h new file mode 100644 index 0000000..9a67c0d --- /dev/null +++ b/lib/localcharset.h @@ -0,0 +1,43 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Determine a canonical name for the current locale's character encoding. + Copyright (C) 2000-2003, 2009-2010 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#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 in config.charset. + 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); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _LOCALCHARSET_H */ diff --git a/lib/lstat.c b/lib/lstat.c new file mode 100644 index 0000000..586ab16 --- /dev/null +++ b/lib/lstat.c @@ -0,0 +1,91 @@ +/* Work around a bug of lstat on some systems + + Copyright (C) 1997-2006, 2008-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* written by Jim Meyering */ + +#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. */ +# define __need_system_sys_stat_h +# include <sys/types.h> +# include <sys/stat.h> +# undef __need_system_sys_stat_h + +static inline int +orig_lstat (const char *filename, struct stat *buf) +{ + return lstat (filename, buf); +} + +/* Specification. */ +# include <sys/stat.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) +{ + size_t len; + int lstat_result = orig_lstat (file, sbuf); + + if (lstat_result != 0) + return lstat_result; + + /* 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. */ + len = strlen (file); + if (file[len - 1] != '/' || S_ISDIR (sbuf->st_mode)) + return 0; + + /* At this point, a trailing slash is only permitted 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; + } + return stat (file, sbuf); +} + +#endif /* HAVE_LSTAT */ diff --git a/lib/malloc.c b/lib/malloc.c new file mode 100644 index 0000000..d9eec75 --- /dev/null +++ b/lib/malloc.c @@ -0,0 +1,59 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* malloc() function that is glibc compatible. + + Copyright (C) 1997-1998, 2006-2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* written by Jim Meyering and Bruno Haible */ + +#include <config.h> +/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ +#ifdef malloc +# define NEED_MALLOC_GNU +# undef malloc +#endif + +/* Specification. */ +#include <stdlib.h> + +#include <errno.h> + +/* Call the system's malloc below. */ +#undef malloc + +/* 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; + +#ifdef 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/lib/malloca.c b/lib/malloca.c new file mode 100644 index 0000000..6b59638 --- /dev/null +++ b/lib/malloca.c @@ -0,0 +1,139 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Safe automatic memory allocation. + Copyright (C) 2003, 2006-2007, 2009-2010 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include <config.h> + +/* Specification. */ +#include "malloca.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. */ + +#if HAVE_ALLOCA + +/* Store the mmalloca() results in a hash table. This is needed to reliably + distinguish a mmalloca() result and an alloca() result. + + Although it is possible that the same pointer is returned by alloca() and + by mmalloca() at different times in the same application, it does not lead + to a bug in freea(), because: + - Before a pointer returned by alloca() can point into malloc()ed memory, + the function must return, and once this has happened the programmer must + not call freea() on it anyway. + - Before a pointer returned by mmalloca() can point into the stack, it + must be freed. The only function that can free it is freea(), and + when freea() frees it, it also removes it from the hash table. */ + +#define MAGIC_NUMBER 0x1415fb4a +#define MAGIC_SIZE sizeof (int) +/* This is how the header info would look like without any alignment + considerations. */ +struct preliminary_header { void *next; char room[MAGIC_SIZE]; }; +/* But the header's size must be a multiple of sa_alignment_max. */ +#define HEADER_SIZE \ + (((sizeof (struct preliminary_header) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max) +struct header { void *next; char room[HEADER_SIZE - sizeof (struct preliminary_header) + MAGIC_SIZE]; }; +/* Verify that HEADER_SIZE == sizeof (struct header). */ +typedef int verify1[2 * (HEADER_SIZE == sizeof (struct header)) - 1]; +/* We make the hash table quite big, so that during lookups the probability + of empty hash buckets is quite high. There is no need to make the hash + table resizable, because when the hash table gets filled so much that the + lookup becomes slow, it means that the application has memory leaks. */ +#define HASH_TABLE_SIZE 257 +static void * mmalloca_results[HASH_TABLE_SIZE]; + +#endif + +void * +mmalloca (size_t n) +{ +#if HAVE_ALLOCA + /* Allocate one more word, that serves as an indicator for malloc()ed + memory, so that freea() of an alloca() result is fast. */ + size_t nplus = n + HEADER_SIZE; + + if (nplus >= n) + { + char *p = (char *) malloc (nplus); + + if (p != NULL) + { + size_t slot; + + p += HEADER_SIZE; + + /* Put a magic number into the indicator word. */ + ((int *) p)[-1] = MAGIC_NUMBER; + + /* Enter p into the hash table. */ + slot = (unsigned long) p % HASH_TABLE_SIZE; + ((struct header *) (p - HEADER_SIZE))->next = mmalloca_results[slot]; + mmalloca_results[slot] = p; + + 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) +{ + /* mmalloca() may have returned NULL. */ + if (p != NULL) + { + /* Attempt to quickly distinguish the mmalloca() result - which has + a magic indicator word - and the alloca() result - which has an + uninitialized indicator word. It is for this test that sa_increment + additional bytes are allocated in the alloca() case. */ + if (((int *) p)[-1] == MAGIC_NUMBER) + { + /* Looks like a mmalloca() result. To see whether it really is one, + perform a lookup in the hash table. */ + size_t slot = (unsigned long) p % HASH_TABLE_SIZE; + void **chain = &mmalloca_results[slot]; + for (; *chain != NULL;) + { + if (*chain == p) + { + /* Found it. Remove it from the hash table and free it. */ + char *p_begin = (char *) p - HEADER_SIZE; + *chain = ((struct header *) p_begin)->next; + free (p_begin); + return; + } + chain = &((struct header *) ((char *) *chain - HEADER_SIZE))->next; + } + } + /* At this point, we know it was not a mmalloca() result. */ + } +} +#endif diff --git a/lib/malloca.h b/lib/malloca.h new file mode 100644 index 0000000..b0c78a3 --- /dev/null +++ b/lib/malloca.h @@ -0,0 +1,136 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Safe automatic memory allocation. + Copyright (C) 2003-2007, 2009-2010 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _MALLOCA_H +#define _MALLOCA_H + +#include <alloca.h> +#include <stddef.h> +#include <stdlib.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 an inline 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 - sa_increment \ + ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \ + : 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. */ +#if 1 +/* Cf. the definition of xalloc_oversized. */ +# define nmalloca(n, s) \ + ((n) > (size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) \ + ? NULL \ + : malloca ((n) * (s))) +#else +extern void * nmalloca (size_t n, size_t s); +#endif + + +#ifdef __cplusplus +} +#endif + + +/* ------------------- Auxiliary, non-public definitions ------------------- */ + +/* Determine the alignment of a type at compile time. */ +#if defined __GNUC__ +# 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, +/* The increment that guarantees room for a magic word must be >= sizeof (int) + and a multiple of sa_alignment_max. */ + sa_increment = ((sizeof (int) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max +}; + +#endif /* _MALLOCA_H */ diff --git a/lib/malloca.valgrind b/lib/malloca.valgrind new file mode 100644 index 0000000..52f0a50 --- /dev/null +++ b/lib/malloca.valgrind @@ -0,0 +1,7 @@ +# Suppress a valgrind message about use of uninitialized memory in freea(). +# This use is OK because it provides only a speedup. +{ + freea + Memcheck:Cond + fun:freea +} diff --git a/lib/mbchar.c b/lib/mbchar.c new file mode 100644 index 0000000..6ec0195 --- /dev/null +++ b/lib/mbchar.c @@ -0,0 +1,35 @@ +/* Copyright (C) 2001, 2006, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 <limits.h> + +#include "mbchar.h" + +#if IS_BASIC_ASCII + +/* Bit table of characters in the ISO C "basic character set". */ +const unsigned int is_basic_table [UCHAR_MAX / 32 + 1] = +{ + 0x00001a00, /* '\t' '\v' '\f' */ + 0xffffffef, /* ' '...'#' '%'...'?' */ + 0xfffffffe, /* 'A'...'Z' '[' '\\' ']' '^' '_' */ + 0x7ffffffe /* 'a'...'z' '{' '|' '}' '~' */ + /* The remaining bits are 0. */ +}; + +#endif /* IS_BASIC_ASCII */ diff --git a/lib/mbchar.h b/lib/mbchar.h new file mode 100644 index 0000000..012bfcb --- /dev/null +++ b/lib/mbchar.h @@ -0,0 +1,350 @@ +/* Multibyte character data type. + Copyright (C) 2001, 2005-2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>. */ + +/* A multibyte character is a short subsequence of a char* string, + representing a single wide character. + + We use multibyte characters instead of wide characters because of + the following goals: + 1) correct multibyte handling, i.e. operate according to the LC_CTYPE + locale, + 2) ease of maintenance, i.e. the maintainer needs not know all details + of the ISO C 99 standard, + 3) don't fail grossly if the input is not in the encoding set by the + locale, because often different encodings are in use in the same + countries (ISO-8859-1/UTF-8, EUC-JP/Shift_JIS, ...), + 4) fast in the case of ASCII characters, + 5) portability, i.e. don't make unportable assumptions about wchar_t. + + Multibyte characters are only accessed through the mb* macros. + + mb_ptr (mbc) + return a pointer to the beginning of the multibyte sequence. + + mb_len (mbc) + returns the number of bytes occupied by the multibyte sequence. + Always > 0. + + mb_iseq (mbc, sc) + returns true if mbc is the standard ASCII character sc. + + mb_isnul (mbc) + returns true if mbc is the nul character. + + mb_cmp (mbc1, mbc2) + returns a positive, zero, or negative value depending on whether mbc1 + sorts after, same or before mbc2. + + mb_casecmp (mbc1, mbc2) + returns a positive, zero, or negative value depending on whether mbc1 + sorts after, same or before mbc2, modulo upper/lowercase conversion. + + mb_equal (mbc1, mbc2) + returns true if mbc1 and mbc2 are equal. + + mb_caseequal (mbc1, mbc2) + returns true if mbc1 and mbc2 are equal modulo upper/lowercase conversion. + + mb_isalnum (mbc) + returns true if mbc is alphanumeric. + + mb_isalpha (mbc) + returns true if mbc is alphabetic. + + mb_isascii(mbc) + returns true if mbc is plain ASCII. + + mb_isblank (mbc) + returns true if mbc is a blank. + + mb_iscntrl (mbc) + returns true if mbc is a control character. + + mb_isdigit (mbc) + returns true if mbc is a decimal digit. + + mb_isgraph (mbc) + returns true if mbc is a graphic character. + + mb_islower (mbc) + returns true if mbc is lowercase. + + mb_isprint (mbc) + returns true if mbc is a printable character. + + mb_ispunct (mbc) + returns true if mbc is a punctuation character. + + mb_isspace (mbc) + returns true if mbc is a space character. + + mb_isupper (mbc) + returns true if mbc is uppercase. + + mb_isxdigit (mbc) + returns true if mbc is a hexadecimal digit. + + mb_width (mbc) + returns the number of columns on the output device occupied by mbc. + Always >= 0. + + mb_putc (mbc, stream) + outputs mbc on stream, a byte oriented FILE stream opened for output. + + mb_setascii (&mbc, sc) + assigns the standard ASCII character sc to mbc. + + mb_copy (&destmbc, &srcmbc) + copies srcmbc to destmbc. + + Here are the function prototypes of the macros. + + extern const char * mb_ptr (const mbchar_t mbc); + extern size_t mb_len (const mbchar_t mbc); + extern bool mb_iseq (const mbchar_t mbc, char sc); + extern bool mb_isnul (const mbchar_t mbc); + extern int mb_cmp (const mbchar_t mbc1, const mbchar_t mbc2); + extern int mb_casecmp (const mbchar_t mbc1, const mbchar_t mbc2); + extern bool mb_equal (const mbchar_t mbc1, const mbchar_t mbc2); + extern bool mb_caseequal (const mbchar_t mbc1, const mbchar_t mbc2); + extern bool mb_isalnum (const mbchar_t mbc); + extern bool mb_isalpha (const mbchar_t mbc); + extern bool mb_isascii (const mbchar_t mbc); + extern bool mb_isblank (const mbchar_t mbc); + extern bool mb_iscntrl (const mbchar_t mbc); + extern bool mb_isdigit (const mbchar_t mbc); + extern bool mb_isgraph (const mbchar_t mbc); + extern bool mb_islower (const mbchar_t mbc); + extern bool mb_isprint (const mbchar_t mbc); + extern bool mb_ispunct (const mbchar_t mbc); + extern bool mb_isspace (const mbchar_t mbc); + extern bool mb_isupper (const mbchar_t mbc); + extern bool mb_isxdigit (const mbchar_t mbc); + extern int mb_width (const mbchar_t mbc); + extern void mb_putc (const mbchar_t mbc, FILE *stream); + extern void mb_setascii (mbchar_t *new, char sc); + extern void mb_copy (mbchar_t *new, const mbchar_t *old); + */ + +#ifndef _MBCHAR_H +#define _MBCHAR_H 1 + +#include <stdbool.h> +#include <string.h> + +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before + <wchar.h>. */ +#include <stdio.h> +#include <time.h> +#include <wchar.h> +#include <wctype.h> + +#define MBCHAR_BUF_SIZE 24 + +struct mbchar +{ + const char *ptr; /* pointer to current character */ + size_t bytes; /* number of bytes of current character, > 0 */ + bool wc_valid; /* true if wc is a valid wide character */ + wchar_t wc; /* if wc_valid: the current character */ + char buf[MBCHAR_BUF_SIZE]; /* room for the bytes, used for file input only */ +}; + +/* EOF (not a real character) is represented with bytes = 0 and + wc_valid = false. */ + +typedef struct mbchar mbchar_t; + +/* Access the current character. */ +#define mb_ptr(mbc) ((mbc).ptr) +#define mb_len(mbc) ((mbc).bytes) + +/* Comparison of characters. */ +#define mb_iseq(mbc, sc) ((mbc).wc_valid && (mbc).wc == (sc)) +#define mb_isnul(mbc) ((mbc).wc_valid && (mbc).wc == 0) +#define mb_cmp(mbc1, mbc2) \ + ((mbc1).wc_valid \ + ? ((mbc2).wc_valid \ + ? (int) (mbc1).wc - (int) (mbc2).wc \ + : -1) \ + : ((mbc2).wc_valid \ + ? 1 \ + : (mbc1).bytes == (mbc2).bytes \ + ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ + : (mbc1).bytes < (mbc2).bytes \ + ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ + : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) +#define mb_casecmp(mbc1, mbc2) \ + ((mbc1).wc_valid \ + ? ((mbc2).wc_valid \ + ? (int) towlower ((mbc1).wc) - (int) towlower ((mbc2).wc) \ + : -1) \ + : ((mbc2).wc_valid \ + ? 1 \ + : (mbc1).bytes == (mbc2).bytes \ + ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ + : (mbc1).bytes < (mbc2).bytes \ + ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ + : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) +#define mb_equal(mbc1, mbc2) \ + ((mbc1).wc_valid && (mbc2).wc_valid \ + ? (mbc1).wc == (mbc2).wc \ + : (mbc1).bytes == (mbc2).bytes \ + && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) +#define mb_caseequal(mbc1, mbc2) \ + ((mbc1).wc_valid && (mbc2).wc_valid \ + ? towlower ((mbc1).wc) == towlower ((mbc2).wc) \ + : (mbc1).bytes == (mbc2).bytes \ + && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) + +/* <ctype.h>, <wctype.h> classification. */ +#define mb_isascii(mbc) \ + ((mbc).wc_valid && (mbc).wc >= 0 && (mbc).wc <= 127) +#define mb_isalnum(mbc) ((mbc).wc_valid && iswalnum ((mbc).wc)) +#define mb_isalpha(mbc) ((mbc).wc_valid && iswalpha ((mbc).wc)) +#define mb_isblank(mbc) ((mbc).wc_valid && iswblank ((mbc).wc)) +#define mb_iscntrl(mbc) ((mbc).wc_valid && iswcntrl ((mbc).wc)) +#define mb_isdigit(mbc) ((mbc).wc_valid && iswdigit ((mbc).wc)) +#define mb_isgraph(mbc) ((mbc).wc_valid && iswgraph ((mbc).wc)) +#define mb_islower(mbc) ((mbc).wc_valid && iswlower ((mbc).wc)) +#define mb_isprint(mbc) ((mbc).wc_valid && iswprint ((mbc).wc)) +#define mb_ispunct(mbc) ((mbc).wc_valid && iswpunct ((mbc).wc)) +#define mb_isspace(mbc) ((mbc).wc_valid && iswspace ((mbc).wc)) +#define mb_isupper(mbc) ((mbc).wc_valid && iswupper ((mbc).wc)) +#define mb_isxdigit(mbc) ((mbc).wc_valid && iswxdigit ((mbc).wc)) + +/* Extra <wchar.h> function. */ + +/* Unprintable characters appear as a small box of width 1. */ +#define MB_UNPRINTABLE_WIDTH 1 + +static inline int +mb_width_aux (wint_t wc) +{ + int w = wcwidth (wc); + /* For unprintable characters, arbitrarily return 0 for control characters + and MB_UNPRINTABLE_WIDTH otherwise. */ + return (w >= 0 ? w : iswcntrl (wc) ? 0 : MB_UNPRINTABLE_WIDTH); +} + +#define mb_width(mbc) \ + ((mbc).wc_valid ? mb_width_aux ((mbc).wc) : MB_UNPRINTABLE_WIDTH) + +/* Output. */ +#define mb_putc(mbc, stream) fwrite ((mbc).ptr, 1, (mbc).bytes, (stream)) + +/* Assignment. */ +#define mb_setascii(mbc, sc) \ + ((mbc)->ptr = (mbc)->buf, (mbc)->bytes = 1, (mbc)->wc_valid = 1, \ + (mbc)->wc = (mbc)->buf[0] = (sc)) + +/* Copying a character. */ +static inline void +mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc) +{ + if (old_mbc->ptr == &old_mbc->buf[0]) + { + memcpy (&new_mbc->buf[0], &old_mbc->buf[0], old_mbc->bytes); + new_mbc->ptr = &new_mbc->buf[0]; + } + else + new_mbc->ptr = old_mbc->ptr; + new_mbc->bytes = old_mbc->bytes; + if ((new_mbc->wc_valid = old_mbc->wc_valid)) + new_mbc->wc = old_mbc->wc; +} + + +/* is_basic(c) tests whether the single-byte character c is in the + ISO C "basic character set". + This is a convenience function, and is in this file only to share code + between mbiter_multi.h and mbfile_multi.h. */ +#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 ISO-646, not EBCDIC. */ +# define IS_BASIC_ASCII 1 + +extern const unsigned int is_basic_table[]; + +static inline bool +is_basic (char c) +{ + return (is_basic_table [(unsigned char) c >> 5] >> ((unsigned char) c & 31)) + & 1; +} + +#else + +static inline bool +is_basic (char c) +{ + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': 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 ';': case '<': case '=': 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': + case '[': case '\\': case ']': 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': case '{': case '|': case '}': case '~': + return 1; + default: + return 0; + } +} + +#endif + +#endif /* _MBCHAR_H */ diff --git a/lib/mbiter.h b/lib/mbiter.h new file mode 100644 index 0000000..6b73826 --- /dev/null +++ b/lib/mbiter.h @@ -0,0 +1,215 @@ +/* Iterating through multibyte strings: macros for multi-byte encodings. + Copyright (C) 2001, 2005, 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>. */ + +/* The macros in this file implement forward iteration through a + multi-byte string. + + With these macros, an iteration loop that looks like + + char *iter; + for (iter = buf; iter < buf + buflen; iter++) + { + do_something (*iter); + } + + becomes + + mbi_iterator_t iter; + for (mbi_init (iter, buf, buflen); mbi_avail (iter); mbi_advance (iter)) + { + do_something (mbi_cur_ptr (iter), mb_len (mbi_cur (iter))); + } + + The benefit of these macros over plain use of mbrtowc is: + - Handling of invalid multibyte sequences is possible without + making the code more complicated, while still preserving the + invalid multibyte sequences. + + mbi_iterator_t + is a type usable for variable declarations. + + mbi_init (iter, startptr, length) + initializes the iterator, starting at startptr and crossing length bytes. + + mbi_avail (iter) + returns true if there are more multibyte chracters available before + the end of string is reached. In this case, mbi_cur (iter) is + initialized to the next multibyte chracter. + + mbi_advance (iter) + advances the iterator by one multibyte character. + + mbi_cur (iter) + returns the current multibyte character, of type mbchar_t. All the + macros defined in mbchar.h can be used on it. + + mbi_cur_ptr (iter) + return a pointer to the beginning of the current multibyte character. + + mbi_reloc (iter, ptrdiff) + relocates iterator when the string is moved by ptrdiff bytes. + + mbi_copy (&destiter, &srciter) + copies srciter to destiter. + + Here are the function prototypes of the macros. + + extern void mbi_init (mbi_iterator_t iter, + const char *startptr, size_t length); + extern bool mbi_avail (mbi_iterator_t iter); + extern void mbi_advance (mbi_iterator_t iter); + extern mbchar_t mbi_cur (mbi_iterator_t iter); + extern const char * mbi_cur_ptr (mbi_iterator_t iter); + extern void mbi_reloc (mbi_iterator_t iter, ptrdiff_t ptrdiff); + extern void mbi_copy (mbi_iterator_t *new, const mbi_iterator_t *old); + */ + +#ifndef _MBITER_H +#define _MBITER_H 1 + +#include <assert.h> +#include <stdbool.h> +#include <stddef.h> +#include <string.h> + +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before + <wchar.h>. */ +#include <stdio.h> +#include <time.h> +#include <wchar.h> + +#include "mbchar.h" + +struct mbiter_multi +{ + const char *limit; /* pointer to end of string */ + bool in_shift; /* true if next byte may not be interpreted as ASCII */ + mbstate_t state; /* if in_shift: current shift state */ + bool next_done; /* true if mbi_avail has already filled the following */ + struct mbchar cur; /* the current character: + const char *cur.ptr pointer to current character + The following are only valid after mbi_avail. + size_t cur.bytes number of bytes of current character + bool cur.wc_valid true if wc is a valid wide character + wchar_t cur.wc if wc_valid: the current character + */ +}; + +static inline void +mbiter_multi_next (struct mbiter_multi *iter) +{ + if (iter->next_done) + return; + if (iter->in_shift) + goto with_shift; + /* Handle most ASCII characters quickly, without calling mbrtowc(). */ + if (is_basic (*iter->cur.ptr)) + { + /* These characters are part of the basic character set. ISO C 99 + guarantees that their wide character code is identical to their + char code. */ + iter->cur.bytes = 1; + iter->cur.wc = *iter->cur.ptr; + iter->cur.wc_valid = true; + } + else + { + assert (mbsinit (&iter->state)); + iter->in_shift = true; + with_shift: + iter->cur.bytes = mbrtowc (&iter->cur.wc, iter->cur.ptr, + iter->limit - iter->cur.ptr, &iter->state); + if (iter->cur.bytes == (size_t) -1) + { + /* An invalid multibyte sequence was encountered. */ + iter->cur.bytes = 1; + iter->cur.wc_valid = false; + /* Whether to set iter->in_shift = false and reset iter->state + or not is not very important; the string is bogus anyway. */ + } + else if (iter->cur.bytes == (size_t) -2) + { + /* An incomplete multibyte character at the end. */ + iter->cur.bytes = iter->limit - iter->cur.ptr; + iter->cur.wc_valid = false; + /* Whether to set iter->in_shift = false and reset iter->state + or not is not important; the string end is reached anyway. */ + } + else + { + if (iter->cur.bytes == 0) + { + /* A null wide character was encountered. */ + iter->cur.bytes = 1; + assert (*iter->cur.ptr == '\0'); + assert (iter->cur.wc == 0); + } + iter->cur.wc_valid = true; + + /* When in the initial state, we can go back treating ASCII + characters more quickly. */ + if (mbsinit (&iter->state)) + iter->in_shift = false; + } + } + iter->next_done = true; +} + +static inline void +mbiter_multi_reloc (struct mbiter_multi *iter, ptrdiff_t ptrdiff) +{ + iter->cur.ptr += ptrdiff; + iter->limit += ptrdiff; +} + +static inline void +mbiter_multi_copy (struct mbiter_multi *new_iter, const struct mbiter_multi *old_iter) +{ + new_iter->limit = old_iter->limit; + if ((new_iter->in_shift = old_iter->in_shift)) + memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t)); + else + memset (&new_iter->state, 0, sizeof (mbstate_t)); + new_iter->next_done = old_iter->next_done; + mb_copy (&new_iter->cur, &old_iter->cur); +} + +/* Iteration macros. */ +typedef struct mbiter_multi mbi_iterator_t; +#define mbi_init(iter, startptr, length) \ + ((iter).cur.ptr = (startptr), (iter).limit = (iter).cur.ptr + (length), \ + (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \ + (iter).next_done = false) +#define mbi_avail(iter) \ + ((iter).cur.ptr < (iter).limit && (mbiter_multi_next (&(iter)), true)) +#define mbi_advance(iter) \ + ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false) + +/* Access to the current character. */ +#define mbi_cur(iter) (iter).cur +#define mbi_cur_ptr(iter) (iter).cur.ptr + +/* Relocation. */ +#define mbi_reloc(iter, ptrdiff) mbiter_multi_reloc (&iter, ptrdiff) + +/* Copying an iterator. */ +#define mbi_copy mbiter_multi_copy + +#endif /* _MBITER_H */ diff --git a/lib/mbrlen.c b/lib/mbrlen.c new file mode 100644 index 0000000..01ee094 --- /dev/null +++ b/lib/mbrlen.c @@ -0,0 +1,32 @@ +/* Recognize multibyte character. + Copyright (C) 1999-2000, 2008-2010 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 <http://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/lib/mbrtowc.c b/lib/mbrtowc.c new file mode 100644 index 0000000..5c2650e --- /dev/null +++ b/lib/mbrtowc.c @@ -0,0 +1,386 @@ +/* Convert multibyte character to wide character. + Copyright (C) 1999-2002, 2005-2010 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <wchar.h> + +#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" + + +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 (pstate == NULL) + pstate = internal_state; + + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } + + if (n == 0) + return (size_t)(-2); + + /* Here n > 0. */ + { + 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__ + /* Work around bug <http://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. */ + { + const char *encoding = locale_charset (); + + if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) + { + /* 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. */ + + if (STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) + { + 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; + } + if (STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) + || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0xa1 && c < 0xff) + goto incomplete; + } + goto invalid; + } + if (STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) + { + 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; + } + if (STREQ (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) + { + 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; + } + if (STREQ (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) + { + 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; + } + + /* 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) +{ +# if MBRTOWC_NULL_ARG_BUG || MBRTOWC_RETVAL_BUG + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } +# endif + +# if MBRTOWC_RETVAL_BUG + { + static mbstate_t internal_state; + + /* Override mbrtowc's internal state. We can not 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--) + { + wchar_t wc; + size_t 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. */ + if (pwc != NULL) + *pwc = wc; + return (wc == 0 ? 0 : count); + } + } + return (size_t)(-2); + } + } +# endif + +# if MBRTOWC_NUL_RETVAL_BUG + { + wchar_t wc; + size_t ret = mbrtowc (&wc, s, n, ps); + + if (ret != (size_t)(-1) && ret != (size_t)(-2)) + { + if (pwc != NULL) + *pwc = wc; + if (wc == 0) + ret = 0; + } + return ret; + } +# else + return mbrtowc (pwc, s, n, ps); +# endif +} + +#endif diff --git a/lib/mbscasecmp.c b/lib/mbscasecmp.c new file mode 100644 index 0000000..ba9feef --- /dev/null +++ b/lib/mbscasecmp.c @@ -0,0 +1,98 @@ +/* Case-insensitive string comparison function. + Copyright (C) 1998-1999, 2005-2010 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2005, + based on earlier glibc code. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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> + +/* Specification. */ +#include <string.h> + +#include <ctype.h> +#include <limits.h> + +#include "mbuiter.h" + +#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) + +/* 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! */ +int +mbscasecmp (const char *s1, const char *s2) +{ + if (s1 == s2) + return 0; + + /* Be careful not to look at the entire extent of s1 or s2 until needed. + This is useful because when two strings differ, the difference is + most often already in the very few first characters. */ + if (MB_CUR_MAX > 1) + { + mbui_iterator_t iter1; + mbui_iterator_t iter2; + + mbui_init (iter1, s1); + mbui_init (iter2, s2); + + while (mbui_avail (iter1) && mbui_avail (iter2)) + { + int cmp = mb_casecmp (mbui_cur (iter1), mbui_cur (iter2)); + + if (cmp != 0) + return cmp; + + mbui_advance (iter1); + mbui_advance (iter2); + } + if (mbui_avail (iter1)) + /* s2 terminated before s1. */ + return 1; + if (mbui_avail (iter2)) + /* s1 terminated before s2. */ + return -1; + return 0; + } + else + { + const unsigned char *p1 = (const unsigned char *) s1; + const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + 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/lib/mbsinit.c b/lib/mbsinit.c new file mode 100644 index 0000000..066ddfe --- /dev/null +++ b/lib/mbsinit.c @@ -0,0 +1,47 @@ +/* Test for initial conversion state. + Copyright (C) 2008, 2009, 2010 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <wchar.h> + +#include "verify.h" + +/* 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. + - 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[0] == 0; +} diff --git a/lib/mbslen.c b/lib/mbslen.c new file mode 100644 index 0000000..5ccede6 --- /dev/null +++ b/lib/mbslen.c @@ -0,0 +1,44 @@ +/* Counting the multibyte characters in a string. + Copyright (C) 2007-2010 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +#include <stdlib.h> + +#include "mbuiter.h" + +/* Return the number of multibyte characters in the character string STRING. */ +size_t +mbslen (const char *string) +{ + if (MB_CUR_MAX > 1) + { + size_t count; + mbui_iterator_t iter; + + count = 0; + for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) + count++; + + return count; + } + else + return strlen (string); +} diff --git a/lib/mbsrtowcs-state.c b/lib/mbsrtowcs-state.c new file mode 100644 index 0000000..35045f6 --- /dev/null +++ b/lib/mbsrtowcs-state.c @@ -0,0 +1,37 @@ +/* Convert string to wide string. + Copyright (C) 2008-2010 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <wchar.h> + +/* Internal state used by the functions mbsrtowcs() and mbsnrtowcs(). */ +mbstate_t _gl_mbsrtowcs_state +/* The state must initially be in the "initial state"; so, zero-initialize it. + On most systems, putting it into BSS is sufficient. Not so on MacOS X 10.3, + see <http://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00329.html>. + When it needs an initializer, use 0 or {0} as initializer? 0 only works + when mbstate_t is a scalar type (such as when gnulib defines it, or on + AIX, IRIX, mingw). {0} works as an initializer in all cases: for a struct + or union type, but also for a scalar type (ISO C 99, 6.7.8.(11)). */ +#if defined __ELF__ + /* On ELF systems, variables in BSS behave well. */ +#else + /* Use braces, to be on the safe side. */ + = { 0 } +#endif + ; diff --git a/lib/mbsrtowcs.c b/lib/mbsrtowcs.c new file mode 100644 index 0000000..c577f36 --- /dev/null +++ b/lib/mbsrtowcs.c @@ -0,0 +1,136 @@ +/* Convert string to wide string. + Copyright (C) 2008, 2009, 2010 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <wchar.h> + +#include <errno.h> +#include <limits.h> +#include <stdlib.h> + +#include "strnlen1.h" + + +extern mbstate_t _gl_mbsrtowcs_state; + +size_t +mbsrtowcs (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) +{ + if (ps == NULL) + ps = &_gl_mbsrtowcs_state; + { + const char *src = *srcp; + + if (dest != NULL) + { + wchar_t *destptr = dest; + + for (; len > 0; destptr++, len--) + { + size_t src_avail; + size_t ret; + + /* An optimized variant of + src_avail = strnlen1 (src, MB_LEN_MAX); */ + if (src[0] == '\0') + src_avail = 1; + else if (src[1] == '\0') + src_avail = 2; + else if (src[2] == '\0') + src_avail = 3; + else if (MB_LEN_MAX <= 4 || src[3] == '\0') + src_avail = 4; + else + src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4); + + /* Parse the next multibyte character. */ + ret = mbrtowc (destptr, src, src_avail, ps); + + if (ret == (size_t)(-2)) + /* Encountered a multibyte character that extends past a '\0' byte + or that is longer than MB_LEN_MAX bytes. Cannot happen. */ + abort (); + + if (ret == (size_t)(-1)) + goto bad_input; + if (ret == 0) + { + src = NULL; + /* Here mbsinit (ps). */ + break; + } + src += ret; + } + + *srcp = src; + return destptr - dest; + } + else + { + /* Ignore dest and len, don't store *srcp at the end, and + don't clobber *ps. */ + mbstate_t state = *ps; + size_t totalcount = 0; + + for (;; totalcount++) + { + size_t src_avail; + size_t ret; + + /* An optimized variant of + src_avail = strnlen1 (src, MB_LEN_MAX); */ + if (src[0] == '\0') + src_avail = 1; + else if (src[1] == '\0') + src_avail = 2; + else if (src[2] == '\0') + src_avail = 3; + else if (MB_LEN_MAX <= 4 || src[3] == '\0') + src_avail = 4; + else + src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4); + + /* Parse the next multibyte character. */ + ret = mbrtowc (NULL, src, src_avail, &state); + + if (ret == (size_t)(-2)) + /* Encountered a multibyte character that extends past a '\0' byte + or that is longer than MB_LEN_MAX bytes. Cannot happen. */ + abort (); + + if (ret == (size_t)(-1)) + goto bad_input2; + if (ret == 0) + { + /* Here mbsinit (&state). */ + break; + } + src += ret; + } + + return totalcount; + } + + bad_input: + *srcp = src; + bad_input2: + errno = EILSEQ; + return (size_t)(-1); + } +} diff --git a/lib/mbsstr.c b/lib/mbsstr.c new file mode 100644 index 0000000..d44b4c3 --- /dev/null +++ b/lib/mbsstr.c @@ -0,0 +1,379 @@ +/* Searching in a string. + Copyright (C) 2005-2010 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 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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> + +/* Specification. */ +#include <string.h> + +#include <stdbool.h> +#include <stddef.h> /* for NULL, in case a nonstandard string.h lacks it */ + +#include "malloca.h" +#include "mbuiter.h" + +/* Knuth-Morris-Pratt algorithm. */ +#define CANON_ELEMENT(c) c +#include "str-kmp.h" + +/* Knuth-Morris-Pratt algorithm. + See http://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm + Return a boolean indicating success: + Return true and set *RESULTP if the search was completed. + Return false if it was aborted because not enough memory was available. */ +static bool +knuth_morris_pratt_multibyte (const char *haystack, const char *needle, + const char **resultp) +{ + size_t m = mbslen (needle); + mbchar_t *needle_mbchars; + size_t *table; + + /* Allocate room for needle_mbchars and the table. */ + char *memory = (char *) nmalloca (m, sizeof (mbchar_t) + sizeof (size_t)); + if (memory == NULL) + return false; + needle_mbchars = (mbchar_t *) memory; + table = (size_t *) (memory + m * sizeof (mbchar_t)); + + /* Fill needle_mbchars. */ + { + mbui_iterator_t iter; + size_t j; + + j = 0; + for (mbui_init (iter, needle); mbui_avail (iter); mbui_advance (iter), j++) + mb_copy (&needle_mbchars[j], &mbui_cur (iter)); + } + + /* Fill the table. + For 0 < i < m: + 0 < table[i] <= i is defined such that + forall 0 < x < table[i]: needle[x..i-1] != needle[0..i-1-x], + and table[i] is as large as possible with this property. + This implies: + 1) For 0 < i < m: + If table[i] < i, + needle[table[i]..i-1] = needle[0..i-1-table[i]]. + 2) For 0 < i < m: + rhaystack[0..i-1] == needle[0..i-1] + and exists h, i <= h < m: rhaystack[h] != needle[h] + implies + forall 0 <= x < table[i]: rhaystack[x..x+m-1] != needle[0..m-1]. + table[0] remains uninitialized. */ + { + size_t i, j; + + /* i = 1: Nothing to verify for x = 0. */ + table[1] = 1; + j = 0; + + for (i = 2; i < m; i++) + { + /* Here: j = i-1 - table[i-1]. + The inequality needle[x..i-1] != needle[0..i-1-x] is known to hold + for x < table[i-1], by induction. + Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */ + mbchar_t *b = &needle_mbchars[i - 1]; + + for (;;) + { + /* Invariants: The inequality needle[x..i-1] != needle[0..i-1-x] + is known to hold for x < i-1-j. + Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */ + if (mb_equal (*b, needle_mbchars[j])) + { + /* Set table[i] := i-1-j. */ + table[i] = i - ++j; + break; + } + /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds + for x = i-1-j, because + needle[i-1] != needle[j] = needle[i-1-x]. */ + if (j == 0) + { + /* The inequality holds for all possible x. */ + table[i] = i; + break; + } + /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds + for i-1-j < x < i-1-j+table[j], because for these x: + needle[x..i-2] + = needle[x-(i-1-j)..j-1] + != needle[0..j-1-(x-(i-1-j))] (by definition of table[j]) + = needle[0..i-2-x], + hence needle[x..i-1] != needle[0..i-1-x]. + Furthermore + needle[i-1-j+table[j]..i-2] + = needle[table[j]..j-1] + = needle[0..j-1-table[j]] (by definition of table[j]). */ + j = j - table[j]; + } + /* Here: j = i - table[i]. */ + } + } + + /* Search, using the table to accelerate the processing. */ + { + size_t j; + mbui_iterator_t rhaystack; + mbui_iterator_t phaystack; + + *resultp = NULL; + j = 0; + mbui_init (rhaystack, haystack); + mbui_init (phaystack, haystack); + /* Invariant: phaystack = rhaystack + j. */ + while (mbui_avail (phaystack)) + if (mb_equal (needle_mbchars[j], mbui_cur (phaystack))) + { + j++; + mbui_advance (phaystack); + if (j == m) + { + /* The entire needle has been found. */ + *resultp = mbui_cur_ptr (rhaystack); + break; + } + } + else if (j > 0) + { + /* Found a match of needle[0..j-1], mismatch at needle[j]. */ + size_t count = table[j]; + j -= count; + for (; count > 0; count--) + { + if (!mbui_avail (rhaystack)) + abort (); + mbui_advance (rhaystack); + } + } + else + { + /* Found a mismatch at needle[0] already. */ + if (!mbui_avail (rhaystack)) + abort (); + mbui_advance (rhaystack); + mbui_advance (phaystack); + } + } + + freea (memory); + return true; +} + +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. */ +char * +mbsstr (const char *haystack, const char *needle) +{ + /* Be careful not to look at the entire extent of haystack or needle + until needed. This is useful because of these two cases: + - haystack may be very long, and a match of needle found early, + - needle may be very long, and not even a short initial segment of + needle may be found in haystack. */ + if (MB_CUR_MAX > 1) + { + mbui_iterator_t iter_needle; + + mbui_init (iter_needle, needle); + if (mbui_avail (iter_needle)) + { + /* Minimizing the worst-case complexity: + Let n = mbslen(haystack), m = mbslen(needle). + The naïve algorithm is O(n*m) worst-case. + The Knuth-Morris-Pratt algorithm is O(n) worst-case but it needs a + memory allocation. + To achieve linear complexity and yet amortize the cost of the + memory allocation, we activate the Knuth-Morris-Pratt algorithm + only once the naïve algorithm has already run for some time; more + precisely, when + - the outer loop count is >= 10, + - the average number of comparisons per outer loop is >= 5, + - the total number of comparisons is >= m. + But we try it only once. If the memory allocation attempt failed, + we don't retry it. */ + bool try_kmp = true; + size_t outer_loop_count = 0; + size_t comparison_count = 0; + size_t last_ccount = 0; /* last comparison count */ + mbui_iterator_t iter_needle_last_ccount; /* = needle + last_ccount */ + + mbui_iterator_t iter_haystack; + + mbui_init (iter_needle_last_ccount, needle); + mbui_init (iter_haystack, haystack); + for (;; mbui_advance (iter_haystack)) + { + if (!mbui_avail (iter_haystack)) + /* No match. */ + return NULL; + + /* See whether it's advisable to use an asymptotically faster + algorithm. */ + if (try_kmp + && outer_loop_count >= 10 + && comparison_count >= 5 * outer_loop_count) + { + /* See if needle + comparison_count now reaches the end of + needle. */ + size_t count = comparison_count - last_ccount; + for (; + count > 0 && mbui_avail (iter_needle_last_ccount); + count--) + mbui_advance (iter_needle_last_ccount); + last_ccount = comparison_count; + if (!mbui_avail (iter_needle_last_ccount)) + { + /* Try the Knuth-Morris-Pratt algorithm. */ + const char *result; + bool success = + knuth_morris_pratt_multibyte (haystack, needle, + &result); + if (success) + return (char *) result; + try_kmp = false; + } + } + + outer_loop_count++; + comparison_count++; + if (mb_equal (mbui_cur (iter_haystack), mbui_cur (iter_needle))) + /* The first character matches. */ + { + mbui_iterator_t rhaystack; + mbui_iterator_t rneedle; + + memcpy (&rhaystack, &iter_haystack, sizeof (mbui_iterator_t)); + mbui_advance (rhaystack); + + mbui_init (rneedle, needle); + if (!mbui_avail (rneedle)) + abort (); + mbui_advance (rneedle); + + for (;; mbui_advance (rhaystack), mbui_advance (rneedle)) + { + if (!mbui_avail (rneedle)) + /* Found a match. */ + return (char *) mbui_cur_ptr (iter_haystack); + if (!mbui_avail (rhaystack)) + /* No match. */ + return NULL; + comparison_count++; + if (!mb_equal (mbui_cur (rhaystack), mbui_cur (rneedle))) + /* Nothing in this round. */ + break; + } + } + } + } + else + return (char *) haystack; + } + else + { + if (*needle != '\0') + { + /* Minimizing the worst-case complexity: + Let n = strlen(haystack), m = strlen(needle). + The naïve algorithm is O(n*m) worst-case. + The Knuth-Morris-Pratt algorithm is O(n) worst-case but it needs a + memory allocation. + To achieve linear complexity and yet amortize the cost of the + memory allocation, we activate the Knuth-Morris-Pratt algorithm + only once the naïve algorithm has already run for some time; more + precisely, when + - the outer loop count is >= 10, + - the average number of comparisons per outer loop is >= 5, + - the total number of comparisons is >= m. + But we try it only once. If the memory allocation attempt failed, + we don't retry it. */ + bool try_kmp = true; + size_t outer_loop_count = 0; + size_t comparison_count = 0; + size_t last_ccount = 0; /* last comparison count */ + const char *needle_last_ccount = needle; /* = needle + last_ccount */ + + /* Speed up the following searches of needle by caching its first + character. */ + char b = *needle++; + + for (;; haystack++) + { + if (*haystack == '\0') + /* No match. */ + return NULL; + + /* See whether it's advisable to use an asymptotically faster + algorithm. */ + if (try_kmp + && outer_loop_count >= 10 + && comparison_count >= 5 * outer_loop_count) + { + /* See if needle + comparison_count now reaches the end of + needle. */ + if (needle_last_ccount != NULL) + { + needle_last_ccount += + strnlen (needle_last_ccount, + comparison_count - last_ccount); + if (*needle_last_ccount == '\0') + needle_last_ccount = NULL; + last_ccount = comparison_count; + } + if (needle_last_ccount == NULL) + { + /* Try the Knuth-Morris-Pratt algorithm. */ + const char *result; + bool success = + knuth_morris_pratt_unibyte (haystack, needle - 1, + &result); + if (success) + return (char *) result; + try_kmp = false; + } + } + + outer_loop_count++; + comparison_count++; + if (*haystack == b) + /* The first character matches. */ + { + const char *rhaystack = haystack + 1; + const char *rneedle = needle; + + for (;; rhaystack++, rneedle++) + { + if (*rneedle == '\0') + /* Found a match. */ + return (char *) haystack; + if (*rhaystack == '\0') + /* No match. */ + return NULL; + comparison_count++; + if (*rhaystack != *rneedle) + /* Nothing in this round. */ + break; + } + } + } + } + else + return (char *) haystack; + } +} diff --git a/lib/mbuiter.h b/lib/mbuiter.h new file mode 100644 index 0000000..3015c4e --- /dev/null +++ b/lib/mbuiter.h @@ -0,0 +1,222 @@ +/* Iterating through multibyte strings: macros for multi-byte encodings. + Copyright (C) 2001, 2005, 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>. */ + +/* The macros in this file implement forward iteration through a + multi-byte string, without knowing its length a-priori. + + With these macros, an iteration loop that looks like + + char *iter; + for (iter = buf; *iter != '\0'; iter++) + { + do_something (*iter); + } + + becomes + + mbui_iterator_t iter; + for (mbui_init (iter, buf); mbui_avail (iter); mbui_advance (iter)) + { + do_something (mbui_cur_ptr (iter), mb_len (mbui_cur (iter))); + } + + The benefit of these macros over plain use of mbrtowc is: + - Handling of invalid multibyte sequences is possible without + making the code more complicated, while still preserving the + invalid multibyte sequences. + + Compared to mbiter.h, the macros here don't need to know the string's + length a-priori. The downside is that at each step, the look-ahead + that guards against overrunning the terminating '\0' is more expensive. + The mbui_* macros are therefore suitable when there is a high probability + that only the first few multibyte characters need to be inspected. + Whereas the mbi_* macros are better if usually the iteration runs + through the entire string. + + mbui_iterator_t + is a type usable for variable declarations. + + mbui_init (iter, startptr) + initializes the iterator, starting at startptr. + + mbui_avail (iter) + returns true if there are more multibyte chracters available before + the end of string is reached. In this case, mbui_cur (iter) is + initialized to the next multibyte chracter. + + mbui_advance (iter) + advances the iterator by one multibyte character. + + mbui_cur (iter) + returns the current multibyte character, of type mbchar_t. All the + macros defined in mbchar.h can be used on it. + + mbui_cur_ptr (iter) + return a pointer to the beginning of the current multibyte character. + + mbui_reloc (iter, ptrdiff) + relocates iterator when the string is moved by ptrdiff bytes. + + mbui_copy (&destiter, &srciter) + copies srciter to destiter. + + Here are the function prototypes of the macros. + + extern void mbui_init (mbui_iterator_t iter, const char *startptr); + extern bool mbui_avail (mbui_iterator_t iter); + extern void mbui_advance (mbui_iterator_t iter); + extern mbchar_t mbui_cur (mbui_iterator_t iter); + extern const char * mbui_cur_ptr (mbui_iterator_t iter); + extern void mbui_reloc (mbui_iterator_t iter, ptrdiff_t ptrdiff); + extern void mbui_copy (mbui_iterator_t *new, const mbui_iterator_t *old); + */ + +#ifndef _MBUITER_H +#define _MBUITER_H 1 + +#include <assert.h> +#include <stdbool.h> +#include <stddef.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.1 has a bug: <stdio.h> and <time.h> must be included before + <wchar.h>. */ +#include <stdio.h> +#include <time.h> +#include <wchar.h> + +#include "mbchar.h" +#include "strnlen1.h" + +struct mbuiter_multi +{ + bool in_shift; /* true if next byte may not be interpreted as ASCII */ + mbstate_t state; /* if in_shift: current shift state */ + bool next_done; /* true if mbui_avail has already filled the following */ + struct mbchar cur; /* the current character: + const char *cur.ptr pointer to current character + The following are only valid after mbui_avail. + size_t cur.bytes number of bytes of current character + bool cur.wc_valid true if wc is a valid wide character + wchar_t cur.wc if wc_valid: the current character + */ +}; + +static inline void +mbuiter_multi_next (struct mbuiter_multi *iter) +{ + if (iter->next_done) + return; + if (iter->in_shift) + goto with_shift; + /* Handle most ASCII characters quickly, without calling mbrtowc(). */ + if (is_basic (*iter->cur.ptr)) + { + /* These characters are part of the basic character set. ISO C 99 + guarantees that their wide character code is identical to their + char code. */ + iter->cur.bytes = 1; + iter->cur.wc = *iter->cur.ptr; + iter->cur.wc_valid = true; + } + else + { + assert (mbsinit (&iter->state)); + iter->in_shift = true; + with_shift: + iter->cur.bytes = mbrtowc (&iter->cur.wc, iter->cur.ptr, + strnlen1 (iter->cur.ptr, MB_CUR_MAX), + &iter->state); + if (iter->cur.bytes == (size_t) -1) + { + /* An invalid multibyte sequence was encountered. */ + iter->cur.bytes = 1; + iter->cur.wc_valid = false; + /* Whether to set iter->in_shift = false and reset iter->state + or not is not very important; the string is bogus anyway. */ + } + else if (iter->cur.bytes == (size_t) -2) + { + /* An incomplete multibyte character at the end. */ + iter->cur.bytes = strlen (iter->cur.ptr); + iter->cur.wc_valid = false; + /* Whether to set iter->in_shift = false and reset iter->state + or not is not important; the string end is reached anyway. */ + } + else + { + if (iter->cur.bytes == 0) + { + /* A null wide character was encountered. */ + iter->cur.bytes = 1; + assert (*iter->cur.ptr == '\0'); + assert (iter->cur.wc == 0); + } + iter->cur.wc_valid = true; + + /* When in the initial state, we can go back treating ASCII + characters more quickly. */ + if (mbsinit (&iter->state)) + iter->in_shift = false; + } + } + iter->next_done = true; +} + +static inline void +mbuiter_multi_reloc (struct mbuiter_multi *iter, ptrdiff_t ptrdiff) +{ + iter->cur.ptr += ptrdiff; +} + +static inline void +mbuiter_multi_copy (struct mbuiter_multi *new_iter, const struct mbuiter_multi *old_iter) +{ + if ((new_iter->in_shift = old_iter->in_shift)) + memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t)); + else + memset (&new_iter->state, 0, sizeof (mbstate_t)); + new_iter->next_done = old_iter->next_done; + mb_copy (&new_iter->cur, &old_iter->cur); +} + +/* Iteration macros. */ +typedef struct mbuiter_multi mbui_iterator_t; +#define mbui_init(iter, startptr) \ + ((iter).cur.ptr = (startptr), \ + (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \ + (iter).next_done = false) +#define mbui_avail(iter) \ + (mbuiter_multi_next (&(iter)), !mb_isnul ((iter).cur)) +#define mbui_advance(iter) \ + ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false) + +/* Access to the current character. */ +#define mbui_cur(iter) (iter).cur +#define mbui_cur_ptr(iter) (iter).cur.ptr + +/* Relocation. */ +#define mbui_reloc(iter, ptrdiff) mbuiter_multi_reloc (&iter, ptrdiff) + +/* Copying an iterator. */ +#define mbui_copy mbuiter_multi_copy + +#endif /* _MBUITER_H */ diff --git a/lib/memchr.c b/lib/memchr.c new file mode 100644 index 0000000..6c2b2d6 --- /dev/null +++ b/lib/memchr.c @@ -0,0 +1,172 @@ +/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2010 + 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 <http://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/lib/memchr.valgrind b/lib/memchr.valgrind new file mode 100644 index 0000000..60f247e --- /dev/null +++ b/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/lib/mkstemp.c b/lib/mkstemp.c new file mode 100644 index 0000000..c1dc796 --- /dev/null +++ b/lib/mkstemp.c @@ -0,0 +1,46 @@ +/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2010 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 <http://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. */ +int +mkstemp (char *xtemplate) +{ + return __gen_tempname (xtemplate, 0, 0, __GT_FILE); +} diff --git a/lib/mktime-internal.h b/lib/mktime-internal.h new file mode 100644 index 0000000..4287acf --- /dev/null +++ b/lib/mktime-internal.h @@ -0,0 +1,4 @@ +#include <time.h> +time_t mktime_internal (struct tm *, + struct tm * (*) (time_t const *, struct tm *), + time_t *); diff --git a/lib/mktime.c b/lib/mktime.c new file mode 100644 index 0000000..6adf3ab --- /dev/null +++ b/lib/mktime.c @@ -0,0 +1,671 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Convert a `struct tm' to a time_t value. + Copyright (C) 1993-1999, 2002-2007, 2009-2010 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Paul Eggert <eggert@twinsun.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 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Define this to have a standalone program to test this implementation of + mktime. */ +/* #define DEBUG 1 */ + +#ifndef _LIBC +# include <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 <limits.h> + +#include <string.h> /* For the real memcpy prototype. */ + +#if DEBUG +# include <stdio.h> +# include <stdlib.h> +/* Make it work even if the system's libc has its own mktime routine. */ +# define mktime my_mktime +#endif /* DEBUG */ + +/* 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)) + +/* 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 negative values of the signed integer type T use two's + complement, ones' complement, or signed magnitude representation, + respectively. Much GNU code assumes two's complement, but some + people like to be portable to all possible C hosts. */ +#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) +#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) +#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) + +/* True if the arithmetic type T is signed. */ +#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + +/* The maximum and minimum values for the integer type T. These + macros have undefined behavior if T is signed and has padding bits. + If this is a problem for you, please let us know how to fix it for + your host. */ +#define TYPE_MINIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) 0 \ + : TYPE_SIGNED_MAGNITUDE (t) \ + ? ~ (t) 0 \ + : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +#define TYPE_MAXIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) -1 \ + : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) + +#ifndef TIME_T_MIN +# define TIME_T_MIN TYPE_MINIMUM (time_t) +#endif +#ifndef TIME_T_MAX +# define TIME_T_MAX TYPE_MAXIMUM (time_t) +#endif +#define TIME_T_MIDPOINT (SHR (TIME_T_MIN + TIME_T_MAX, 1) + 1) + +/* Verify a requirement at compile-time (unlike assert, which is runtime). */ +#define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; } + +verify (time_t_is_integer, TYPE_IS_INTEGER (time_t)); +verify (twos_complement_arithmetic, TYPE_TWOS_COMPLEMENT (int)); +/* The code also assumes that signed integer overflow silently wraps + around, but this assumption can't be stated without causing a + diagnostic on some hosts. */ + +#define EPOCH_YEAR 1970 +#define TM_YEAR_BASE 1900 +verify (base_year_is_a_multiple_of_100, TM_YEAR_BASE % 100 == 0); + +/* Return 1 if YEAR + TM_YEAR_BASE is a leap year. */ +static inline int +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 } + }; + + +#ifndef _LIBC +/* 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. + See the gnulib time_r module for one way to implement this. */ +# undef __localtime_r +# define __localtime_r localtime_r +# define __mktime_internal mktime_internal +# include "mktime-internal.h" +#endif + +/* 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 time stamps. + + The YEAR values uses the same numbering as TP->tm_year. Values + need not be in the usual range. However, YEAR1 must not be less + than 2 * INT_MIN or greater than 2 * INT_MAX. + + The result may overflow. It is the caller's responsibility to + detect overflow. */ + +static inline time_t +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 (C99_integer_division, -1 / 2 == 0); +#if 0 /* This assertion fails on 32-bit systems with 64-bit time_t, such as + NetBSD 5 on i386. */ + verify (long_int_year_and_yday_are_wide_enough, + INT_MAX <= LONG_MAX / 2 || TIME_T_MAX <= UINT_MAX); +#endif + + /* 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 in time_t precision. Overflow might + occur here. */ + time_t tyear1 = year1; + time_t years = tyear1 - year0; + time_t days = 365 * years + yday1 - yday0 + intervening_leap_days; + time_t hours = 24 * days + hour1 - hour0; + time_t minutes = 60 * hours + min1 - min0; + time_t seconds = 60 * minutes + sec1 - sec0; + return seconds; +} + + +/* Return a time_t value corresponding to (YEAR-YDAY HOUR:MIN:SEC), + assuming that *T corresponds to *TP and that no clock adjustments + occurred between *TP and the desired time. + If TP is null, return a value not equal to *T; this avoids false matches. + If overflow occurs, yield the minimal or maximal value, except do not + yield a value equal to *T. */ +static time_t +guess_time_tm (long int year, long int yday, int hour, int min, int sec, + const time_t *t, const struct tm *tp) +{ + if (tp) + { + time_t d = ydhms_diff (year, yday, hour, min, sec, + tp->tm_year, tp->tm_yday, + tp->tm_hour, tp->tm_min, tp->tm_sec); + time_t t1 = *t + d; + if ((t1 < *t) == (TYPE_SIGNED (time_t) ? d < 0 : TIME_T_MAX / 2 < d)) + return t1; + } + + /* Overflow occurred one way or another. Return the nearest result + that is actually in range, except don't report a zero difference + if the actual difference is nonzero, as that would cause a false + match; and don't oscillate between two values, as that would + confuse the spring-forward gap detector. */ + return (*t < TIME_T_MIDPOINT + ? (*t <= TIME_T_MIN + 1 ? *t + 1 : TIME_T_MIN) + : (TIME_T_MAX - 1 <= *t ? *t - 1 : TIME_T_MAX)); +} + +/* 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. */ +static struct tm * +ranged_convert (struct tm *(*convert) (const time_t *, struct tm *), + time_t *t, struct tm *tp) +{ + struct tm *r = convert (t, tp); + + if (!r && *t) + { + time_t bad = *t; + time_t ok = 0; + + /* BAD is a known unconvertible time_t, and OK is a known good one. + Use binary search to narrow the range between BAD and OK until + they differ by 1. */ + while (bad != ok + (bad < 0 ? -1 : 1)) + { + time_t mid = *t = (bad < 0 + ? bad + ((ok - bad) >> 1) + : ok + ((bad - ok) >> 1)); + r = convert (t, tp); + if (r) + ok = mid; + else + bad = mid; + } + + if (!r && ok) + { + /* The last conversion attempt failed; + revert to the most recent successful attempt. */ + *t = ok; + r = convert (t, tp); + } + } + + return r; +} + + +/* 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. + 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 *), + time_t *offset) +{ + time_t t, gt, t0, t1, t2; + 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; + /* Normalize the value. */ + int isdst = ((tp->tm_isdst >> (8 * sizeof (tp->tm_isdst) - 1)) + | (tp->tm_isdst != 0)); + + /* 1 if the previous probe was DST. */ + int dst2; + + /* 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 minor overflows correctly, + assuming int and time_t arithmetic wraps around. + Major overflows are caught at the end. */ + + /* 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; + + time_t guessed_offset = *offset; + + int sec_requested = sec; + + if (LEAP_SECONDS_POSSIBLE) + { + /* Handle out-of-range seconds specially, + since ydhms_tm_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. */ + + t0 = ydhms_diff (year, yday, hour, min, sec, + EPOCH_YEAR - TM_YEAR_BASE, 0, 0, 0, - guessed_offset); + + if (TIME_T_MAX / INT_MAX / 366 / 24 / 60 / 60 < 3) + { + /* time_t isn't large enough to rule out overflows, so check + for major overflows. A gross check suffices, since if t0 + has overflowed, it is off by a multiple of TIME_T_MAX - + TIME_T_MIN + 1. So ignore any component of the difference + that is bounded by a small value. */ + + /* Approximate log base 2 of the number of time units per + biennium. A biennium is 2 years; use this unit instead of + years to avoid integer overflow. For example, 2 average + Gregorian years are 2 * 365.2425 * 24 * 60 * 60 seconds, + which is 63113904 seconds, and rint (log2 (63113904)) is + 26. */ + int ALOG2_SECONDS_PER_BIENNIUM = 26; + int ALOG2_MINUTES_PER_BIENNIUM = 20; + int ALOG2_HOURS_PER_BIENNIUM = 14; + int ALOG2_DAYS_PER_BIENNIUM = 10; + int LOG2_YEARS_PER_BIENNIUM = 1; + + int approx_requested_biennia = + (SHR (year_requested, LOG2_YEARS_PER_BIENNIUM) + - SHR (EPOCH_YEAR - TM_YEAR_BASE, LOG2_YEARS_PER_BIENNIUM) + + SHR (mday, ALOG2_DAYS_PER_BIENNIUM) + + SHR (hour, ALOG2_HOURS_PER_BIENNIUM) + + SHR (min, ALOG2_MINUTES_PER_BIENNIUM) + + (LEAP_SECONDS_POSSIBLE + ? 0 + : SHR (sec, ALOG2_SECONDS_PER_BIENNIUM))); + + int approx_biennia = SHR (t0, ALOG2_SECONDS_PER_BIENNIUM); + int diff = approx_biennia - approx_requested_biennia; + int abs_diff = diff < 0 ? - diff : diff; + + /* IRIX 4.0.5 cc miscaculates TIME_T_MIN / 3: it erroneously + gives a positive value of 715827882. Setting a variable + first then doing math on it seems to work. + (ghazi@caip.rutgers.edu) */ + time_t time_t_max = TIME_T_MAX; + time_t time_t_min = TIME_T_MIN; + time_t overflow_threshold = + (time_t_max / 3 - time_t_min / 3) >> ALOG2_SECONDS_PER_BIENNIUM; + + if (overflow_threshold < abs_diff) + { + /* Overflow occurred. Try repairing it; this might work if + the time zone offset is enough to undo the overflow. */ + time_t repaired_t0 = -1 - t0; + approx_biennia = SHR (repaired_t0, ALOG2_SECONDS_PER_BIENNIUM); + diff = approx_biennia - approx_requested_biennia; + abs_diff = diff < 0 ? - diff : diff; + if (overflow_threshold < abs_diff) + return -1; + guessed_offset += repaired_t0 - t0; + t0 = repaired_t0; + } + } + + /* Repeatedly use the error to improve the guess. */ + + for (t = t1 = t2 = t0, dst2 = 0; + (gt = guess_time_tm (year, yday, hour, min, sec, &t, + ranged_convert (convert, &t, &tm)), + t != gt); + t1 = t2, t2 = t, t = gt, dst2 = tm.tm_isdst != 0) + 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 GT - T. Follow the common + practice in this case, which is to return a time that is GT - T + 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; + else if (--remaining_probes == 0) + return -1; + + /* We have a match. Check whether tm.tm_isdst has the requested + value, if any. */ + if (isdst != tm.tm_isdst && 0 <= isdst && 0 <= 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) + { + time_t ot = t + delta * direction; + if ((ot < t) == (direction < 0)) + { + struct tm otm; + ranged_convert (convert, &ot, &otm); + if (otm.tm_isdst == isdst) + { + /* We found the desired tm_isdst. + Extrapolate back to the desired time. */ + t = guess_time_tm (year, yday, hour, min, sec, &ot, &otm); + ranged_convert (convert, &t, &tm); + goto offset_found; + } + } + } + } + + offset_found: + *offset = guessed_offset + t - t0; + + 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. */ + int sec_adjustment = (sec == 0 && tm.tm_sec == 60) - sec; + t1 = t + sec_requested; + t2 = t1 + sec_adjustment; + if (((t1 < t) != (sec_requested < 0)) + | ((t2 < t1) != (sec_adjustment < 0)) + | ! convert (&t2, &tm)) + return -1; + t = t2; + } + + *tp = tm; + return t; +} + + +/* FIXME: This should use a signed type wide enough to hold any UTC + offset in seconds. 'int' should be good enough for GNU code. We + can't fix this unilaterally though, as other modules invoke + __mktime_internal. */ +static time_t localtime_offset; + +/* Convert *TP to a time_t value. */ +time_t +mktime (struct tm *tp) +{ +#ifdef _LIBC + /* 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 (); +#endif + + return __mktime_internal (tp, __localtime_r, &localtime_offset); +} + +#ifdef weak_alias +weak_alias (mktime, timelocal) +#endif + +#ifdef _LIBC +libc_hidden_def (mktime) +libc_hidden_weak (timelocal) +#endif + +#if DEBUG + +static int +not_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) + | (a->tm_yday ^ b->tm_yday) + | (a->tm_isdst ^ b->tm_isdst)); +} + +static void +print_tm (const struct tm *tp) +{ + if (tp) + printf ("%04d-%02d-%02d %02d:%02d:%02d yday %03d wday %d isdst %d", + tp->tm_year + TM_YEAR_BASE, tp->tm_mon + 1, tp->tm_mday, + tp->tm_hour, tp->tm_min, tp->tm_sec, + tp->tm_yday, tp->tm_wday, tp->tm_isdst); + else + printf ("0"); +} + +static int +check_result (time_t tk, struct tm tmk, time_t tl, const struct tm *lt) +{ + if (tk != tl || !lt || not_equal_tm (&tmk, lt)) + { + printf ("mktime ("); + print_tm (lt); + printf (")\nyields ("); + print_tm (&tmk); + printf (") == %ld, should be %ld\n", (long int) tk, (long int) tl); + return 1; + } + + return 0; +} + +int +main (int argc, char **argv) +{ + int status = 0; + struct tm tm, tmk, tml; + struct tm *lt; + time_t tk, tl, tl1; + char trailer; + + if ((argc == 3 || argc == 4) + && (sscanf (argv[1], "%d-%d-%d%c", + &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &trailer) + == 3) + && (sscanf (argv[2], "%d:%d:%d%c", + &tm.tm_hour, &tm.tm_min, &tm.tm_sec, &trailer) + == 3)) + { + tm.tm_year -= TM_YEAR_BASE; + tm.tm_mon--; + tm.tm_isdst = argc == 3 ? -1 : atoi (argv[3]); + tmk = tm; + tl = mktime (&tmk); + lt = localtime (&tl); + if (lt) + { + tml = *lt; + lt = &tml; + } + printf ("mktime returns %ld == ", (long int) tl); + print_tm (&tmk); + printf ("\n"); + status = check_result (tl, tmk, tl, lt); + } + else if (argc == 4 || (argc == 5 && strcmp (argv[4], "-") == 0)) + { + time_t from = atol (argv[1]); + time_t by = atol (argv[2]); + time_t to = atol (argv[3]); + + if (argc == 4) + for (tl = from; by < 0 ? to <= tl : tl <= to; tl = tl1) + { + lt = localtime (&tl); + if (lt) + { + tmk = tml = *lt; + tk = mktime (&tmk); + status |= check_result (tk, tmk, tl, &tml); + } + else + { + printf ("localtime (%ld) yields 0\n", (long int) tl); + status = 1; + } + tl1 = tl + by; + if ((tl1 < tl) != (by < 0)) + break; + } + else + for (tl = from; by < 0 ? to <= tl : tl <= to; tl = tl1) + { + /* Null benchmark. */ + lt = localtime (&tl); + if (lt) + { + tmk = tml = *lt; + tk = tl; + status |= check_result (tk, tmk, tl, &tml); + } + else + { + printf ("localtime (%ld) yields 0\n", (long int) tl); + status = 1; + } + tl1 = tl + by; + if ((tl1 < tl) != (by < 0)) + break; + } + } + else + printf ("Usage:\ +\t%s YYYY-MM-DD HH:MM:SS [ISDST] # Test given time.\n\ +\t%s FROM BY TO # Test values FROM, FROM+BY, ..., TO.\n\ +\t%s FROM BY TO - # Do not test those values (for benchmark).\n", + argv[0], argv[0], argv[0]); + + return status; +} + +#endif /* DEBUG */ + +/* +Local Variables: +compile-command: "gcc -DDEBUG -Wall -W -O -g mktime.c -o mktime" +End: +*/ diff --git a/lib/nl_langinfo.c b/lib/nl_langinfo.c new file mode 100644 index 0000000..e81c81e --- /dev/null +++ b/lib/nl_langinfo.c @@ -0,0 +1,260 @@ +/* nl_langinfo() replacement: query locale dependent information. + + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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> + +/* Specification. */ +#include <langinfo.h> + +#if REPLACE_NL_LANGINFO + +/* Override nl_langinfo with support for added nl_item values. */ + +# include <locale.h> +# include <string.h> + +# undef nl_langinfo + +char * +rpl_nl_langinfo (nl_item item) +{ + switch (item) + { +# if GNULIB_defined_CODESET + case CODESET: + { + const char *locale; + static char buf[2 + 10 + 1]; + + locale = setlocale (LC_CTYPE, NULL); + 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; + } + } + } + return ""; + } +# 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 ""; + 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 "\0\0\0\0\0\0\0\0\0\0"; +# endif + default: + break; + } + return nl_langinfo (item); +} + +#else + +/* Provide nl_langinfo from scratch. */ + +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +/* Native Windows platforms. */ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> + +# include <stdio.h> + +# else + +/* An old Unix platform without locales, such as Linux libc5 or BeOS. */ + +# endif + +# include <locale.h> + +char * +nl_langinfo (nl_item item) +{ + switch (item) + { + /* nl_langinfo items of the LC_CTYPE category */ + case CODESET: +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + { + static char buf[2 + 10 + 1]; + + /* Woe32 has a function returning the locale's codepage as a number. */ + sprintf (buf, "CP%u", GetACP ()); + return buf; + } +# elif defined __BEOS__ + return "UTF-8"; +# else + return "ISO-8859-1"; +# endif + /* nl_langinfo items of the LC_NUMERIC category */ + case RADIXCHAR: + return localeconv () ->decimal_point; + case THOUSEP: + return localeconv () ->thousands_sep; + /* nl_langinfo items of the LC_TIME category. + TODO: Really use the locale. */ + case D_T_FMT: + case ERA_D_T_FMT: + return "%a %b %e %H:%M:%S %Y"; + case D_FMT: + case ERA_D_FMT: + return "%m/%d/%y"; + case T_FMT: + case ERA_T_FMT: + return "%H:%M:%S"; + case T_FMT_AMPM: + return "%I:%M:%S %p"; + case AM_STR: + return "AM"; + case PM_STR: + return "PM"; + case DAY_1: + return "Sunday"; + case DAY_2: + return "Monday"; + case DAY_3: + return "Tuesday"; + case DAY_4: + return "Wednesday"; + case DAY_5: + return "Thursday"; + case DAY_6: + return "Friday"; + case DAY_7: + return "Saturday"; + case ABDAY_1: + return "Sun"; + case ABDAY_2: + return "Mon"; + case ABDAY_3: + return "Tue"; + case ABDAY_4: + return "Wed"; + case ABDAY_5: + return "Thu"; + case ABDAY_6: + return "Fri"; + case ABDAY_7: + return "Sat"; + case MON_1: + return "January"; + case MON_2: + return "February"; + case MON_3: + return "March"; + case MON_4: + return "April"; + case MON_5: + return "May"; + case MON_6: + return "June"; + case MON_7: + return "July"; + case MON_8: + return "August"; + case MON_9: + return "September"; + case MON_10: + return "October"; + case MON_11: + return "November"; + case MON_12: + return "December"; + case ABMON_1: + return "Jan"; + case ABMON_2: + return "Feb"; + case ABMON_3: + return "Mar"; + case ABMON_4: + return "Apr"; + case ABMON_5: + return "May"; + case ABMON_6: + return "Jun"; + case ABMON_7: + return "Jul"; + case ABMON_8: + return "Aug"; + case ABMON_9: + return "Sep"; + case ABMON_10: + return "Oct"; + case ABMON_11: + return "Nov"; + case ABMON_12: + return "Dec"; + case ERA: + return ""; + case ALT_DIGITS: + return "\0\0\0\0\0\0\0\0\0\0"; + /* nl_langinfo items of the LC_MONETARY category + TODO: Really use the locale. */ + case CRNCYSTR: + return "-"; + /* nl_langinfo items of the LC_MESSAGES category + TODO: Really use the locale. */ + case YESEXPR: + return "^[yY]"; + case NOEXPR: + return "^[nN]"; + default: + return ""; + } +} + +#endif diff --git a/lib/offtostr.c b/lib/offtostr.c new file mode 100644 index 0000000..3a60c6e --- /dev/null +++ b/lib/offtostr.c @@ -0,0 +1,4 @@ +#define inttostr offtostr +#define inttype off_t +#define inttype_is_signed 1 +#include "inttostr.c" diff --git a/lib/open.c b/lib/open.c new file mode 100644 index 0000000..f612b80 --- /dev/null +++ b/lib/open.c @@ -0,0 +1,166 @@ +/* Open a descriptor to a file. + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +/* Get the original definition of open. It might be defined as a macro. */ +#define __need_system_fcntl_h +#include <fcntl.h> +#undef __need_system_fcntl_h +#include <sys/types.h> + +static inline int +orig_open (const char *filename, int flags, mode_t mode) +{ + return open (filename, flags, mode); +} + +/* Specification. */ +#include <fcntl.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, ...) +{ + 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 (defined _WIN32 || 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, mode); + +#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) + { + 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/lib/prepargs.c b/lib/prepargs.c new file mode 100644 index 0000000..7819d04 --- /dev/null +++ b/lib/prepargs.c @@ -0,0 +1,90 @@ +/* Parse arguments from a string and prepend them to an argv. + + Copyright (C) 1999-2002, 2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert <eggert@twinsun.com>. */ + +#include <config.h> + +#include "prepargs.h" +#include <string.h> +#include <sys/types.h> +#include <xalloc.h> + +#include <ctype.h> + +/* IN_CTYPE_DOMAIN (C) is nonzero if the unsigned char C can safely be given + as an argument to <ctype.h> macros like "isspace". */ +#ifdef STDC_HEADERS +# define IN_CTYPE_DOMAIN(c) 1 +#else +# define IN_CTYPE_DOMAIN(c) ((c) <= 0177) +#endif + +#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c)) + +/* Find the white-space-separated options specified by OPTIONS, and + using BUF to store copies of these options, set ARGV[0], ARGV[1], + etc. to the option copies. Return the number N of options found. + Do not set ARGV[N]. If ARGV is zero, do not store ARGV[0] etc. + Backslash can be used to escape whitespace (and backslashes). */ +static int +prepend_args (char const *options, char *buf, char **argv) +{ + char const *o = options; + char *b = buf; + int n = 0; + + for (;;) + { + while (ISSPACE ((unsigned char) *o)) + o++; + if (!*o) + return n; + if (argv) + argv[n] = b; + n++; + + do + if ((*b++ = *o++) == '\\' && *o) + b[-1] = *o++; + while (*o && ! ISSPACE ((unsigned char) *o)); + + *b++ = '\0'; + } +} + +/* Prepend the whitespace-separated options in OPTIONS to the argument + vector of a main program with argument count *PARGC and argument + vector *PARGV. */ +void +prepend_default_options (char const *options, int *pargc, char ***pargv) +{ + if (options) + { + char *buf = xmalloc (strlen (options) + 1); + int prepended = prepend_args (options, buf, (char **) 0); + int argc = *pargc; + char * const *argv = *pargv; + char **pp = xmalloc ((prepended + argc + 1) * sizeof *pp); + *pargc = prepended + argc; + *pargv = pp; + *pp++ = *argv++; + pp += prepend_args (options, buf, pp); + while ((*pp++ = *argv++)) + continue; + } +} diff --git a/lib/prepargs.h b/lib/prepargs.h new file mode 100644 index 0000000..ce93ea8 --- /dev/null +++ b/lib/prepargs.h @@ -0,0 +1,3 @@ +/* Parse arguments from a string and prepend them to an argv. */ + +void prepend_default_options (char const *, int *, char ***); diff --git a/lib/progname.c b/lib/progname.c new file mode 100644 index 0000000..1415e6a --- /dev/null +++ b/lib/progname.c @@ -0,0 +1,92 @@ +/* Program name management. + Copyright (C) 2001-2003, 2005-2010 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 <http://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/lib/progname.h b/lib/progname.h new file mode 100644 index 0000000..5ba303b --- /dev/null +++ b/lib/progname.h @@ -0,0 +1,62 @@ +/* Program name management. + Copyright (C) 2001-2004, 2006, 2009-2010 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 <http://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/lib/propername.c b/lib/propername.c new file mode 100644 index 0000000..3971f3f --- /dev/null +++ b/lib/propername.c @@ -0,0 +1,311 @@ +/* Localization of proper names. + Copyright (C) 2006-2010 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "propername.h" + +#include <ctype.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#if HAVE_ICONV +# include <iconv.h> +#endif + +#include "trim.h" +#include "mbchar.h" +#include "mbuiter.h" +#include "localcharset.h" +#include "c-strcase.h" +#include "xstriconv.h" +#include "xalloc.h" +#include "gettext.h" + + +/* Tests whether STRING contains trim (SUB), starting and ending at word + boundaries. + Here, instead of implementing Unicode Standard Annex #29 for determining + word boundaries, we assume that trim (SUB) starts and ends with words and + only test whether the part before it ends with a non-word and the part + after it starts with a non-word. */ +static bool +mbsstr_trimmed_wordbounded (const char *string, const char *sub) +{ + char *tsub = trim (sub); + bool found = false; + + for (; *string != '\0';) + { + const char *tsub_in_string = mbsstr (string, tsub); + if (tsub_in_string == NULL) + break; + else + { + if (MB_CUR_MAX > 1) + { + mbui_iterator_t string_iter; + bool word_boundary_before; + bool word_boundary_after; + + mbui_init (string_iter, string); + word_boundary_before = true; + if (mbui_cur_ptr (string_iter) < tsub_in_string) + { + mbchar_t last_char_before_tsub; + do + { + if (!mbui_avail (string_iter)) + abort (); + last_char_before_tsub = mbui_cur (string_iter); + mbui_advance (string_iter); + } + while (mbui_cur_ptr (string_iter) < tsub_in_string); + if (mb_isalnum (last_char_before_tsub)) + word_boundary_before = false; + } + + mbui_init (string_iter, tsub_in_string); + { + mbui_iterator_t tsub_iter; + + for (mbui_init (tsub_iter, tsub); + mbui_avail (tsub_iter); + mbui_advance (tsub_iter)) + { + if (!mbui_avail (string_iter)) + abort (); + mbui_advance (string_iter); + } + } + word_boundary_after = true; + if (mbui_avail (string_iter)) + { + mbchar_t first_char_after_tsub = mbui_cur (string_iter); + if (mb_isalnum (first_char_after_tsub)) + word_boundary_after = false; + } + + if (word_boundary_before && word_boundary_after) + { + found = true; + break; + } + + mbui_init (string_iter, tsub_in_string); + if (!mbui_avail (string_iter)) + break; + string = tsub_in_string + mb_len (mbui_cur (string_iter)); + } + else + { + bool word_boundary_before; + const char *p; + bool word_boundary_after; + + word_boundary_before = true; + if (string < tsub_in_string) + if (isalnum ((unsigned char) tsub_in_string[-1])) + word_boundary_before = false; + + p = tsub_in_string + strlen (tsub); + word_boundary_after = true; + if (*p != '\0') + if (isalnum ((unsigned char) *p)) + word_boundary_after = false; + + if (word_boundary_before && word_boundary_after) + { + found = true; + break; + } + + if (*tsub_in_string == '\0') + break; + string = tsub_in_string + 1; + } + } + } + free (tsub); + return found; +} + +/* Return the localization of NAME. NAME is written in ASCII. */ + +const char * +proper_name (const char *name) +{ + /* See whether there is a translation. */ + const char *translation = gettext (name); + + if (translation != name) + { + /* See whether the translation contains the original name. */ + if (mbsstr_trimmed_wordbounded (translation, name)) + return translation; + else + { + /* Return "TRANSLATION (NAME)". */ + char *result = + XNMALLOC (strlen (translation) + 2 + strlen (name) + 1 + 1, char); + + sprintf (result, "%s (%s)", translation, name); + return result; + } + } + else + return name; +} + +/* Return the localization of a name whose original writing is not ASCII. + NAME_UTF8 is the real name, written in UTF-8 with octal or hexadecimal + escape sequences. NAME_ASCII is a fallback written only with ASCII + characters. */ + +const char * +proper_name_utf8 (const char *name_ascii, const char *name_utf8) +{ + /* See whether there is a translation. */ + const char *translation = gettext (name_ascii); + + /* Try to convert NAME_UTF8 to the locale encoding. */ + const char *locale_code = locale_charset (); + char *alloc_name_converted = NULL; + char *alloc_name_converted_translit = NULL; + const char *name_converted = NULL; + const char *name_converted_translit = NULL; + const char *name; + + if (c_strcasecmp (locale_code, "UTF-8") != 0) + { +#if HAVE_ICONV + name_converted = alloc_name_converted = + xstr_iconv (name_utf8, "UTF-8", locale_code); + +# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \ + || _LIBICONV_VERSION >= 0x0105 + { + char *converted_translit; + + size_t len = strlen (locale_code); + char *locale_code_translit = XNMALLOC (len + 10 + 1, char); + memcpy (locale_code_translit, locale_code, len); + memcpy (locale_code_translit + len, "//TRANSLIT", 10 + 1); + + converted_translit = + xstr_iconv (name_utf8, "UTF-8", locale_code_translit); + + free (locale_code_translit); + + if (converted_translit != NULL) + { +# if !_LIBICONV_VERSION + /* Don't use the transliteration if it added question marks. + glibc's transliteration falls back to question marks; libiconv's + transliteration does not. + mbschr is equivalent to strchr in this case. */ + if (strchr (converted_translit, '?') != NULL) + free (converted_translit); + else +# endif + name_converted_translit = alloc_name_converted_translit = + converted_translit; + } + } +# endif +#endif + } + else + { + name_converted = name_utf8; + name_converted_translit = name_utf8; + } + + /* The name in locale encoding. */ + name = (name_converted != NULL ? name_converted : + name_converted_translit != NULL ? name_converted_translit : + name_ascii); + + /* See whether we have a translation. Some translators have not understood + that they should use the UTF-8 form of the name, if possible. So if the + translator provided a no-op translation, we ignore it. */ + if (strcmp (translation, name_ascii) != 0) + { + /* See whether the translation contains the original name. */ + if (mbsstr_trimmed_wordbounded (translation, name_ascii) + || (name_converted != NULL + && mbsstr_trimmed_wordbounded (translation, name_converted)) + || (name_converted_translit != NULL + && mbsstr_trimmed_wordbounded (translation, name_converted_translit))) + { + if (alloc_name_converted != NULL) + free (alloc_name_converted); + if (alloc_name_converted_translit != NULL) + free (alloc_name_converted_translit); + return translation; + } + else + { + /* Return "TRANSLATION (NAME)". */ + char *result = + XNMALLOC (strlen (translation) + 2 + strlen (name) + 1 + 1, char); + + sprintf (result, "%s (%s)", translation, name); + + if (alloc_name_converted != NULL) + free (alloc_name_converted); + if (alloc_name_converted_translit != NULL) + free (alloc_name_converted_translit); + return result; + } + } + else + { + if (alloc_name_converted != NULL && alloc_name_converted != name) + free (alloc_name_converted); + if (alloc_name_converted_translit != NULL + && alloc_name_converted_translit != name) + free (alloc_name_converted_translit); + return name; + } +} + +#ifdef TEST1 +# include <locale.h> +int +main (int argc, char *argv[]) +{ + setlocale (LC_ALL, ""); + if (mbsstr_trimmed_wordbounded (argv[1], argv[2])) + printf("found\n"); + return 0; +} +#endif + +#ifdef TEST2 +# include <locale.h> +# include <stdio.h> +int +main (int argc, char *argv[]) +{ + setlocale (LC_ALL, ""); + printf ("%s\n", proper_name_utf8 ("Franc,ois Pinard", "Fran\303\247ois Pinard")); + return 0; +} +#endif diff --git a/lib/propername.h b/lib/propername.h new file mode 100644 index 0000000..eba56f6 --- /dev/null +++ b/lib/propername.h @@ -0,0 +1,106 @@ +/* Localization of proper names. + Copyright (C) 2006, 2008, 2009, 2010 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 <http://www.gnu.org/licenses/>. */ + +/* INTRODUCTION + + What do + + Torbjörn Granlund (coreutils) + François Pinard (coreutils) + Danilo Å egan (gettext) + + have in common? + + A non-ASCII name. This causes trouble in the --version output. The simple + "solution", unfortunately mutilates the name. + + $ du --version| grep Granlund + Écrit par Torbjorn Granlund, David MacKenzie, Paul Eggert et Jim Meyering. + + $ ptx --version| grep Pinard + Écrit par F. Pinard. + + What is desirable, is to print the full name if the output character set + allows it, and the ASCIIfied name only as a fallback. + + $ recode-sr-latin --version + ... + Written by Danilo Å egan and Bruno Haible. + + $ LC_ALL=C recode-sr-latin --version + ... + Written by Danilo Segan and Bruno Haible. + + The 'propername' module does exactly this. Plus, for languages that use + a different writing system than the Latin alphabet, it allows a translator + to write the name using that different writing system. In that case the + output will look like this: + <translated name> (<original name in English>) + + To use the 'propername' module is done in three simple steps: + + 1) Add it to the list of gnulib modules to import, + + 2) Change the arguments of version_etc, from + + from "Paul Eggert" + to proper_name ("Paul Eggert") + + from "Torbjorn Granlund" + to proper_name_utf8 ("Torbjorn Granlund", "Torbj\303\266rn Granlund") + + from "F. Pinard" + to proper_name_utf8 ("Franc,ois Pinard", "Fran\303\247ois Pinard") + + (Optionally, here you can also add / * TRANSLATORS: ... * / comments + explaining how the name is written or pronounced.) + + 3) If you are using GNU gettext version 0.16.1 or older, in po/Makevars, + in the definition of the XGETTEXT_OPTIONS variable, add: + + --keyword='proper_name:1,"This is a proper name. See the gettext manual, section Names."' + --keyword='proper_name_utf8:1,"This is a proper name. See the gettext manual, section Names."' + + This specifies automatic comments for the translator. (Requires + xgettext >= 0.15. The double-quotes inside the quoted string are on + purpose: they are part of the --keyword argument syntax.) + */ + +#ifndef _PROPERNAME_H +#define _PROPERNAME_H + + +#ifdef __cplusplus +extern "C" { +#endif + +/* Return the localization of NAME. NAME is written in ASCII. */ +extern const char * proper_name (const char *name); + +/* Return the localization of a name whose original writing is not ASCII. + NAME_UTF8 is the real name, written in UTF-8 with octal or hexadecimal + escape sequences. NAME_ASCII is a fallback written only with ASCII + characters. */ +extern const char * proper_name_utf8 (const char *name_ascii, + const char *name_utf8); + +#ifdef __cplusplus +} +#endif + + +#endif /* _PROPERNAME_H */ diff --git a/lib/quote.c b/lib/quote.c new file mode 100644 index 0000000..1f64f44 --- /dev/null +++ b/lib/quote.c @@ -0,0 +1,40 @@ +/* quote.c - quote arguments for output + + Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005, 2006, 2009, 2010 Free + Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert <eggert@twinsun.com> */ + +#include <config.h> + +#include "quotearg.h" +#include "quote.h" + +/* Return an unambiguous printable representation of NAME, + allocated in slot N, suitable for diagnostics. */ +char const * +quote_n (int n, char const *name) +{ + return quotearg_n_style (n, locale_quoting_style, name); +} + +/* Return an unambiguous printable representation of NAME, + suitable for diagnostics. */ +char const * +quote (char const *name) +{ + return quote_n (0, name); +} diff --git a/lib/quote.h b/lib/quote.h new file mode 100644 index 0000000..a986956 --- /dev/null +++ b/lib/quote.h @@ -0,0 +1,21 @@ +/* quote.h - prototypes for quote.c + + Copyright (C) 1998, 1999, 2000, 2001, 2003, 2009, 2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + + +char const *quote_n (int n, char const *name); +char const *quote (char const *name); diff --git a/lib/quotearg.c b/lib/quotearg.c new file mode 100644 index 0000000..5418f51 --- /dev/null +++ b/lib/quotearg.c @@ -0,0 +1,889 @@ +/* quotearg.c - quote arguments for output + + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, + 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert <eggert@twinsun.com> */ + +#include <config.h> + +#include "quotearg.h" + +#include "xalloc.h" + +#include <ctype.h> +#include <errno.h> +#include <limits.h> +#include <stdbool.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) + +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", + "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, + 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 *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 +quoting_options_from_style (enum quoting_style style) +{ + struct quoting_options o; + o.style = style; + o.flags = 0; + memset (o.quote_these_too, 0, sizeof o.quote_these_too); + return o; +} + +/* MSGID approximates a quotation mark. Return its translation if it + has one; otherwise, return either it or "\"", depending on S. */ +static char const * +gettext_quote (char const *msgid, enum quoting_style s) +{ + char const *translation = _(msgid); + if (translation == msgid && s == clocale_quoting_style) + translation = "\""; + return translation; +} + +/* 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; + 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; + +#define STORE(c) \ + do \ + { \ + if (len < buffersize) \ + buffer[len] = (c); \ + len++; \ + } \ + while (0) + + switch (quoting_style) + { + case c_maybe_quoting_style: + quoting_style = c_quoting_style; + elide_outer_quotes = true; + /* Fall through. */ + 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 + "'". If the catalog has no translation, + locale_quoting_style quotes `like this', and + clocale_quoting_style quotes "like this". + + For example, an American English Unicode locale should + translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and + should translate "'" to U+201D (RIGHT DOUBLE QUOTATION + MARK). A British English Unicode locale should instead + translate these to U+2018 (LEFT SINGLE QUOTATION MARK) + and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. + + If you don't know what to put here, please see + <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> + 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_quoting_style: + quoting_style = shell_always_quoting_style; + elide_outer_quotes = true; + /* Fall through. */ + case 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; + + if (backslash_escapes + && quote_string_len + && i + quote_string_len <= 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) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + STORE ('\\'); + /* 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. */ + if (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; + /* 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; + /* Fall through. */ + case '#': case '~': + if (i != 0) + break; + /* Fall through. */ + case ' ': + 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 '\'': + if (quoting_style == shell_always_quoting_style) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + STORE ('\''); + STORE ('\\'); + STORE ('\''); + } + 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. */ + 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)); + } + + 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) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + STORE ('\\'); + 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; + STORE (c); + c = arg[++i]; + } + + goto store_c; + } + } + } + + if (! ((backslash_escapes || elide_outer_quotes) + && quote_these_too + && quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS))) + && !is_right_quote) + goto store_c; + + store_escape: + if (elide_outer_quotes) + goto force_outer_quoting_style; + STORE ('\\'); + + store_c: + STORE (c); + } + + if (len == 0 && quoting_style == shell_always_quoting_style + && elide_outer_quotes) + goto force_outer_quoting_style; + + 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. */ + 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 unsigned int nslots = 1; +static struct slotvec slotvec0 = {sizeof slot0, slot0}; +static struct slotvec *slotvec = &slotvec0; + +void +quotearg_free (void) +{ + struct slotvec *sv = slotvec; + unsigned 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; + + unsigned int n0 = n; + struct slotvec *sv = slotvec; + + if (n < 0) + abort (); + + if (nslots <= n0) + { + /* FIXME: technically, the type of n1 should be `unsigned int', + but that evokes an unsuppressible warning from gcc-4.0.1 and + older. If gcc ever provides an option to suppress that warning, + revert to the original type, so that the test in xalloc_oversized + is once again performed only at compile time. */ + size_t n1 = n0 + 1; + bool preallocated = (sv == &slotvec0); + + if (xalloc_oversized (n1, sizeof *sv)) + xalloc_die (); + + slotvec = sv = xrealloc (preallocated ? NULL : sv, n1 * sizeof *sv); + if (preallocated) + *sv = slotvec0; + memset (sv + nslots, 0, (n1 - nslots) * sizeof *sv); + nslots = n1; + } + + { + 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_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); +} diff --git a/lib/quotearg.h b/lib/quotearg.h new file mode 100644 index 0000000..084cd1b --- /dev/null +++ b/lib/quotearg.h @@ -0,0 +1,389 @@ +/* quotearg.h - quote arguments for output + + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2006, 2008, 2009, 2010 + Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* 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 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 quote `like this' instead of + "like this" in the default C locale (ls --quoting-style=locale). + + 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 *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 (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/lib/ref-add.sin b/lib/ref-add.sin new file mode 100644 index 0000000..dbb61df --- /dev/null +++ b/lib/ref-add.sin @@ -0,0 +1,30 @@ +# Add this package to a list of references stored in a text file. +# +# Copyright (C) 2000, 2009, 2010 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute 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, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# Written by Bruno Haible <haible@clisp.cons.org>. +# +/^# Packages using this file: / { + s/# Packages using this file:// + ta + :a + s/ @PACKAGE@ / @PACKAGE@ / + tb + s/ $/ @PACKAGE@ / + :b + s/^/# Packages using this file:/ +} diff --git a/lib/ref-del.sin b/lib/ref-del.sin new file mode 100644 index 0000000..4c31a6e --- /dev/null +++ b/lib/ref-del.sin @@ -0,0 +1,25 @@ +# Remove this package from a list of references stored in a text file. +# +# Copyright (C) 2000, 2009, 2010 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute 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, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# Written by Bruno Haible <haible@clisp.cons.org>. +# +/^# Packages using this file: / { + s/# Packages using this file:// + s/ @PACKAGE@ / / + s/^/# Packages using this file:/ +} diff --git a/lib/regcomp.c b/lib/regcomp.c new file mode 100644 index 0000000..5b19124 --- /dev/null +++ b/lib/regcomp.c @@ -0,0 +1,3882 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Extended regular expression matching and search library. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free + Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa <isamu@yamato.ibm.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 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +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) internal_function; +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 unsigned 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 unsigned 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 unsigned char *class_name, + const unsigned 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. */ + +#ifdef _LIBC +const char * +re_compile_pattern (pattern, length, bufp) + const char *pattern; + size_t length; + struct re_pattern_buffer *bufp; +#else /* size_t might promote */ +const char * +re_compile_pattern (const char *pattern, size_t length, + struct re_pattern_buffer *bufp) +#endif +{ + 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]); +} +#ifdef _LIBC +weak_alias (__re_compile_pattern, re_compile_pattern) +#endif + +/* 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 (syntax) + reg_syntax_t syntax; +{ + reg_syntax_t ret = re_syntax_options; + + re_syntax_options = syntax; + return ret; +} +#ifdef _LIBC +weak_alias (__re_set_syntax, re_set_syntax) +#endif + +int +re_compile_fastmap (bufp) + struct re_pattern_buffer *bufp; +{ + re_dfa_t *dfa = (re_dfa_t *) 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; +} +#ifdef _LIBC +weak_alias (__re_compile_fastmap, re_compile_fastmap) +#endif + +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 = (re_dfa_t *) 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 (preg, pattern, cflags) + 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 (BE (preg->fastmap == NULL, 0)) + 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 (BE (ret == REG_NOERROR, 1)) + /* 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; +} +#ifdef _LIBC +weak_alias (__regcomp, regcomp) +#endif + +/* Returns a message corresponding to an error code, ERRCODE, returned + from either regcomp or regexec. We don't use PREG here. */ + +#ifdef _LIBC +size_t +regerror (errcode, preg, errbuf, errbuf_size) + int errcode; + const regex_t *_Restrict_ preg; + char *_Restrict_ errbuf; + size_t errbuf_size; +#else /* size_t might promote */ +size_t +regerror (int errcode, const regex_t *_Restrict_ preg _UNUSED_PARAMETER_, + char *_Restrict_ errbuf, size_t errbuf_size) +#endif +{ + const char *msg; + size_t msg_size; + + if (BE (errcode < 0 + || errcode >= (int) (sizeof (__re_error_msgid_idx) + / sizeof (__re_error_msgid_idx[0])), 0)) + /* 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 (BE (errbuf_size != 0, 1)) + { + size_t cpy_size = msg_size; + if (BE (msg_size > errbuf_size, 0)) + { + cpy_size = errbuf_size - 1; + errbuf[cpy_size] = '\0'; + } + memcpy (errbuf, msg, cpy_size); + } + + return msg_size; +} +#ifdef _LIBC +weak_alias (__regerror, regerror) +#endif + + +#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 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 + + +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 (preg) + regex_t *preg; +{ + re_dfa_t *dfa = (re_dfa_t *) preg->buffer; + if (BE (dfa != NULL, 1)) + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + + re_free (preg->fastmap); + preg->fastmap = NULL; + + re_free (preg->translate); + preg->translate = NULL; +} +#ifdef _LIBC +weak_alias (__regfree, regfree) +#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 + +/* 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 (s) + 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 = (char *) malloc (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 = (re_dfa_t *) preg->buffer; + if (BE (preg->allocated < sizeof (re_dfa_t), 0)) + { + /* 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 = (unsigned char *) dfa; + } + preg->used = sizeof (re_dfa_t); + + err = init_dfa (dfa, length); + if (BE (err != REG_NOERROR, 0)) + { + 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 + + __libc_lock_init (dfa->lock); + + err = re_string_construct (®exp, pattern, length, preg->translate, + (syntax & RE_ICASE) != 0, dfa); + if (BE (err != REG_NOERROR, 0)) + { + re_compile_internal_free_return: + free_workarea_compile (preg); + re_string_destruct (®exp); + 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 (BE (dfa->str_tree == NULL, 0)) + goto re_compile_internal_free_return; + + /* Analyze the tree and create the nfa. */ + err = analyze (preg); + if (BE (err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + { + 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 + 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 (BE (SIZE_MAX / max_object_size / 2 <= pat_len, 0)) + 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 (strcasecmp (codeset_name, "UTF-8") == 0 + || strcasecmp (codeset_name, "UTF8") == 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 (BE (dfa->sb_char == NULL, 0)) + 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 (BE (dfa->nodes == NULL || dfa->state_table == NULL, 0)) + 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 +internal_function +init_word_char (re_dfa_t *dfa) +{ + int i, j, ch; + dfa->word_ops_used = 1; + for (i = 0, ch = 0; 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 = (re_dfa_t *) 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 (BE (err != REG_NOERROR, 0)) + 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 (BE (dfa->init_state == NULL, 0)) + 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 (BE (dfa->init_state_word == NULL || dfa->init_state_nl == NULL + || dfa->init_state_begbuf == NULL, 0)) + 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 = (re_dfa_t *) 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 (BE (dfa->nexts == NULL || dfa->org_indices == NULL || dfa->edests == NULL + || dfa->eclosures == NULL, 0)) + 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) + { + free (dfa->subexp_map); + dfa->subexp_map = NULL; + } + } + + ret = postorder (dfa->str_tree, lower_subexps, preg); + if (BE (ret != REG_NOERROR, 0)) + return ret; + ret = postorder (dfa->str_tree, calc_first, dfa); + if (BE (ret != REG_NOERROR, 0)) + return ret; + preorder (dfa->str_tree, calc_next, dfa); + ret = preorder (dfa->str_tree, link_nfa_nodes, dfa); + if (BE (ret != REG_NOERROR, 0)) + return ret; + ret = calc_eclosure (dfa); + if (BE (ret != REG_NOERROR, 0)) + 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 (BE (dfa->inveclosures == NULL, 0)) + 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 (BE (err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + 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 = (re_dfa_t *) 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 (BE (tree == NULL || tree1 == NULL || op == NULL || cls == NULL, 0)) + { + *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 (BE (node->node_idx == REG_MISSING, 0)) + 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 _UNUSED_PARAMETER_, 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 (REG_VALID_INDEX (left)); + assert (REG_VALID_INDEX (right)); + 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 +internal_function +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 (BE (clone_dest == REG_MISSING, 0)) + return REG_ESPACE; + dfa->nexts[clone_node] = dfa->nexts[org_node]; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + 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 (BE (! ok, 0)) + 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 (BE (clone_dest == REG_MISSING, 0)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + 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 == REG_MISSING) + { + /* There is no such duplicated node, create a new one. */ + reg_errcode_t err; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (BE (clone_dest == REG_MISSING, 0)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + err = duplicate_node_closure (dfa, org_dest, clone_dest, + root_node, constraint); + if (BE (err != REG_NOERROR, 0)) + 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 (BE (! ok, 0)) + return REG_ESPACE; + } + + org_dest = dfa->edests[org_node].elems[1]; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (BE (clone_dest == REG_MISSING, 0)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + 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 REG_MISSING; /* Not found. */ +} + +/* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT. + Return the index of the new node, or REG_MISSING 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 (BE (dup_idx != REG_MISSING, 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 (BE (! ok, 0)) + 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 != REG_MISSING); +#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 (BE (err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + return err; + + /* This indicates that we are calculating this node now. + We reference this value to avoid infinite loop. */ + dfa->eclosures[node].nelem = REG_MISSING; + + /* 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 (BE (err != REG_NOERROR, 0)) + 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 == REG_MISSING) + { + 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 (BE (err != REG_NOERROR, 0)) + return err; + } + else + eclosure_elem = dfa->eclosures[edest]; + /* Merge the epsilon closure of `edest'. */ + err = re_node_set_merge (&eclosure, &eclosure_elem); + if (BE (err != REG_NOERROR, 0)) + 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 (BE (! ok, 0)) + 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 +internal_function +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 +internal_function +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 +internal_function +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; + } + /* else fall through. */ + 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 is occured, 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 = (re_dfa_t *) 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 (BE (*err != REG_NOERROR && tree == NULL, 0)) + 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 (BE (eor == NULL || root == NULL, 0)) + { + *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 = (re_dfa_t *) preg->buffer; + bin_tree_t *tree, *branch = NULL; + tree = parse_branch (regexp, preg, token, syntax, nest, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + 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)) + { + branch = parse_branch (regexp, preg, token, syntax, nest, err); + if (BE (*err != REG_NOERROR && branch == NULL, 0)) + return NULL; + } + else + branch = NULL; + tree = create_tree (dfa, tree, branch, OP_ALT); + if (BE (tree == NULL, 0)) + { + *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 = (re_dfa_t *) preg->buffer; + tree = parse_expression (regexp, preg, token, syntax, nest, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + 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 (BE (*err != REG_NOERROR && expr == NULL, 0)) + { + return NULL; + } + if (tree != NULL && expr != NULL) + { + tree = create_tree (dfa, tree, expr, CONCAT); + if (tree == NULL) + { + *err = REG_ESPACE; + return NULL; + } + } + 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 = (re_dfa_t *) preg->buffer; + bin_tree_t *tree; + switch (token->type) + { + case CHARACTER: + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *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 (BE (mbc_remain == NULL || tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + } + } +#endif + break; + case OP_OPEN_SUBEXP: + tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + break; + case OP_OPEN_BRACKET: + tree = parse_bracket_exp (regexp, dfa, token, syntax, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + break; + case OP_BACK_REF: + if (!BE (dfa->completed_bkref_map & (1 << token->opr.idx), 1)) + { + *err = REG_ESUBREG; + return NULL; + } + dfa->used_bkref_map |= 1 << token->opr.idx; + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *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); + } + /* else fall through */ + case OP_CLOSE_SUBEXP: + if ((token->type == OP_CLOSE_SUBEXP) && + !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)) + { + *err = REG_ERPAREN; + return NULL; + } + /* else fall through */ + 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 (BE (tree == NULL, 0)) + { + *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 (BE (tree_first == NULL || tree_last == NULL || tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + } + else + { + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *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 (BE (tree == NULL, 0)) + { + *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, + (const unsigned char *) "alnum", + (const unsigned char *) "_", + token->type == OP_NOTWORD, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + break; + case OP_SPACE: + case OP_NOTSPACE: + tree = build_charclass_op (dfa, regexp->trans, + (const unsigned char *) "space", + (const unsigned char *) "", + token->type == OP_NOTSPACE, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + 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) + { + tree = parse_dup_op (tree, regexp, dfa, token, syntax, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + /* In BRE consecutive duplications are not allowed. */ + if ((syntax & RE_CONTEXT_INVALID_DUP) + && (token->type == OP_DUP_ASTERISK + || token->type == OP_OPEN_DUP_NUM)) + { + *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 = (re_dfa_t *) 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 (BE (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP, 0)) + *err = REG_EPAREN; + if (BE (*err != REG_NOERROR, 0)) + return NULL; + } + + if (cur_nsub <= '9' - '1') + dfa->completed_bkref_map |= 1 << cur_nsub; + + tree = create_tree (dfa, tree, NULL, SUBEXP); + if (BE (tree == NULL, 0)) + { + *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 == REG_MISSING) + { + 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 (BE (start != REG_ERROR, 1)) + { + /* 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) : REG_ERROR)); + } + if (BE (start == REG_ERROR || end == REG_ERROR, 0)) + { + /* Invalid sequence. */ + if (BE (!(syntax & RE_INVALID_INTERVAL_ORD), 0)) + { + 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 (BE ((end != REG_MISSING && start > end) + || token->type != OP_CLOSE_DUP_NUM, 0)) + { + /* First number greater than second. */ + *err = REG_BADBR; + return NULL; + } + } + else + { + start = (token->type == OP_DUP_PLUS) ? 1 : 0; + end = (token->type == OP_DUP_QUESTION) ? 1 : REG_MISSING; + } + + fetch_token (token, regexp, syntax); + + if (BE (elem == NULL, 0)) + return NULL; + if (BE (start == 0 && end == 0, 0)) + { + postorder (elem, free_tree, NULL); + return NULL; + } + + /* Extract "<re>{n,m}" to "<re><re>...<re><re>{0,<m-n>}". */ + if (BE (start > 0, 0)) + { + tree = elem; + for (i = 2; i <= start; ++i) + { + elem = duplicate_tree (elem, dfa); + tree = create_tree (dfa, tree, elem, CONCAT); + if (BE (elem == NULL || tree == NULL, 0)) + goto parse_dup_op_espace; + } + + if (start == end) + return tree; + + /* Duplicate ELEM before it is marked optional. */ + elem = duplicate_tree (elem, dfa); + old_tree = tree; + } + else + old_tree = NULL; + + if (elem->token.type == SUBEXP) + postorder (elem, mark_opt_subexp, (void *) (long) elem->token.opr.idx); + + tree = create_tree (dfa, elem, NULL, + (end == REG_MISSING ? OP_DUP_ASTERISK : OP_ALT)); + if (BE (tree == NULL, 0)) + goto parse_dup_op_espace; + +/* From gnulib's "intprops.h": + True if the arithmetic type T is signed. */ +#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + + /* This loop is actually executed only when end != REG_MISSING, + to rewrite <re>{0,n} as (<re>(<re>...<re>?)?)?... We have + already created the start+1-th copy. */ + if (TYPE_SIGNED (Idx) || end != REG_MISSING) + for (i = start + 2; i <= end; ++i) + { + elem = duplicate_tree (elem, dfa); + tree = create_tree (dfa, tree, elem, CONCAT); + if (BE (elem == NULL || tree == NULL, 0)) + goto parse_dup_op_espace; + + tree = create_tree (dfa, tree, NULL, OP_ALT); + if (BE (tree == NULL, 0)) + 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 + /* 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 sinse we may + update it. */ + +static reg_errcode_t +internal_function +# 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 (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS + || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS, + 0)) + return REG_ERANGE; + + /* We can handle no multi character collating elements without libc + support. */ + if (BE ((start_elem->type == COLL_SYM + && strlen ((char *) start_elem->opr.name) > 1) + || (end_elem->type == COLL_SYM + && strlen ((char *) end_elem->opr.name) > 1), 0)) + return REG_ECOLLATE; + +# ifdef RE_ENABLE_I18N + { + wchar_t wc; + wint_t start_wc; + wint_t end_wc; + wchar_t cmp_buf[6] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'}; + + 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) + ? __btowc (start_ch) : start_elem->opr.wch); + end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM) + ? __btowc (end_ch) : end_elem->opr.wch); + if (start_wc == WEOF || end_wc == WEOF) + return REG_ECOLLATE; + cmp_buf[0] = start_wc; + cmp_buf[4] = end_wc; + + if (BE ((syntax & RE_NO_EMPTY_RANGES) + && wcscoll (cmp_buf, cmp_buf + 4) > 0, 0)) + 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 (BE (*range_alloc == mbcset->nranges, 0)) + { + /* 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 (BE (new_array_start == NULL || new_array_end == NULL, 0)) + 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) + { + cmp_buf[2] = wc; + if (wcscoll (cmp_buf, cmp_buf + 2) <= 0 + && wcscoll (cmp_buf + 2, cmp_buf + 4) <= 0) + 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 +internal_function +build_collating_symbol (bitset_t sbcset, +# ifdef RE_ENABLE_I18N + re_charset_t *mbcset _UNUSED_PARAMETER_, + Idx *coll_sym_alloc _UNUSED_PARAMETER_, +# endif + const unsigned char *name) +{ + size_t name_len = strlen ((const char *) name); + if (BE (name_len != 1, 0)) + 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 environement. + Seek the collating symbol entry correspondings to NAME. + Return the index of the symbol in the SYMB_TABLE. */ + + auto inline int32_t + __attribute ((always_inline)) + seek_collating_symbol_entry (name, name_len) + const unsigned char *name; + size_t name_len; + { + int32_t hash = elem_hash ((const char *) name, name_len); + int32_t elem = hash % table_size; + if (symb_table[2 * elem] != 0) + { + int32_t second = hash % (table_size - 2) + 1; + + do + { + /* First compare the hashing value. */ + if (symb_table[2 * elem] == hash + /* Compare the length of the name. */ + && name_len == extra[symb_table[2 * elem + 1]] + /* Compare the name. */ + && memcmp (name, &extra[symb_table[2 * elem + 1] + 1], + name_len) == 0) + { + /* Yep, this is the entry. */ + break; + } + + /* Next entry. */ + elem += second; + } + while (symb_table[2 * elem] != 0); + } + return elem; + } + + /* 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 (br_elem) + 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 (symb_table[2 * elem] != 0) + { + /* 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 (symb_table[2 * elem] == 0 && 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 environement. + 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 sinse we may + update it. */ + + auto inline reg_errcode_t + __attribute ((always_inline)) + build_range_exp (sbcset, mbcset, range_alloc, start_elem, end_elem) + re_charset_t *mbcset; + Idx *range_alloc; + bitset_t sbcset; + bracket_elem_t *start_elem, *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 (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS + || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS, + 0)) + return REG_ERANGE; + + start_collseq = lookup_collation_sequence_value (start_elem); + end_collseq = lookup_collation_sequence_value (end_elem); + /* Check start/end collation sequence values. */ + if (BE (start_collseq == UINT_MAX || end_collseq == UINT_MAX, 0)) + return REG_ECOLLATE; + if (BE ((syntax & RE_NO_EMPTY_RANGES) && start_collseq > end_collseq, 0)) + 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 (BE (*range_alloc == mbcset->nranges, 0)) + { + /* 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 (BE (new_array_start == NULL || new_array_end == NULL, 0)) + 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 environement. + 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 sinse we may update it. */ + + auto inline reg_errcode_t + __attribute ((always_inline)) + build_collating_symbol (sbcset, mbcset, coll_sym_alloc, name) + re_charset_t *mbcset; + Idx *coll_sym_alloc; + bitset_t sbcset; + 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 (symb_table[2 * elem] != 0) + { + /* We found the entry. */ + idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element name. */ + idx += 1 + extra[idx]; + } + else if (symb_table[2 * elem] == 0 && 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 (BE (*coll_sym_alloc == mbcset->ncoll_syms, 0)) + { + /* 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 (BE (new_coll_syms == NULL, 0)) + 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 (BE (name_len != 1, 0)) + 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 (BE (sbcset == NULL || mbcset == NULL, 0)) +#else + if (BE (sbcset == NULL, 0)) +#endif /* RE_ENABLE_I18N */ + { + *err = REG_ESPACE; + return NULL; + } + + token_len = peek_token_bracket (token, regexp, syntax); + if (BE (token->type == END_OF_RE, 0)) + { + *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 (BE (token->type == END_OF_RE, 0)) + { + *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; + ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa, + syntax, first_round); + if (BE (ret != REG_NOERROR, 0)) + { + *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 (BE (token->type == END_OF_RE, 0)) + { + *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 (BE (token2.type == END_OF_RE, 0)) + { + *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; + ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2, + dfa, syntax, true); + if (BE (ret != REG_NOERROR, 0)) + { + *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 (BE (*err != REG_NOERROR, 0)) + 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 (BE (mbchar_alloc == mbcset->nmbchars, 0)) + { + 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 (BE (new_mbchars == NULL, 0)) + 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 (BE (*err != REG_NOERROR, 0)) + 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 (BE (*err != REG_NOERROR, 0)) + 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 */ + start_elem.opr.name, syntax); + if (BE (*err != REG_NOERROR, 0)) + goto parse_bracket_exp_free_return; + break; + default: + assert (0); + break; + } + } + if (BE (token->type == END_OF_RE, 0)) + { + *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 (BE (mbc_tree == NULL, 0)) + 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 (BE (work_tree == NULL, 0)) + goto parse_bracket_exp_espace; + + /* Then join them by ALT node. */ + work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT); + if (BE (work_tree == NULL, 0)) + 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 (BE (work_tree == NULL, 0)) + 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 _UNUSED_PARAMETER_, + 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 (BE (token->type == OP_CHARSET_RANGE, 0) && !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 sinse we may update it. */ + +static reg_errcode_t +#ifdef RE_ENABLE_I18N +build_equiv_class (bitset_t sbcset, re_charset_t *mbcset _UNUSED_PARAMETER_, + Idx *equiv_class_alloc _UNUSED_PARAMETER_, + 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; + /* This #include defines a local function! */ +# include <locale/weight.h> + /* 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 (&cp); + if (BE (idx1 == 0 || cp < name + strlen ((const char *) name), 0)) + /* This isn't a valid character. */ + return REG_ECOLLATE; + + /* Build single byte matcing table for this equivalence class. */ + char_buf[1] = (unsigned char) '\0'; + len = weights[idx1 & 0xffffff]; + for (ch = 0; ch < SBC_MAX; ++ch) + { + char_buf[0] = ch; + cp = char_buf; + idx2 = findidx (&cp); +/* + 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)) + { + int cnt = 0; + + while (cnt <= len && + weights[(idx1 & 0xffffff) + 1 + cnt] + == weights[(idx2 & 0xffffff) + 1 + cnt]) + ++cnt; + + if (cnt > len) + bitset_set (sbcset, ch); + } + } + /* Check whether the array has enough space. */ + if (BE (*equiv_class_alloc == mbcset->nequiv_classes, 0)) + { + /* 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 (BE (new_equiv_classes == NULL, 0)) + 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 (BE (strlen ((const char *) name) != 1, 0)) + 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 sinse 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 unsigned char *class_name, reg_syntax_t syntax) +#else /* not RE_ENABLE_I18N */ +build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, + const unsigned char *class_name, reg_syntax_t syntax) +#endif /* not RE_ENABLE_I18N */ +{ + int i; + const char *name = (const char *) 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 (BE (*char_class_alloc == mbcset->nchar_classes, 0)) + { + /* 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 (BE (new_char_classes == NULL, 0)) + 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 (BE (trans != NULL, 0)) \ + { \ + 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 unsigned char *class_name, + const unsigned 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); +#ifdef RE_ENABLE_I18N + mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); +#endif /* RE_ENABLE_I18N */ + +#ifdef RE_ENABLE_I18N + if (BE (sbcset == NULL || mbcset == NULL, 0)) +#else /* not RE_ENABLE_I18N */ + if (BE (sbcset == NULL, 0)) +#endif /* not RE_ENABLE_I18N */ + { + *err = REG_ESPACE; + return NULL; + } + + if (non_match) + { +#ifdef RE_ENABLE_I18N + mbcset->non_match = 1; +#endif /* not 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 (BE (ret != REG_NOERROR, 0)) + { + 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. */ + br_token.type = SIMPLE_BRACKET; + br_token.opr.sbcset = sbcset; + tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (BE (tree == NULL, 0)) + 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 (BE (mbc_tree == NULL, 0)) + goto build_word_op_espace; + /* Then join them by ALT node. */ + tree = create_tree (dfa, tree, mbc_tree, OP_ALT); + if (BE (mbc_tree != NULL, 1)) + 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 REG_MISSING if the number field is empty like "{,1}". + Return REG_ERROR if an error occurred. */ + +static Idx +fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax) +{ + Idx num = REG_MISSING; + unsigned char c; + while (1) + { + fetch_token (token, input, syntax); + c = token->opr.c; + if (BE (token->type == END_OF_RE, 0)) + return REG_ERROR; + if (token->type == OP_CLOSE_DUP_NUM || c == ',') + break; + num = ((token->type != CHARACTER || c < '0' || '9' < c + || num == REG_ERROR) + ? REG_ERROR + : ((num == REG_MISSING) ? c - '0' : num * 10 + c - '0')); + num = (num > RE_DUP_MAX) ? REG_ERROR : num; + } + 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); + re_free (cset->range_starts); + re_free (cset->range_ends); +# endif + 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; + 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 (BE (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE, 0)) + { + 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 = REG_MISSING; + + 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 = (Idx) (long) 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 _UNUSED_PARAMETER_, 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/lib/regex.c b/lib/regex.c new file mode 100644 index 0000000..5415c8f --- /dev/null +++ b/lib/regex.c @@ -0,0 +1,74 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Extended regular expression matching and search library. + Copyright (C) 2002, 2003, 2005, 2006, 2009, 2010 Free Software Foundation, + Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa <isamu@yamato.ibm.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 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include <config.h> + +/* Make sure noone 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/lib/regex.h b/lib/regex.h new file mode 100644 index 0000000..ef54b55 --- /dev/null +++ b/lib/regex.h @@ -0,0 +1,678 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Definitions for data structures and routines for the regular + expression library. + Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993, 1995, 1996, 1997, 1998, + 2000, 2001, 2002, 2003, 2005, 2006, 2009, 2010 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#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_REGEX to declare GNU extensions that violate the + POSIX name space rules. */ +#undef __USE_GNU_REGEX +#if (defined _GNU_SOURCE \ + || (!defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE \ + && !defined _XOPEN_SOURCE)) +# define __USE_GNU_REGEX 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 the offset of a byte within a string. + For historical reasons POSIX 1003.1-2004 requires that regoff_t be + at least as wide as off_t. However, many common POSIX platforms set + regoff_t to the more-sensible ssize_t and the Open Group has + signalled its intention to change the requirement to be that + regoff_t be at least as wide as ptrdiff_t and ssize_t; see XBD ERN + 60 (2005-08-25). We don't know of any hosts where ssize_t or + ptrdiff_t is wider than ssize_t, so ssize_t is safe. */ +typedef ssize_t regoff_t; + +/* The type of nonnegative object indexes. Traditionally, GNU regex + uses 'int' for these. Code that uses __re_idx_t should work + regardless of whether the type is signed. */ +typedef size_t __re_idx_t; + +/* 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 + +/* Use types that are binary-compatible with the traditional GNU regex + implementation, which mishandles strings longer than INT_MAX. */ + +typedef int regoff_t; +typedef int __re_idx_t; +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_REGEX + +/* 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 an bre or + immediately after an alternation or begin-group 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 /* defined __USE_GNU_REGEX */ + +/* 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_REGEX +/* 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_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) + +# define RE_SYNTAX_GNU_AWK \ + ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG) \ + & ~(RE_DOT_NOT_NULL | RE_INTERVALS | 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) + +# define RE_SYNTAX_GREP \ + (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ + | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ + | RE_NEWLINE_ALT) + +# define RE_SYNTAX_EGREP \ + (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ + | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ + | RE_NO_BK_VBAR) + +# define RE_SYNTAX_POSIX_EGREP \ + (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES \ + | RE_INVALID_INTERVAL_ORD) + +/* 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]]] */ + +#endif /* defined __USE_GNU_REGEX */ + +#ifdef __USE_GNU_REGEX + +/* 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 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 - 2) / 10 - 1) 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 /* defined __USE_GNU_REGEX */ + + +/* 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, /* Compiled pattern bigger than 2^16 bytes. */ + _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ +} reg_errcode_t; + +#ifdef _XOPEN_SOURCE +# 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 + +/* struct re_pattern_buffer normally uses member names like `buffer' + that POSIX does not allow. In POSIX mode these members have names + with leading `re_' (e.g., `re_buffer'). */ +#ifdef __USE_GNU_REGEX +# define _REG_RE_NAME(id) id +# define _REG_RM_NAME(id) id +#else +# define _REG_RE_NAME(id) re_##id +# define _REG_RM_NAME(id) rm_##id +#endif + +/* The user can specify the type of the re_translate member by + defining the macro RE_TRANSLATE_TYPE, which defaults to unsigned + char *. This pollutes the POSIX name space, so in POSIX mode just + use unsigned char *. */ +#ifdef __USE_GNU_REGEX +# ifndef RE_TRANSLATE_TYPE +# define RE_TRANSLATE_TYPE unsigned char * +# endif +# define REG_TRANSLATE_TYPE RE_TRANSLATE_TYPE +#else +# define REG_TRANSLATE_TYPE unsigned char * +#endif + +/* This data structure represents a compiled pattern. Before calling + the pattern compiler, the fields `buffer', `allocated', `fastmap', + `translate', and `no_sub' can be set. After the pattern has been + compiled, the `re_nsub' field is available. All other fields are + private to the regex routines. */ + +struct re_pattern_buffer +{ + /* Space that holds the compiled pattern. It is declared as + `unsigned char *' because its elements are sometimes used as + array indexes. */ + unsigned char *_REG_RE_NAME (buffer); + + /* Number of bytes to which `buffer' points. */ + __re_long_size_t _REG_RE_NAME (allocated); + + /* Number of bytes actually used in `buffer'. */ + __re_long_size_t _REG_RE_NAME (used); + + /* Syntax setting with which the pattern was compiled. */ + reg_syntax_t _REG_RE_NAME (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 *_REG_RE_NAME (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. */ + REG_TRANSLATE_TYPE _REG_RE_NAME (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 int _REG_RE_NAME (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_REGEX +# define REGS_UNALLOCATED 0 +# define REGS_REALLOCATE 1 +# define REGS_FIXED 2 +#endif + unsigned int _REG_RE_NAME (regs_allocated) : 2; + + /* Set to zero when `regex_compile' compiles a pattern; set to one + by `re_compile_fastmap' if it updates the fastmap. */ + unsigned int _REG_RE_NAME (fastmap_accurate) : 1; + + /* If set, `re_match_2' does not return information about + subexpressions. */ + unsigned int _REG_RE_NAME (no_sub) : 1; + + /* If set, a beginning-of-line anchor doesn't match at the beginning + of the string. */ + unsigned int _REG_RE_NAME (not_bol) : 1; + + /* Similarly for an end-of-line anchor. */ + unsigned int _REG_RE_NAME (not_eol) : 1; + + /* If true, an anchor at a newline matches. */ + unsigned int _REG_RE_NAME (newline_anchor) : 1; + +/* [[[end pattern_buffer]]] */ +}; + +typedef struct re_pattern_buffer regex_t; + +/* 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 _REG_RM_NAME (num_regs); + regoff_t *_REG_RM_NAME (start); + regoff_t *_REG_RM_NAME (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. */ +#if !defined RE_NREGS && defined __USE_GNU_REGEX +# define RE_NREGS 30 +#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. */ + +/* 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. */ +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, __re_idx_t __length, + __re_idx_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, __re_idx_t __length1, + const char *__string2, __re_idx_t __length2, + __re_idx_t __start, regoff_t __range, + struct re_registers *__regs, + __re_idx_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, __re_idx_t __length, + __re_idx_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, __re_idx_t __length1, + const char *__string2, __re_idx_t __length2, + __re_idx_t __start, struct re_registers *__regs, + __re_idx_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 + PATTERN_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); + +#if defined _REGEX_RE_COMP || defined _LIBC +# ifndef _CRAY +/* 4.2 bsd compatibility. */ +extern char *re_comp (const char *); +extern int re_exec (const char *); +# endif +#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__)) \ + && !__STRICT_ANSI__)) \ + && !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/lib/regex_internal.c b/lib/regex_internal.c new file mode 100644 index 0000000..38afdeb --- /dev/null +++ b/lib/regex_internal.c @@ -0,0 +1,1747 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Extended regular expression matching and search library. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free + Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa <isamu@yamato.ibm.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 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include "verify.h" +#include "intprops.h" +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) internal_function; +static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa, + const re_node_set *nodes, + re_hashval_t hash) internal_function; +static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa, + const re_node_set *nodes, + unsigned int context, + re_hashval_t hash) internal_function; + +/* 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 +internal_function __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 (BE (ret != REG_NOERROR, 0)) + 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 +internal_function __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 (BE (ret != REG_NOERROR, 0)) + 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 (BE (ret != REG_NOERROR, 0)) + 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 (BE (ret != REG_NOERROR, 0)) + 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 +internal_function __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. */ + size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx)); + if (BE (SIZE_MAX / max_object_size < new_buf_len, 0)) + return REG_ESPACE; + + new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len); + if (BE (new_wcs == NULL, 0)) + return REG_ESPACE; + pstr->wcs = new_wcs; + if (pstr->offsets != NULL) + { + Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len); + if (BE (new_offsets == NULL, 0)) + 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 (BE (new_mbs == NULL, 0)) + return REG_ESPACE; + pstr->mbs = new_mbs; + } + pstr->bufs_len = new_buf_len; + return REG_NOERROR; +} + + +static void +internal_function +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 +internal_function +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 (BE (pstr->trans != NULL, 0)) + { + 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 (BE (mbclen == (size_t) -2, 0)) + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + else if (BE (mbclen == (size_t) -1 || mbclen == 0, 0)) + { + /* We treat these cases as a singlebyte character. */ + mbclen = 1; + wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; + if (BE (pstr->trans != NULL, 0)) + wc = pstr->trans[wc]; + pstr->cur_state = prev_st; + } + + /* 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 +internal_function __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 (BE (mbclen < (size_t) -2, 1)) + { + wchar_t wcu = wc; + if (iswlower (wc)) + { + size_t mbcdlen; + + wcu = towupper (wc); + mbcdlen = wcrtomb (buf, wcu, &prev_st); + if (BE (mbclen == mbcdlen, 1)) + 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) + { + /* It is an invalid character 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 (BE (mbclen == (size_t) -1, 0)) + 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 (BE (pstr->trans != NULL, 0)) + { + 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 (BE (mbclen < (size_t) -2, 1)) + { + wchar_t wcu = wc; + if (iswlower (wc)) + { + size_t mbcdlen; + + wcu = towupper (wc); + mbcdlen = wcrtomb ((char *) buf, wcu, &prev_st); + if (BE (mbclen == mbcdlen, 1)) + 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 (BE (pstr->offsets_needed != 0, 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) + { + /* It is an invalid character or '\0'. Just use the byte. */ + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx]; + + if (BE (pstr->trans != NULL, 0)) + ch = pstr->trans [ch]; + pstr->mbs[byte_idx] = ch; + + if (BE (pstr->offsets_needed != 0, 0)) + pstr->offsets[byte_idx] = src_idx; + ++src_idx; + + /* And also cast it to wide char. */ + pstr->wcs[byte_idx++] = (wchar_t) ch; + if (BE (mbclen == (size_t) -1, 0)) + 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 +internal_function +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; + remain_len = pstr->len - rawbuf_idx; + prev_st = pstr->cur_state; + mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx, + remain_len, &pstr->cur_state); + if (BE (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0, 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 +internal_function +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 (BE (pstr->trans != NULL, 0)) + ch = pstr->trans[ch]; + if (islower (ch)) + pstr->mbs[char_idx] = toupper (ch); + else + pstr->mbs[char_idx] = ch; + } + pstr->valid_len = char_idx; + pstr->valid_raw_len = char_idx; +} + +/* Apply TRANS to the buffer in PSTR. */ + +static void +internal_function +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 +internal_function __attribute_warn_unused_result__ +re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) +{ + Idx offset; + + if (BE (pstr->raw_mbs_idx <= idx, 0)) + 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 (BE (offset != 0, 1)) + { + /* Should the already checked characters be kept? */ + if (BE (offset < pstr->valid_raw_len, 1)) + { + /* Yes, move them to the front of the buffer. */ +#ifdef RE_ENABLE_I18N + if (BE (pstr->offsets_needed, 0)) + { + 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 (BE (pstr->mbs_allocated, 0)) + memmove (pstr->mbs, pstr->mbs + offset, + pstr->valid_len - offset); + pstr->valid_len -= offset; + pstr->valid_raw_len -= offset; +#if 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 (BE (pstr->offsets_needed, 0)) + { + 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) && BE (pstr->trans == NULL, 1)) + { + 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; + + if (BE (pstr->trans != NULL, 0)) + { + int i = mlen < 6 ? mlen : 6; + while (--i >= 0) + buf[i] = pstr->trans[p[i]]; + } + /* 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 *) p, 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 = ((BE (pstr->word_ops_used != 0, 0) + && IS_WIDE_WORD_CHAR (wc)) + ? CONTEXT_WORD + : ((IS_WIDE_NEWLINE (wc) + && pstr->newline_anchor) + ? CONTEXT_NEWLINE : 0)); + if (BE (pstr->valid_len, 0)) + { + 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 (!BE (pstr->mbs_allocated, 0)) + 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 (BE (ret != REG_NOERROR, 0)) + return ret; + } + else + build_wcs_buffer (pstr); + } + else +#endif /* RE_ENABLE_I18N */ + if (BE (pstr->mbs_allocated, 0)) + { + 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 +internal_function __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 (BE (!pstr->mbs_allocated, 1)) + 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 +internal_function __attribute ((pure)) +re_string_fetch_byte_case (re_string_t *pstr) +{ + if (BE (!pstr->mbs_allocated, 1)) + 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 +internal_function +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 +internal_function +re_string_context_at (const re_string_t *input, Idx idx, int eflags) +{ + int c; + if (BE (! REG_VALID_INDEX (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 (BE (idx == input->len, 0)) + 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) + { +#ifdef DEBUG + /* It must not happen. */ + assert (REG_VALID_INDEX (wc_idx)); +#endif + --wc_idx; + if (! REG_VALID_INDEX (wc_idx)) + return input->tip_context; + } + wc = input->wcs[wc_idx]; + if (BE (input->word_ops_used != 0, 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 +internal_function __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 (BE (set->elems == NULL, 0)) + return REG_ESPACE; + return REG_NOERROR; +} + +static reg_errcode_t +internal_function __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 (BE (set->elems == NULL, 0)) + { + set->alloc = set->nelem = 0; + return REG_ESPACE; + } + set->elems[0] = elem; + return REG_NOERROR; +} + +static reg_errcode_t +internal_function __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 (BE (set->elems == NULL, 0)) + 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 +internal_function __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 (BE (dest->elems == NULL, 0)) + { + 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 +internal_function __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 (BE (new_elems == NULL, 0)) + 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 (REG_VALID_INDEX (id) && dest->elems[id] > src1->elems[i1]) + --id; + + if (! REG_VALID_INDEX (id) || dest->elems[id] != src1->elems[i1]) + dest->elems[--sbase] = src1->elems[i1]; + + if (! REG_VALID_INDEX (--i1) || ! REG_VALID_INDEX (--i2)) + break; + } + + /* Lower the highest of the two items. */ + else if (src1->elems[i1] < src2->elems[i2]) + { + if (! REG_VALID_INDEX (--i2)) + break; + } + else + { + if (! REG_VALID_INDEX (--i1)) + 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 && REG_VALID_INDEX (id)) + 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 (! REG_VALID_INDEX (--id)) + 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 +internal_function __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 (BE (dest->elems == NULL, 0)) + 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 +internal_function __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 (BE (new_buffer == NULL, 0)) + return REG_ESPACE; + dest->elems = new_buffer; + dest->alloc = new_alloc; + } + + if (BE (dest->nelem == 0, 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; + REG_VALID_INDEX (is) && REG_VALID_INDEX (id); ) + { + 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 (REG_VALID_INDEX (is)) + { + /* 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 (! REG_VALID_INDEX (--id)) + { + /* 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 +internal_function __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 BE (re_node_set_init_1 (set, elem) == REG_NOERROR, 1); + + if (BE (set->nelem, 0) == 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 (BE (new_elems == NULL, 0)) + 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 +internal_function __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 (BE (new_elems == NULL, 0)) + 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 +internal_function __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 ; REG_VALID_INDEX (--i) ; ) + 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 +internal_function __attribute ((pure)) +re_node_set_contains (const re_node_set *set, Idx elem) +{ + __re_size_t idx, right, mid; + if (! REG_VALID_NONZERO_INDEX (set->nelem)) + 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 +internal_function +re_node_set_remove_at (re_node_set *set, Idx idx) +{ + verify (! TYPE_SIGNED (Idx)); + /* if (idx < 0) + return; */ + if (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 REG_MISSING if an error occurred. */ + +static Idx +internal_function +re_dfa_add_node (re_dfa_t *dfa, re_token_t token) +{ + if (BE (dfa->nodes_len >= dfa->nodes_alloc, 0)) + { + 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; + size_t max_object_size = + MAX (sizeof (re_token_t), + MAX (sizeof (re_node_set), + sizeof (Idx))); + + /* Avoid overflows. */ + if (BE (SIZE_MAX / 2 / max_object_size < dfa->nodes_alloc, 0)) + return REG_MISSING; + + new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc); + if (BE (new_nodes == NULL, 0)) + return REG_MISSING; + 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 (BE (new_nexts == NULL || new_indices == NULL + || new_edests == NULL || new_eclosures == NULL, 0)) + return REG_MISSING; + 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 + { + int type = token.type; + dfa->nodes[dfa->nodes_len].accept_mb = + (type == OP_PERIOD && dfa->mb_cur_max > 1) || type == COMPLEX_BRACKET; + } +#endif + dfa->nexts[dfa->nodes_len] = REG_MISSING; + 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 inline re_hashval_t +internal_function +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 * +internal_function __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; +#ifdef lint + /* Suppress bogus uninitialized-variable warnings. */ + *err = REG_NOERROR; +#endif + if (BE (nodes->nelem == 0, 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 (BE (new_state == NULL, 0)) + *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 * +internal_function __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; +#ifdef 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 (BE (new_state == NULL, 0)) + *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 (BE (err != REG_NOERROR, 0)) + 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 (BE (! re_node_set_insert_last (&newstate->non_eps_nodes, elem), 0)) + return REG_ESPACE; + } + + spot = dfa->state_table + (hash & dfa->state_hash_mask); + if (BE (spot->alloc <= spot->num, 0)) + { + Idx new_alloc = 2 * spot->num + 2; + re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *, + new_alloc); + if (BE (new_array == NULL, 0)) + 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 independ of contexts. + Return the new state if succeeded, otherwise return NULL. */ + +static re_dfastate_t * +internal_function __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 (BE (newstate == NULL, 0)) + return NULL; + err = re_node_set_init_copy (&newstate->nodes, nodes); + if (BE (err != REG_NOERROR, 0)) + { + 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 (BE (err != REG_NOERROR, 0)) + { + 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 * +internal_function __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 (BE (newstate == NULL, 0)) + return NULL; + err = re_node_set_init_copy (&newstate->nodes, nodes); + if (BE (err != REG_NOERROR, 0)) + { + 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 (BE (newstate->entrance_nodes == NULL, 0)) + { + 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 (BE (err != REG_NOERROR, 0)) + { + free_state (newstate); + newstate = NULL; + } + return newstate; +} diff --git a/lib/regex_internal.h b/lib/regex_internal.h new file mode 100644 index 0000000..cdeb5c8 --- /dev/null +++ b/lib/regex_internal.h @@ -0,0 +1,874 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Extended regular expression matching and search library. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free + Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa <isamu@yamato.ibm.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 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _REGEX_INTERNAL_H +#define _REGEX_INTERNAL_H 1 + +#include <assert.h> +#include <ctype.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <langinfo.h> +#ifndef _LIBC +# include "localcharset.h" +#endif +#if defined HAVE_LOCALE_H || defined _LIBC +# include <locale.h> +#endif + +#include <wchar.h> +#include <wctype.h> +#include <stdint.h> +#if defined _LIBC +# include <bits/libc-lock.h> +#else +# define __libc_lock_init(NAME) do { } while (0) +# define __libc_lock_lock(NAME) do { } while (0) +# define __libc_lock_unlock(NAME) do { } while (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/elem-hash.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) \ + INTUSE(__dcgettext) (_libc_intl_domainname, msgid, LC_MESSAGES) +# endif +#else +# define gettext(msgid) (msgid) +#endif + +#ifndef gettext_noop +/* This define is so xgettext can find the internationalizable + strings. */ +# define gettext_noop(String) String +#endif + +/* For loser systems without the definition. */ +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +#if (defined MB_CUR_MAX && HAVE_LOCALE_H && HAVE_WCTYPE_H && HAVE_ISWCTYPE && HAVE_WCSCOLL) || _LIBC +# define RE_ENABLE_I18N +#endif + +#if __GNUC__ >= 3 +# define BE(expr, val) __builtin_expect (expr, val) +#else +# define BE(expr, val) (expr) +# ifdef _LIBC +# define inline +# endif +#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 +# define __wctype wctype +# define __iswctype iswctype +# define __btowc btowc +# define __wcrtomb wcrtomb +# define __mbrtowc mbrtowc +# define __regfree regfree +# define attribute_hidden +#endif /* not _LIBC */ + +#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +# define __attribute(arg) __attribute__ (arg) +#else +# define __attribute(arg) +#endif + +typedef __re_idx_t Idx; + +/* Special return value for failure to match. */ +#define REG_MISSING ((Idx) -1) + +/* Special return value for internal error. */ +#define REG_ERROR ((Idx) -2) + +/* Test whether N is a valid index, and is not one of the above. */ +#ifdef _REGEX_LARGE_OFFSETS +# define REG_VALID_INDEX(n) ((Idx) (n) < REG_ERROR) +#else +# define REG_VALID_INDEX(n) (0 <= (n)) +#endif + +/* Test whether N is a valid nonzero index. */ +#ifdef _REGEX_LARGE_OFFSETS +# define REG_VALID_NONZERO_INDEX(n) ((Idx) ((n) - 1) < (Idx) (REG_ERROR - 1)) +#else +# define REG_VALID_NONZERO_INDEX(n) (0 < (n)) +#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 && !__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 +# if defined __i386__ && !defined __EMX__ +# define internal_function __attribute ((regparm (3), stdcall)) +# else +# define internal_function +# endif +#endif + +static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, + Idx new_buf_len) + internal_function; +#ifdef RE_ENABLE_I18N +static void build_wcs_buffer (re_string_t *pstr) internal_function; +static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr) + internal_function; +#endif /* RE_ENABLE_I18N */ +static void build_upper_buffer (re_string_t *pstr) internal_function; +static void re_string_translate_buffer (re_string_t *pstr) internal_function; +static unsigned int re_string_context_at (const re_string_t *input, Idx idx, + int eflags) + internal_function __attribute ((pure)); +#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)) + +#include <alloca.h> + +#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 +# endif +#endif + +#ifndef MAX +# define MAX(a,b) ((a) < (b) ? (b) : (a)) +#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 +#ifdef _LIBC + __libc_lock_define (, lock) +#endif +}; + +#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; + + +/* Inline 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 +/* Inline functions for re_string. */ +static inline int +internal_function __attribute ((pure)) +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 inline wint_t +internal_function __attribute ((pure)) +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]; +} + +static int +internal_function __attribute ((pure)) +re_string_elem_size_at (const re_string_t *pstr _UNUSED_PARAMETER_, + Idx idx _UNUSED_PARAMETER_) +{ +# ifdef _LIBC + const unsigned char *p, *extra; + const int32_t *table, *indirect; + int32_t tmp; +# include <locale/weight.h> + 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; + tmp = findidx (&p); + return p - pstr->mbs - idx; + } + else +# endif /* _LIBC */ + return 1; +} +#endif /* RE_ENABLE_I18N */ + +#ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_MINOR__ +# define __GNUC_PREREQ(maj, min) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) +# else +# define __GNUC_PREREQ(maj, min) 0 +# endif +#endif + +#if __GNUC_PREREQ (3,4) +# undef __attribute_warn_unused_result__ +# define __attribute_warn_unused_result__ \ + __attribute__ ((__warn_unused_result__)) +#else +# define __attribute_warn_unused_result__ /* empty */ +#endif + +#endif /* _REGEX_INTERNAL_H */ diff --git a/lib/regexec.c b/lib/regexec.c new file mode 100644 index 0000000..4e488cd --- /dev/null +++ b/lib/regexec.c @@ -0,0 +1,4426 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Extended regular expression matching and search library. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free + Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa <isamu@yamato.ibm.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 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include "verify.h" +#include "intprops.h" +static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, + Idx n) internal_function; +static void match_ctx_clean (re_match_context_t *mctx) internal_function; +static void match_ctx_free (re_match_context_t *cache) internal_function; +static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node, + Idx str_idx, Idx from, Idx to) + internal_function; +static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) + internal_function; +static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node, + Idx str_idx) internal_function; +static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, + Idx node, Idx str_idx) + internal_function; +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) + internal_function; +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) internal_function; +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) internal_function; +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) internal_function; +static unsigned int re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, + Idx nregs, int regs_allocated) + internal_function; +static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx) + internal_function; +static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match, + Idx *p_match_first) internal_function; +static Idx check_halt_state_context (const re_match_context_t *mctx, + const re_dfastate_t *state, Idx idx) + internal_function; +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) internal_function; +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) + internal_function; +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) internal_function; +static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs) + internal_function; + +#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) + internal_function; +#endif /* RE_ENABLE_I18N */ +static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, + re_sift_context_t *sctx) + internal_function; +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) + internal_function; +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) + internal_function; +static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa, + re_node_set *dest_nodes, + const re_node_set *candidates) + internal_function; +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) internal_function; +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) + internal_function; +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) internal_function; +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) internal_function; +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) + internal_function; +static reg_errcode_t merge_state_array (const re_dfa_t *dfa, + re_dfastate_t **dst, + re_dfastate_t **src, Idx num) + internal_function; +static re_dfastate_t *find_recover_state (reg_errcode_t *err, + re_match_context_t *mctx) internal_function; +static re_dfastate_t *transit_state (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *state) internal_function; +static re_dfastate_t *merge_state_with_log (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *next_state) + internal_function; +static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, + re_node_set *cur_nodes, + Idx str_idx) internal_function; +#if 0 +static re_dfastate_t *transit_state_sb (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *pstate) + internal_function; +#endif +#ifdef RE_ENABLE_I18N +static reg_errcode_t transit_state_mb (re_match_context_t *mctx, + re_dfastate_t *pstate) + internal_function; +#endif /* RE_ENABLE_I18N */ +static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, + const re_node_set *nodes) + internal_function; +static reg_errcode_t get_subexp (re_match_context_t *mctx, + Idx bkref_node, Idx bkref_str_idx) + internal_function; +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) + internal_function; +static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, + Idx subexp_idx, int type) internal_function; +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) internal_function; +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) + internal_function; +static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, + re_node_set *cur_nodes, + Idx ex_subexp, int type) + internal_function; +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) internal_function; +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) + internal_function; +static bool build_trtable (const re_dfa_t *dfa, + re_dfastate_t *state) internal_function; +#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) + internal_function; +# ifdef _LIBC +static unsigned int find_collation_sequence_value (const unsigned char *mbs, + size_t name_len) + internal_function; +# 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) internal_function; +static bool check_node_accept (const re_match_context_t *mctx, + const re_token_t *node, Idx idx) + internal_function; +static reg_errcode_t extend_buffers (re_match_context_t *mctx) + internal_function; + +/* 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 (preg, string, nmatch, pmatch, eflags) + const regex_t *_Restrict_ preg; + const char *_Restrict_ string; + size_t nmatch; + regmatch_t pmatch[_Restrict_arr_]; + int eflags; +{ + reg_errcode_t err; + Idx start, length; +#ifdef _LIBC + re_dfa_t *dfa = (re_dfa_t *) preg->buffer; +#endif + + 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); + } + + __libc_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); + __libc_lock_unlock (dfa->lock); + return err != REG_NOERROR; +} + +#ifdef _LIBC +# 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 (bufp, string, length, start, regs) + struct re_pattern_buffer *bufp; + const char *string; + Idx length, 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 (bufp, string, length, start, range, regs) + struct re_pattern_buffer *bufp; + const char *string; + Idx length, 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 (bufp, string1, length1, string2, length2, start, regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + Idx length1, length2, start, stop; + struct re_registers *regs; +{ + 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 (bufp, string1, length1, string2, length2, start, range, regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + Idx length1, length2, start, stop; + regoff_t range; + struct re_registers *regs; +{ + 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 +internal_function +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 = length1 + length2; + char *s = NULL; + + verify (! TYPE_SIGNED (Idx)); + if (BE (len < length1, 0)) + return -2; + /* if (BE (length1 < 0 || length2 < 0 || stop < 0, 0)) + return -2; */ + + /* Concatenate the strings. */ + if (length2 > 0) + if (length1 > 0) + { + s = re_malloc (char, len); + + if (BE (s == NULL, 0)) + 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 +internal_function +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; +#ifdef _LIBC + re_dfa_t *dfa = (re_dfa_t *) bufp->buffer; +#endif + Idx last_start = start + range; + + /* Check for out-of-range. */ + verify (! TYPE_SIGNED (Idx)); + /* if (BE (start < 0, 0)) + return -1; */ + if (BE (start > length, 0)) + return -1; + if (BE (length < last_start || (0 <= range && last_start < start), 0)) + last_start = length; + else if (BE (/* last_start < 0 || */ (range < 0 && start <= last_start), 0)) + last_start = 0; + + __libc_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 (BE (bufp->no_sub, 0)) + regs = NULL; + + /* We need at least 1 register. */ + if (regs == NULL) + nregs = 1; + else if (BE (bufp->regs_allocated == REGS_FIXED + && regs->num_regs <= bufp->re_nsub, 0)) + { + nregs = regs->num_regs; + if (BE (nregs < 1, 0)) + { + /* Nothing can be copied to regs. */ + regs = NULL; + nregs = 1; + } + } + else + nregs = bufp->re_nsub + 1; + pmatch = re_malloc (regmatch_t, nregs); + if (BE (pmatch == NULL, 0)) + { + 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 ther regs with -1's when no match was found. */ + if (result != REG_NOERROR) + rval = -1; + 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 (BE (bufp->regs_allocated == REGS_UNALLOCATED, 0)) + rval = -2; + } + + if (BE (rval == 0, 1)) + { + 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: + __libc_lock_unlock (dfa->lock); + return rval; +} + +static unsigned int +internal_function +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 (BE (regs->start == NULL, 0)) + return REGS_UNALLOCATED; + regs->end = re_malloc (regoff_t, need_regs); + if (BE (regs->end == NULL, 0)) + { + 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 (BE (need_regs > regs->num_regs, 0)) + { + regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs); + regoff_t *new_end; + if (BE (new_start == NULL, 0)) + return REGS_UNALLOCATED; + new_end = re_realloc (regs->end, regoff_t, need_regs); + if (BE (new_end == NULL, 0)) + { + 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 (bufp, regs, num_regs, starts, ends) + struct re_pattern_buffer *bufp; + struct re_registers *regs; + __re_size_t num_regs; + regoff_t *starts, *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 (s) + 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 +internal_function __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 = (const re_dfa_t *) preg->buffer; + Idx left_lim, right_lim; + int incr; + bool fl_longest_match; + int match_kind; + Idx match_first; + Idx match_last = REG_MISSING; + 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 (BE (preg->used == 0 || dfa->init_state == NULL + || dfa->init_state_word == NULL || dfa->init_state_nl == NULL + || dfa->init_state_begbuf == NULL, 0)) + 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 (BE (err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + 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 (BE (SIZE_MAX / sizeof (re_dfastate_t *) <= mctx.input.bufs_len, 0)) + { + err = REG_ESPACE; + goto free_return; + } + + mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1); + if (BE (mctx.state_log == NULL, 0)) + { + 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 of not the input string match. */ + 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 (BE (match_first < right_lim, 1) + && !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 (BE (match_first < right_lim, 1) + && !fastmap[(unsigned char) string[match_first]]) + ++match_first; + + forward_match_found_start_or_reached_end: + if (BE (match_first == right_lim, 0)) + { + 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 (BE (offset >= (__re_size_t) mctx.input.valid_raw_len, 0)) + { + err = re_string_reconstruct (&mctx.input, match_first, + eflags); + if (BE (err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + 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 != REG_MISSING) + { + if (BE (match_last == REG_ERROR, 0)) + { + 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 (BE (err != REG_NOMATCH, 0)) + goto free_return; + match_last = REG_MISSING; + } + else + break; /* We found a match. */ + } + } + + match_ctx_clean (&mctx); + } + +#ifdef DEBUG + assert (match_last != REG_MISSING); + 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 (BE (err != REG_NOERROR, 0)) + goto free_return; + } + + /* At last, add the offset to the each registers, since we slided + 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 (BE (mctx.input.offsets_needed != 0, 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 +internal_function __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 (BE (SIZE_MAX / sizeof (re_dfastate_t *) <= match_last, 0)) + return REG_ESPACE; + + sifted_states = re_malloc (re_dfastate_t *, match_last + 1); + if (BE (sifted_states == NULL, 0)) + { + ret = REG_ESPACE; + goto free_return; + } + if (dfa->nbackref) + { + lim_states = re_malloc (re_dfastate_t *, match_last + 1); + if (BE (lim_states == NULL, 0)) + { + 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 (BE (ret != REG_NOERROR, 0)) + goto free_return; + if (sifted_states[0] != NULL || lim_states[0] != NULL) + break; + do + { + --match_last; + if (! REG_VALID_INDEX (match_last)) + { + 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 (BE (ret != REG_NOERROR, 0)) + 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 (BE (ret != REG_NOERROR, 0)) + 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)) internal_function +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 REG_MISSING if + there is no match, and return REG_ERROR 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 assume that the maching starts from the current + index of the buffer. */ + +static Idx +internal_function __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 = REG_MISSING; + 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 (BE (cur_state == NULL, 0)) + { + assert (err == REG_ESPACE); + return REG_ERROR; + } + + 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 (BE (dfa->nbackref, 0)) + { + at_init_state = false; + err = check_subexp_matching_top (mctx, &cur_state->nodes, 0); + if (BE (err != REG_NOERROR, 0)) + return err; + + if (cur_state->has_backref) + { + err = transit_state_bkref (mctx, &cur_state->nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + } + } + } + + /* If the RE accepts NULL string. */ + if (BE (cur_state->halt, 0)) + { + 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 (BE (next_char_idx >= mctx->input.bufs_len, 0) + || (BE (next_char_idx >= mctx->input.valid_len, 0) + && mctx->input.valid_len < mctx->input.len)) + { + err = extend_buffers (mctx); + if (BE (err != REG_NOERROR, 0)) + { + assert (err == REG_ESPACE); + return REG_ERROR; + } + } + + 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 (BE (err != REG_NOERROR, 0)) + return REG_ERROR; + + if (mctx->state_log == NULL + || (match && !fl_longest_match) + || (cur_state = find_recover_state (&err, mctx)) == NULL) + break; + } + + if (BE (at_init_state, 0)) + { + 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 +internal_function +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 +internal_function +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 REG_MISSING in case of errors. */ + +static Idx +internal_function +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 (BE (! ok, 0)) + return REG_ERROR; + /* Pick up a valid destination, or return REG_MISSING if none + is found. */ + for (dest_node = REG_MISSING, i = 0; i < edests->nelem; ++i) + { + Idx candidate = edests->elems[i]; + if (!re_node_set_contains (cur_nodes, candidate)) + continue; + if (dest_node == REG_MISSING) + 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 REG_ERROR; + + /* 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 REG_MISSING; + 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 REG_MISSING; + } + } + + if (naccepted == 0) + { + Idx dest_node; + ok = re_node_set_insert (eps_via_nodes, node); + if (BE (! ok, 0)) + return REG_ERROR; + 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 REG_MISSING; + re_node_set_empty (eps_via_nodes); + return dest_node; + } + } + return REG_MISSING; +} + +static reg_errcode_t +internal_function __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 = realloc (fs->stack, (sizeof (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 +internal_function +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 (REG_VALID_INDEX (num)); + *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 +internal_function __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 = (const re_dfa_t *) 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 (BE (! REG_VALID_INDEX (cur_node), 0)) + { + if (BE (cur_node == REG_ERROR, 0)) + { + 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 +internal_function +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 +internal_function +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 +internal_function +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 (BE (err != REG_NOERROR, 0)) + return err; + err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); + if (BE (err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + goto free_return; + } + err = REG_NOERROR; + free_return: + re_node_set_free (&cur_dest); + return err; +} + +static reg_errcode_t +internal_function __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 (BE (! ok, 0)) + return REG_ESPACE; + } + + return REG_NOERROR; +} + +/* Helper functions. */ + +static reg_errcode_t +internal_function +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 + || (next_state_log_idx >= mctx->input.valid_len + && mctx->input.valid_len < mctx->input.len)) + { + reg_errcode_t err; + err = extend_buffers (mctx); + if (BE (err != REG_NOERROR, 0)) + 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 +internal_function +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 (BE (err != REG_NOERROR, 0)) + return err; + dst[st_idx] = re_acquire_state (&err, dfa, &merged_set); + re_node_set_free (&merged_set); + if (BE (err != REG_NOERROR, 0)) + return err; + } + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function +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 (BE (err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + return err; + } + } + + sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + } + + if (candidates && mctx->state_log[str_idx]->has_backref) + { + err = sift_states_bkref (mctx, sctx, str_idx, candidates); + if (BE (err != REG_NOERROR, 0)) + return err; + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function __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 (BE (err != REG_NOERROR, 0)) + return err; + + if (!state->inveclosure.alloc) + { + err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem); + if (BE (err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + return REG_ESPACE; + } + } + return re_node_set_add_intersect (dest_nodes, candidates, + &state->inveclosure); +} + +static reg_errcode_t +internal_function +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] : REG_MISSING); + if ((!re_node_set_contains (inv_eclosure, edst1) + && re_node_set_contains (dest_nodes, edst1)) + || (REG_VALID_NONZERO_INDEX (edst2) + && !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 (BE (err != REG_NOERROR, 0)) + { + 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 +internal_function +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 +internal_function +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 != REG_MISSING) + { + 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 +internal_function +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 +internal_function +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 = REG_MISSING; + Idx cls_node = REG_MISSING; + 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 (REG_VALID_INDEX (ops_node)) + { + err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes, + candidates); + if (BE (err != REG_NOERROR, 0)) + return err; + } + + /* Check the limitation of the close subexpression. */ + if (REG_VALID_INDEX (cls_node)) + 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 (BE (err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + return err; + } + } + } + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function __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 == REG_MISSING) + 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 (BE (err != REG_NOERROR, 0)) + 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 (BE (! ok, 0)) + { + err = REG_ESPACE; + goto free_return; + } + cur_state = local_sctx.sifted_states[str_idx]; + err = sift_states_backward (mctx, &local_sctx); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + if (sctx->limited_states != NULL) + { + err = merge_state_array (dfa, sctx->limited_states, + local_sctx.sifted_states, + str_idx + 1); + if (BE (err != REG_NOERROR, 0)) + 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 +internal_function +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 * +internal_function __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 (BE (state->accept_mb, 0)) + { + *err = transit_state_mb (mctx, state); + if (BE (*err != REG_NOERROR, 0)) + 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 (BE (trtable != NULL, 1)) + return trtable[ch]; + + trtable = state->word_trtable; + if (BE (trtable != NULL, 1)) + { + 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 * +internal_function +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 (BE (*err != REG_NOERROR, 0)) + 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 (BE (dfa->nbackref, 0) && 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 (BE (*err != REG_NOERROR, 0)) + return NULL; + + /* If the next state has back references. */ + if (next_state->has_backref) + { + *err = transit_state_bkref (mctx, &next_state->nodes); + if (BE (*err != REG_NOERROR, 0)) + 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 * +internal_function +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 + correspoding back references. */ + +static reg_errcode_t +internal_function +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 (BE (err != REG_NOERROR, 0)) + 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 (BE (*err != REG_NOERROR, 0)) + 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 (BE (*err != REG_NOERROR, 0)) + { + 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 +internal_function +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 (BE (err != REG_NOERROR, 0)) + return err; +#ifdef DEBUG + assert (dfa->nexts[cur_node_idx] != REG_MISSING); +#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 (BE (err != REG_NOERROR, 0)) + 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 (BE (mctx->state_log[dest_idx] == NULL && err != REG_NOERROR, 0)) + return err; + } + return REG_NOERROR; +} +#endif /* RE_ENABLE_I18N */ + +static reg_errcode_t +internal_function +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 (BE (err != REG_NOERROR, 0)) + 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] != REG_MISSING); +#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 (BE (mctx->state_log[dest_str_idx] == NULL + && err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + { + 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 (BE (mctx->state_log[dest_str_idx] == NULL + && err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + goto free_return; + err = transit_state_bkref (mctx, new_dest_nodes); + if (BE (err != REG_NOERROR, 0)) + 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 +internal_function __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 != REG_MISSING) + { + 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 (BE (bkref_str_off + sl_str_diff > mctx->input.valid_len, 0)) + { + /* 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 (BE (err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + 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 (BE (bkref_str_off >= mctx->input.valid_len, 0)) + { + /* If we are at the end of the input, we cannot match. */ + if (bkref_str_off >= mctx->input.len) + break; + + err = extend_buffers (mctx); + if (BE (err != REG_NOERROR, 0)) + 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 == REG_MISSING) + 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 (BE (err != REG_NOERROR, 0)) + return err; + sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str); + if (BE (sub_last == NULL, 0)) + return REG_ESPACE; + err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, + bkref_str_idx); + if (err == REG_NOMATCH) + continue; + } + } + 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 +internal_function +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 (BE (err != REG_NOERROR, 0)) + 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 +internal_function +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 REG_MISSING; +} + +/* 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 +internal_function __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 (BE (path->alloc < last_str + mctx->max_mb_elem_len + 1, 0)) + { + re_dfastate_t **new_array; + Idx old_alloc = path->alloc; + Idx new_alloc = old_alloc + last_str + mctx->max_mb_elem_len + 1; + if (BE (new_alloc < old_alloc, 0) + || BE (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc, 0)) + return REG_ESPACE; + new_array = re_realloc (path->array, re_dfastate_t *, new_alloc); + if (BE (new_array == NULL, 0)) + 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 (BE (err != REG_NOERROR, 0)) + return err; + err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); + if (BE (err != REG_NOERROR, 0)) + { + 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 (BE (err != REG_NOERROR, 0)) + 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 (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + } + cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); + if (BE (cur_state == NULL && err != REG_NOERROR, 0)) + { + 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 (BE (err != REG_NOERROR, 0)) + { + 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 (BE (err != REG_NOERROR, 0)) + { + 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 (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + err = expand_bkref_cache (mctx, &next_nodes, str_idx, + subexp_num, type); + if (BE (err != REG_NOERROR, 0)) + { + 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 (BE (cur_state == NULL && err != REG_NOERROR, 0)) + { + 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 +internal_function __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 (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&union_set); + return err; + } + } + ok = re_node_set_insert (&union_set, next_node); + if (BE (! ok, 0)) + { + re_node_set_free (&union_set); + return REG_ESPACE; + } + mctx->state_log[next_idx] = re_acquire_state (&err, dfa, + &union_set); + if (BE (mctx->state_log[next_idx] == NULL + && err != REG_NOERROR, 0)) + { + 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 (BE (! ok, 0)) + { + 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 +internal_function +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 (BE (err != REG_NOERROR, 0)) + 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 == REG_MISSING) + { + /* There are no problematic nodes, just merge them. */ + err = re_node_set_merge (&new_nodes, eclosure); + if (BE (err != REG_NOERROR, 0)) + { + 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 (BE (err != REG_NOERROR, 0)) + { + 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 +internal_function __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 (BE (! ok, 0)) + return REG_ESPACE; + } + break; + } + ok = re_node_set_insert (dst_nodes, cur_node); + if (BE (! ok, 0)) + 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 (BE (err != REG_NOERROR, 0)) + 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 +internal_function __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 == REG_MISSING) + 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 (BE (err != REG_NOERROR || err2 != REG_NOERROR + || err3 != REG_NOERROR, 0)) + { + 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 (BE (err != REG_NOERROR || ! ok, 0)) + { + 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 (BE (err != REG_NOERROR, 0)) + return err; + } + mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set); + re_node_set_free (&union_set); + if (BE (mctx->state_log[to_idx] == NULL + && err != REG_NOERROR, 0)) + return err; + } + } + while (ent++->more); + return REG_NOERROR; +} + +/* Build transition table for the state. + Return true if successful. */ + +static bool +internal_function +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 (BE (dests_alloc == NULL, 0)) + return false; + dests_node_malloced = true; + } + dests_node = dests_alloc->dests_node; + dests_ch = dests_alloc->dests_ch; + + /* Initialize transiton 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 (BE (! REG_VALID_NONZERO_INDEX (ndests), 0)) + { + if (dests_node_malloced) + free (dests_alloc); + if (ndests == 0) + { + state->trtable = (re_dfastate_t **) + calloc (sizeof (re_dfastate_t *), SBC_MAX); + return true; + } + return false; + } + + err = re_node_set_alloc (&follows, ndests + 1); + if (BE (err != REG_NOERROR, 0)) + goto out_free; + + /* Avoid arithmetic overflow in size calculation. */ + if (BE ((((SIZE_MAX - (sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX) + / (3 * sizeof (re_dfastate_t *))) + < ndests), + 0)) + 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_dfastate_t **) + malloc (ndests * 3 * sizeof (re_dfastate_t *)); + if (BE (dest_states == NULL, 0)) + { +out_free: + if (dest_states_malloced) + 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) + 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 != REG_MISSING) + { + err = re_node_set_merge (&follows, dfa->eclosures + next_node); + if (BE (err != REG_NOERROR, 0)) + goto out_free; + } + } + dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0); + if (BE (dest_states[i] == NULL && err != REG_NOERROR, 0)) + 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 (BE (dest_states_word[i] == NULL && err != REG_NOERROR, 0)) + 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 (BE (dest_states_nl[i] == NULL && err != REG_NOERROR, 0)) + 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 (!BE (need_word_trtable, 0)) + { + /* 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 (BE (trtable == NULL, 0)) + 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 (BE (elem & 1, 0)) + { + /* 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 (BE (trtable == NULL, 0)) + 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 (BE (elem & 1, 0)) + { + /* 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) + 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) + 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 +internal_function +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 (BE (err != REG_NOERROR, 0)) + goto error_return; + ++ndests; + } + + /* Put the position in the current group. */ + ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]); + if (BE (! ok, 0)) + 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 (BE (err != REG_NOERROR, 0)) + 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 REG_MISSING; +} + +#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. */ + +static int +internal_function +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 (BE (node->type == OP_UTF8_PERIOD, 0)) + { + unsigned char c = re_string_byte_at (input, str_idx), d; + if (BE (c < 0xc2, 1)) + 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; + int32_t idx; + /* This #include defines a local function! */ +# include <locale/weight.h> + + /* 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? */ + 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 (&cp); + if (idx > 0) + for (i = 0; i < cset->nequiv_classes; ++i) + { + int32_t equiv_class_idx = cset->equiv_classes[i]; + size_t weight_len = weights[idx & 0xffffff]; + if (weight_len == weights[equiv_class_idx & 0xffffff] + && (idx >> 24) == (equiv_class_idx >> 24)) + { + Idx cnt = 0; + + idx &= 0xffffff; + equiv_class_idx &= 0xffffff; + + while (cnt <= weight_len + && (weights[equiv_class_idx + 1 + cnt] + == weights[idx + 1 + cnt])) + ++cnt; + if (cnt > weight_len) + { + match_len = elem_len; + goto check_node_accept_bytes_match; + } + } + } + } + } + else +# endif /* _LIBC */ + { + /* match with range expression? */ +#if __GNUC__ >= 2 && ! (__STDC_VERSION__ < 199901L && __STRICT_ANSI__) + wchar_t cmp_buf[] = {L'\0', L'\0', wc, L'\0', L'\0', L'\0'}; +#else + wchar_t cmp_buf[] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'}; + cmp_buf[2] = wc; +#endif + for (i = 0; i < cset->nranges; ++i) + { + cmp_buf[0] = cset->range_starts[i]; + cmp_buf[4] = cset->range_ends[i]; + if (wcscoll (cmp_buf, cmp_buf + 2) <= 0 + && wcscoll (cmp_buf + 2, cmp_buf + 4) <= 0) + { + 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 +internal_function +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) * (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 +internal_function +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 +internal_function __attribute_warn_unused_result__ +extend_buffers (re_match_context_t *mctx) +{ + reg_errcode_t ret; + re_string_t *pstr = &mctx->input; + + /* Avoid overflow. */ + if (BE (SIZE_MAX / 2 / sizeof (re_dfastate_t *) <= pstr->bufs_len, 0)) + return REG_ESPACE; + + /* Double the lengthes of the buffers. */ + ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); + if (BE (ret != REG_NOERROR, 0)) + 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 (BE (new_array == NULL, 0)) + 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 (BE (ret != REG_NOERROR, 0)) + 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 +internal_function __attribute_warn_unused_result__ +match_ctx_init (re_match_context_t *mctx, int eflags, Idx n) +{ + mctx->eflags = eflags; + mctx->match_last = REG_MISSING; + if (n > 0) + { + /* Avoid overflow. */ + size_t max_object_size = + MAX (sizeof (struct re_backref_cache_entry), + sizeof (re_sub_match_top_t *)); + if (BE (SIZE_MAX / max_object_size < n, 0)) + 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 (BE (mctx->bkref_ents == NULL || mctx->sub_tops == NULL, 0)) + 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 +internal_function +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); + } + free (top); + } + + mctx->nsub_tops = 0; + mctx->nbkref_ents = 0; +} + +/* Free all the memory associated with MCTX. */ + +static void +internal_function +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 +internal_function __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 (BE (new_entry == NULL, 0)) + { + 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 REG_MISSING if none is + found. Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX. */ + +static Idx +internal_function +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 REG_MISSING; +} + +/* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches + at STR_IDX. */ + +static reg_errcode_t +internal_function __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 (BE (mctx->nsub_tops == mctx->asub_tops, 0)) + { + 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 (BE (new_array == NULL, 0)) + 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 (BE (mctx->sub_tops[mctx->nsub_tops] == NULL, 0)) + 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 * +internal_function +match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx) +{ + re_sub_match_last_t *new_entry; + if (BE (subtop->nlasts == subtop->alasts, 0)) + { + 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 (BE (new_array == NULL, 0)) + return NULL; + subtop->lasts = new_array; + subtop->alasts = new_alasts; + } + new_entry = calloc (1, sizeof (re_sub_match_last_t)); + if (BE (new_entry != NULL, 1)) + { + subtop->lasts[subtop->nlasts] = new_entry; + new_entry->node = node; + new_entry->str_idx = str_idx; + ++subtop->nlasts; + } + return new_entry; +} + +static void +internal_function +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/lib/sh-quote.c b/lib/sh-quote.c new file mode 100644 index 0000000..750d108 --- /dev/null +++ b/lib/sh-quote.c @@ -0,0 +1,109 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Shell quoting. + Copyright (C) 2001-2004, 2006, 2009-2010 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "sh-quote.h" + +#include <string.h> + +#include "quotearg.h" +#include "xalloc.h" + +/* Describes quoting for sh compatible shells. */ +static struct quoting_options *sh_quoting_options; + +/* Initializes the sh_quoting_options variable. */ +static void +init_sh_quoting_options (void) +{ + sh_quoting_options = clone_quoting_options (NULL); + set_quoting_style (sh_quoting_options, shell_quoting_style); +} + +/* Returns the number of bytes needed for the quoted string. */ +size_t +shell_quote_length (const char *string) +{ + if (sh_quoting_options == NULL) + init_sh_quoting_options (); + return quotearg_buffer (NULL, 0, string, strlen (string), + sh_quoting_options); +} + +/* Copies the quoted string to p and returns the incremented p. + There must be room for shell_quote_length (string) + 1 bytes at p. */ +char * +shell_quote_copy (char *p, const char *string) +{ + if (sh_quoting_options == NULL) + init_sh_quoting_options (); + return p + quotearg_buffer (p, (size_t)(-1), string, strlen (string), + sh_quoting_options); +} + +/* Returns the freshly allocated quoted string. */ +char * +shell_quote (const char *string) +{ + if (sh_quoting_options == NULL) + init_sh_quoting_options (); + return quotearg_alloc (string, strlen (string), sh_quoting_options); +} + +/* Returns a freshly allocated string containing all argument strings, quoted, + separated through spaces. */ +char * +shell_quote_argv (char **argv) +{ + if (*argv != NULL) + { + char **argp; + size_t length; + char *command; + char *p; + + length = 0; + for (argp = argv; ; ) + { + length += shell_quote_length (*argp) + 1; + argp++; + if (*argp == NULL) + break; + } + + command = XNMALLOC (length, char); + + p = command; + for (argp = argv; ; ) + { + p = shell_quote_copy (p, *argp); + argp++; + if (*argp == NULL) + break; + *p++ = ' '; + } + *p = '\0'; + + return command; + } + else + return xstrdup (""); +} diff --git a/lib/sh-quote.h b/lib/sh-quote.h new file mode 100644 index 0000000..26ca17c --- /dev/null +++ b/lib/sh-quote.h @@ -0,0 +1,36 @@ +/* Shell quoting. + Copyright (C) 2001-2002, 2004, 2009-2010 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 <http://www.gnu.org/licenses/>. */ + +/* When passing a command to a shell, we must quote the program name and + arguments, since Unix shells interpret characters like " ", "'", "<", ">", + "$" etc. in a special way. */ + +#include <stddef.h> + +/* Returns the number of bytes needed for the quoted string. */ +extern size_t shell_quote_length (const char *string); + +/* Copies the quoted string to p and returns the incremented p. + There must be room for shell_quote_length (string) + 1 bytes at p. */ +extern char * shell_quote_copy (char *p, const char *string); + +/* Returns the freshly allocated quoted string. */ +extern char * shell_quote (const char *string); + +/* Returns a freshly allocated string containing all argument strings, quoted, + separated through spaces. */ +extern char * shell_quote_argv (char **argv); diff --git a/lib/sig-handler.h b/lib/sig-handler.h new file mode 100644 index 0000000..6a634c2 --- /dev/null +++ b/lib/sig-handler.h @@ -0,0 +1,44 @@ +/* Convenience declarations when working with <signal.h>. + + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 _GL_SIG_HANDLER_H +#define _GL_SIG_HANDLER_H + +#include <signal.h> + +/* 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. */ +static inline sa_handler_t +get_handler (struct sigaction const *a) +{ +#ifdef SA_SIGINFO + /* 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. So + use (and cast) sa_sigaction in that case. */ + if (a->sa_flags & SA_SIGINFO) + return (sa_handler_t) a->sa_sigaction; +#endif + return a->sa_handler; +} + +#endif /* _GL_SIG_HANDLER_H */ diff --git a/lib/sigaction.c b/lib/sigaction.c new file mode 100644 index 0000000..e14bd96 --- /dev/null +++ b/lib/sigaction.c @@ -0,0 +1,204 @@ +/* POSIX compatible signal blocking. + Copyright (C) 2008, 2009, 2010 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 <http://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 Woe32 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 Win32 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 __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/lib/signal.in.h b/lib/signal.in.h new file mode 100644 index 0000000..620148d --- /dev/null +++ b/lib/signal.in.h @@ -0,0 +1,329 @@ +/* A GNU-like <signal.h>. + + Copyright (C) 2006-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined __need_sig_atomic_t || defined __need_sigset_t +/* Special invocation convention inside glibc header files. */ + +# @INCLUDE_NEXT@ @NEXT_SIGNAL_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SIGNAL_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_SIGNAL_H@ + +#ifndef _GL_SIGNAL_H +#define _GL_SIGNAL_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. */ + +/* Define pid_t, uid_t. + Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ +#include <sys/types.h> + +/* 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@ +typedef int rpl_sig_atomic_t; +# undef sig_atomic_t +# define sig_atomic_t rpl_sig_atomic_t +#endif + +/* A set or mask of signals. */ +#if !@HAVE_SIGSET_T@ +typedef unsigned int sigset_t; +#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 + + +#if @GNULIB_SIGPROCMASK@ +# if !@HAVE_POSIX_SIGNALBLOCKING@ + +/* Maximum signal number + 1. */ +# ifndef NSIG +# define NSIG 32 +# endif + +/* This code supports only 32 signals. */ +typedef int verify_NSIG_constraint[2 * (NSIG <= 32) - 1]; + +# endif + +/* Test whether a given signal is contained in a signal set. */ +# if @HAVE_POSIX_SIGNALBLOCKING@ +/* This function is defined as a macro on MacOS 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 MacOS 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 MacOS 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 MacOS 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 MacOS 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 +typedef void (*_gl_function_taking_int_returning_void_t) (int); +# 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); + +/* Raise signal SIG. */ +# if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE +# 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 +_GL_CXXALIAS_SYS (raise, int, (int sig)); +# endif +_GL_CXXALIASWARN (raise); + +#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@ +/* 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; +# endif /* !@HAVE_SIGINFO_T@ */ + +/* We assume that platforms which lack the sigaction() function also lack + the 'struct sigaction' type, and vice versa. */ + +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 + +_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 /* _GL_SIGNAL_H */ +#endif /* _GL_SIGNAL_H */ +#endif diff --git a/lib/sigprocmask.c b/lib/sigprocmask.c new file mode 100644 index 0000000..016325e --- /dev/null +++ b/lib/sigprocmask.c @@ -0,0 +1,329 @@ +/* POSIX compatible signal blocking. + Copyright (C) 2006-2010 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <signal.h> + +#include <errno.h> +#include <stdint.h> +#include <stdlib.h> + +/* 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 Woe32 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 __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); + +/* 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); + } +} +# 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 SIG. */ +int +rpl_raise (int sig) +# undef raise +{ + switch (sig) + { + case SIGPIPE: + if (blocked_set & (1U << sig)) + pending_array[sig] = 1; + else + { + handler_t handler = SIGPIPE_handler; + if (handler == SIG_DFL) + exit (128 + SIGPIPE); + else if (handler != SIG_IGN) + (*handler) (sig); + } + return 0; + default: /* System defined signal */ + return raise (sig); + } +} +#endif diff --git a/lib/stat-macros.h b/lib/stat-macros.h new file mode 100644 index 0000000..690216c --- /dev/null +++ b/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/lib/stat-time.h b/lib/stat-time.h new file mode 100644 index 0000000..1630048 --- /dev/null +++ b/lib/stat-time.h @@ -0,0 +1,187 @@ +/* stat-related time functions. + + Copyright (C) 2005, 2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert. */ + +#ifndef STAT_TIME_H +#define STAT_TIME_H 1 + +#include <sys/stat.h> +#include <time.h> + +/* 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 defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC +# ifdef 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. */ +static inline long int +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. */ +static inline long int +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. */ +static inline long int +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. */ +static inline long int +get_stat_birthtime_ns (struct stat const *st) +{ +# 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 + /* Avoid a "parameter unused" warning. */ + (void) st; + return 0; +# endif +} + +/* Return *ST's access time. */ +static inline struct timespec +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. */ +static inline struct timespec +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. */ +static inline struct timespec +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 negative tv_nsec. */ +static inline struct timespec +get_stat_birthtime (struct stat const *st) +{ + 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 __WIN32__) && ! defined __CYGWIN__ + /* Woe32 native platforms (but not Cygwin) put the "file creation + time" in st_ctime (!). See + <http://msdn2.microsoft.com/de-de/library/14h5k7ff(VS.80).aspx>. */ + t.tv_sec = st->st_ctime; + t.tv_nsec = 0; +#else + /* Birth time is not supported. Set tv_sec to avoid undefined behavior. */ + t.tv_sec = -1; + t.tv_nsec = -1; + /* Avoid a "parameter unused" warning. */ + (void) st; +#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 time stamps. Also, NetBSD + sometimes returns junk in the birth time fields; work around this + bug if it it is detected. There's no need to detect negative + tv_nsec junk as negative tv_nsec already indicates an error. */ + if (t.tv_sec == 0 || 1000000000 <= t.tv_nsec) + t.tv_nsec = -1; +#endif + + return t; +} + +#endif diff --git a/lib/stat.c b/lib/stat.c new file mode 100644 index 0000000..875317b --- /dev/null +++ b/lib/stat.c @@ -0,0 +1,104 @@ +/* Work around platform bugs in stat. + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* written by Eric Blake */ + +#include <config.h> + +/* Get the original definition of stat. It might be defined as a macro. */ +#define __need_system_sys_stat_h +#include <sys/types.h> +#include <sys/stat.h> +#undef __need_system_sys_stat_h + +static inline int +orig_stat (const char *filename, struct stat *buf) +{ + return stat (filename, buf); +} + +/* Specification. */ +#include <sys/stat.h> + +#include <errno.h> +#include <limits.h> +#include <stdbool.h> +#include <string.h> + +/* 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 *st) +{ + int result = orig_stat (name, st); +#if REPLACE_FUNC_STAT_FILE + /* Solaris 9 mistakenly succeeds when given a non-directory with a + trailing slash. */ + if (result == 0 && !S_ISDIR (st->st_mode)) + { + size_t len = strlen (name); + if (ISSLASH (name[len - 1])) + { + errno = ENOTDIR; + return -1; + } + } +#endif /* REPLACE_FUNC_STAT_FILE */ +#if REPLACE_FUNC_STAT_DIR + if (result == -1 && errno == ENOENT) + { + /* Due to mingw's oddities, there are some directories (like + c:\) where stat() only succeeds with a trailing slash, and + other directories (like c:\windows) where stat() only + succeeds without a trailing slash. But we want the two to be + synonymous, since chdir() manages either style. Likewise, Mingw also + reports ENOENT for names longer than PATH_MAX, when we want + ENAMETOOLONG, and for stat("file/"), when we want ENOTDIR. + Fortunately, mingw PATH_MAX is small enough for stack + allocation. */ + char fixed_name[PATH_MAX + 1] = {0}; + size_t len = strlen (name); + bool check_dir = false; + if (PATH_MAX <= len) + errno = ENAMETOOLONG; + else if (len) + { + strcpy (fixed_name, name); + if (ISSLASH (fixed_name[len - 1])) + { + check_dir = true; + while (len && ISSLASH (fixed_name[len - 1])) + fixed_name[--len] = '\0'; + if (!len) + fixed_name[0] = '/'; + } + else + fixed_name[len++] = '/'; + result = orig_stat (fixed_name, st); + if (result == 0 && check_dir && !S_ISDIR (st->st_mode)) + { + result = -1; + errno = ENOTDIR; + } + } + } +#endif /* REPLACE_FUNC_STAT_DIR */ + return result; +} diff --git a/lib/stdarg.in.h b/lib/stdarg.in.h new file mode 100644 index 0000000..5a17d8a --- /dev/null +++ b/lib/stdarg.in.h @@ -0,0 +1,37 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Substitute for and wrapper around <stdarg.h>. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_STDARG_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDARG_H@ + +#ifndef _GL_STDARG_H +#define _GL_STDARG_H + +#ifndef va_copy +# define va_copy(a,b) ((a) = (b)) +#endif + +#endif /* _GL_STDARG_H */ +#endif /* _GL_STDARG_H */ diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h new file mode 100644 index 0000000..ea7ead5 --- /dev/null +++ b/lib/stdbool.in.h @@ -0,0 +1,124 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 2001-2003, 2006-2010 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#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 + +/* For the sake of symbolic names in gdb, we 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 if we do + this, values of type '_Bool' may 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 we add a negative value to the + enum; this ensures that '_Bool' promotes to 'int'. */ +#if defined __cplusplus || (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 + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + http://lists.gnu.org/archive/html/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@ +typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; +# endif +# endif +#endif +#define bool _Bool + +/* The other macros must be usable in preprocessor directives. */ +#define false 0 +#define true 1 +#define __bool_true_false_are_defined 1 + +#endif /* _GL_STDBOOL_H */ diff --git a/lib/stddef.in.h b/lib/stddef.in.h new file mode 100644 index 0000000..2de616b --- /dev/null +++ b/lib/stddef.in.h @@ -0,0 +1,88 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues. + + Copyright (C) 2009, 2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* 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 + +#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 _GL_STDDEF_H && defined _GL_STDDEF_WINT_T) +# ifdef __need_wint_t +# undef _GL_STDDEF_H +# define _GL_STDDEF_WINT_T +# endif +# @INCLUDE_NEXT@ @NEXT_STDDEF_H@ +# endif + +#else +/* Normal invocation convention. */ + +# ifndef _GL_STDDEF_H + +/* The include_next requires a split double-inclusion guard. */ + +# @INCLUDE_NEXT@ @NEXT_STDDEF_H@ + +# ifndef _GL_STDDEF_H +# define _GL_STDDEF_H + +/* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ +#if @REPLACE_NULL@ +# 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 + +/* Some platforms lack wchar_t. */ +#if !@HAVE_WCHAR_T@ +# define wchar_t int +#endif + +# endif /* _GL_STDDEF_H */ +# endif /* _GL_STDDEF_H */ +#endif /* __need_XXX */ diff --git a/lib/stdint.in.h b/lib/stdint.in.h new file mode 100644 index 0000000..2f1aa45 --- /dev/null +++ b/lib/stdint.in.h @@ -0,0 +1,570 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 2001-2002, 2004-2010 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* + * 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_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 + +/* 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 + /* 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@ @NEXT_STDINT_H@ +#endif + +#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H +#define _GL_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. + MacOS 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 + +/* Get LONG_MIN, LONG_MAX, ULONG_MAX. */ +#include <limits.h> + +#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 a integer type under the usual assumption. + Return an unspecified value if BITS == 0, adding a check to pacify + picky compilers. */ + +#define _STDINT_MIN(signed, bits, zero) \ + ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero)) + +#define _STDINT_MAX(signed, bits, zero) \ + ((signed) \ + ? ~ _STDINT_MIN (signed, bits, zero) \ + : /* The expression for the unsigned case. The subtraction of (signed) \ + is a nop in the unsigned case and avoids "signed integer overflow" \ + warnings in the signed case. */ \ + ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) + +/* 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 + +/* 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 + +#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 + +/* 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. Assume that 'long int' + is fast enough for all narrower integers. */ + +#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 long int gl_int_fast8_t; +typedef unsigned long int gl_uint_fast8_t; +typedef long int gl_int_fast16_t; +typedef unsigned long int gl_uint_fast16_t; +typedef long int gl_int_fast32_t; +typedef unsigned long int gl_uint_fast32_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 */ + +#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 + +/* 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. */ + +#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 + +#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 + +/* 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[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1]; + +/* 7.18.2. Limits of specified-width integer types */ + +#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS + +/* 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 + +#undef INT64_MIN +#undef INT64_MAX +#ifdef GL_INT64_T +/* 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 + +#undef UINT64_MAX +#ifdef GL_UINT64_T +# 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 LONG_MIN +#define INT_FAST8_MAX LONG_MAX +#define UINT_FAST8_MAX ULONG_MAX + +#undef INT_FAST16_MIN +#undef INT_FAST16_MAX +#undef UINT_FAST16_MAX +#define INT_FAST16_MIN LONG_MIN +#define INT_FAST16_MAX LONG_MAX +#define UINT_FAST16_MAX ULONG_MAX + +#undef INT_FAST32_MIN +#undef INT_FAST32_MAX +#undef UINT_FAST32_MAX +#define INT_FAST32_MIN LONG_MIN +#define INT_FAST32_MAX LONG_MAX +#define UINT_FAST32_MAX ULONG_MAX + +#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 */ + +#undef INTMAX_MIN +#undef INTMAX_MAX +#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 + +#undef UINTMAX_MAX +#ifdef UINT64_MAX +# define UINTMAX_MAX UINT64_MAX +#else +# define UINTMAX_MAX UINT32_MAX +#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_MIN (1, 64, 0l) +# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) +# else +# define PTRDIFF_MIN _STDINT_MIN (1, 32, 0) +# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) +# endif +#else +# define PTRDIFF_MIN \ + _STDINT_MIN (1, @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 +#define SIG_ATOMIC_MIN \ + _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ + 0@SIG_ATOMIC_T_SUFFIX@) +#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 ! (defined WCHAR_MIN && defined WCHAR_MAX) +# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# include <wchar.h> +# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +#endif +#undef WCHAR_MIN +#undef WCHAR_MAX +#define WCHAR_MIN \ + _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) +#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 +#define WINT_MIN \ + _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) +#define WINT_MAX \ + _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) + +#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */ + +/* 7.18.4. Macros for integer constants */ + +#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS + +/* 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 */ + +#undef 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 + +#undef 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 /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */ + +#endif /* _GL_STDINT_H */ +#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/lib/stdio--.h b/lib/stdio--.h new file mode 100644 index 0000000..b832308 --- /dev/null +++ b/lib/stdio--.h @@ -0,0 +1,41 @@ +/* Like stdio.h, but redefine some names to avoid glitches. + + Copyright (C) 2005-2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert. */ + +#include <stdio.h> +#include "stdio-safer.h" + +#if GNULIB_FOPEN_SAFER +# undef fopen +# define fopen fopen_safer +#endif + +#if GNULIB_FREOPEN_SAFER +# undef freopen +# define freopen freopen_safer +#endif + +#if GNULIB_TMPFILE_SAFER +# undef tmpfile +# define tmpfile tmpfile_safer +#endif + +#if GNULIB_POPEN_SAFER +# undef popen +# define popen popen_safer +#endif diff --git a/lib/stdio-safer.h b/lib/stdio-safer.h new file mode 100644 index 0000000..9a7c4da --- /dev/null +++ b/lib/stdio-safer.h @@ -0,0 +1,36 @@ +/* Invoke stdio functions, but avoid some glitches. + + Copyright (C) 2001, 2003, 2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert. */ + +#include <stdio.h> + +#if GNULIB_FOPEN_SAFER +FILE *fopen_safer (char const *, char const *); +#endif + +#if GNULIB_FREOPEN_SAFER +FILE *freopen_safer (char const *, char const *, FILE *); +#endif + +#if GNULIB_POPEN_SAFER +FILE *popen_safer (char const *, char const *); +#endif + +#if GNULIB_TMPFILE_SAFER +FILE *tmpfile_safer (void); +#endif diff --git a/lib/stdio-write.c b/lib/stdio-write.c new file mode 100644 index 0000000..f7da9e4 --- /dev/null +++ b/lib/stdio-write.c @@ -0,0 +1,150 @@ +/* POSIX compatible FILE stream write function. + Copyright (C) 2008-2010 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 <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <stdio.h> + +/* Replace these functions only if module 'sigpipe' is requested. */ +#if GNULIB_SIGPIPE + +/* On native Windows platforms, SIGPIPE does not exist. When write() is + called on a pipe with no readers, WriteFile() fails with error + GetLastError() = ERROR_NO_DATA, and write() in consequence fails with + error EINVAL. This write() function is at the basis of the function + which flushes the buffer of a FILE stream. */ + +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +# include <errno.h> +# include <signal.h> +# include <io.h> + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> + +# define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \ + if (ferror (stream)) \ + return (EXPRESSION); \ + else \ + { \ + RETTYPE ret; \ + SetLastError (0); \ + ret = (EXPRESSION); \ + if (FAILED && GetLastError () == ERROR_NO_DATA && ferror (stream)) \ + { \ + int fd = fileno (stream); \ + if (fd >= 0 \ + && GetFileType ((HANDLE) _get_osfhandle (fd)) == FILE_TYPE_PIPE)\ + { \ + /* Try to raise signal SIGPIPE. */ \ + raise (SIGPIPE); \ + /* If it is currently blocked or ignored, change errno from \ + EINVAL to EPIPE. */ \ + errno = EPIPE; \ + } \ + } \ + return ret; \ + } + +# if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */ +# if !DEPENDS_ON_LIBINTL /* avoid collision with intl/printf.c */ +int +printf (const char *format, ...) +{ + int retval; + va_list args; + + va_start (args, format); + retval = vfprintf (stdout, format, args); + va_end (args); + + return retval; +} +# endif +# endif + +# if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */ +int +fprintf (FILE *stream, const char *format, ...) +{ + int retval; + va_list args; + + va_start (args, format); + retval = vfprintf (stream, format, args); + va_end (args); + + return retval; +} +# endif + +# if !REPLACE_VPRINTF_POSIX /* avoid collision with vprintf.c */ +int +vprintf (const char *format, va_list args) +{ + return vfprintf (stdout, format, args); +} +# endif + +# if !REPLACE_VFPRINTF_POSIX /* avoid collision with vfprintf.c */ +int +vfprintf (FILE *stream, const char *format, va_list args) +#undef vfprintf +{ + CALL_WITH_SIGPIPE_EMULATION (int, vfprintf (stream, format, args), ret == EOF) +} +# endif + +int +putchar (int c) +{ + return fputc (c, stdout); +} + +int +fputc (int c, FILE *stream) +#undef fputc +{ + CALL_WITH_SIGPIPE_EMULATION (int, fputc (c, stream), ret == EOF) +} + +int +fputs (const char *string, FILE *stream) +#undef fputs +{ + CALL_WITH_SIGPIPE_EMULATION (int, fputs (string, stream), ret == EOF) +} + +int +puts (const char *string) +#undef puts +{ + FILE *stream = stdout; + CALL_WITH_SIGPIPE_EMULATION (int, puts (string), ret == EOF) +} + +size_t +fwrite (const void *ptr, size_t s, size_t n, FILE *stream) +#undef fwrite +{ + CALL_WITH_SIGPIPE_EMULATION (size_t, fwrite (ptr, s, n, stream), ret < n) +} + +# endif +#endif diff --git a/lib/stdio.in.h b/lib/stdio.in.h new file mode 100644 index 0000000..df9f0eb --- /dev/null +++ b/lib/stdio.in.h @@ -0,0 +1,1059 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like <stdio.h>. + + Copyright (C) 2004, 2007-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined __need_FILE || defined __need___FILE +/* Special invocation convention inside glibc header files. */ + +#@INCLUDE_NEXT@ @NEXT_STDIO_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDIO_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_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. */ +#include <sys/types.h> + +#ifndef __attribute__ +/* 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 __attribute__ 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 __attribute__(Spec) /* empty */ +# 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. */ + + +#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, ...) + __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, ...) + __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_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 + +/* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning. Assume it is + always declared, since it is required by C89. */ +#undef gets +_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); + +#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 Win32 platforms is not POSIX compatible - " + "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_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fprintf rpl_fprintf +# endif +# define GNULIB_overrides_fprintf 1 +_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))) + _GL_ARG_NONNULL ((1, 2))); +_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_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_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_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 Win32 platforms is not POSIX compatible - " + "use gnulib module freopen for portability"); +#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_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); +# if (@REPLACE_FSEEKO@ || !@HAVE_FSEEKO@) && !@GNULIB_FSEEK@ + /* Provide an fseek function that is consistent with fseeko. */ + /* In order to avoid that fseek gets defined as a macro here, the + developer can request the 'fseek' module. */ +# undef fseek +# define fseek rpl_fseek +static inline int _GL_ARG_NONNULL ((1)) +rpl_fseek (FILE *fp, long offset, int whence) +{ +# if @REPLACE_FSEEKO@ + return rpl_fseeko (fp, offset, whence); +# else + return fseeko (fp, offset, whence); +# endif +} +# endif +#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_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); +# if (@REPLACE_FTELLO@ || !@HAVE_FTELLO@) && !@GNULIB_FTELL@ + /* Provide an ftell function that is consistent with ftello. */ + /* In order to avoid that ftell gets defined as a macro here, the + developer can request the 'ftell' module. */ +# undef ftell +# define ftell rpl_ftell +static inline long _GL_ARG_NONNULL ((1)) +rpl_ftell (FILE *f) +{ +# if @REPLACE_FTELLO@ + return rpl_ftello (f); +# else + return ftello (f); +# endif +} +# endif +#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_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)); +# endif +_GL_CXXALIASWARN (fwrite); +#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 + +#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, ...) + __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, ...) + __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) + __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) + __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_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 +_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_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +/* Don't break __attribute__((format(printf,M,N))). */ +# define printf __printf__ +# endif +# define GNULIB_overrides_printf 1 +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *format, ...) + __attribute__ ((__format__ (__printf__, 1, 2))) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); +# 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_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_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_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_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, ...) + __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, ...) + __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 sprintf should be handled like gets + (for example, OpenBSD issues a link warning for both functions), + since both 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, ...) + __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, ...) + __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, ...) + __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) + __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) + __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) + __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) + __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_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vfprintf rpl_vfprintf +# endif +# define GNULIB_overrides_vfprintf 1 +_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))) + _GL_ARG_NONNULL ((1, 2))); +_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_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ +# if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ + || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vprintf rpl_vprintf +# endif +# define GNULIB_overrides_vprintf 1 +_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 1, 0))) + _GL_ARG_NONNULL ((1))); +_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_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) + __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) + __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) + __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/lib/stdlib.in.h b/lib/stdlib.in.h new file mode 100644 index 0000000..d74c251 --- /dev/null +++ b/lib/stdlib.in.h @@ -0,0 +1,687 @@ +/* A GNU-like <stdlib.h>. + + Copyright (C) 1995, 2001-2004, 2006-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined __need_malloc_and_calloc +/* Special invocation convention inside glibc header files. */ + +#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDLIB_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ + +#ifndef _GL_STDLIB_H +#define _GL_STDLIB_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include <stddef.h> + +/* Solaris declares getloadavg() in <sys/loadavg.h>. */ +#if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ +# include <sys/loadavg.h> +#endif + +/* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included + from <stdlib.h> if _REENTRANT is defined. Include it always. */ +#if @HAVE_RANDOM_H@ +# include <random.h> +#endif + +#if !@HAVE_STRUCT_RANDOM_DATA@ || (@GNULIB_RANDOM_R@ && !@HAVE_RANDOM_R@) \ + || defined GNULIB_POSIXCHECK +# include <stdint.h> +#endif + +#if !@HAVE_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. */ +}; +#endif + +#if (@GNULIB_MKSTEMP@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +/* On MacOS X 10.3, only <unistd.h> declares mkstemp. */ +/* 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 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_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_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 !@HAVE_CALLOC_POSIX@ +# 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 (ptsname, "grantpt is not portable - " + "use gnulib module grantpt for portability"); +# endif +#endif + +#if @GNULIB_MALLOC_POSIX@ +# if !@HAVE_MALLOC_POSIX@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# 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 +# 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 + +#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_PTSNAME@ +/* Return the pathname of the pseudo-terminal slave associated with + the master FD is open on, or NULL on errors. */ +# if !@HAVE_PTSNAME@ +_GL_FUNCDECL_SYS (ptsname, char *, (int fd)); +# endif +_GL_CXXALIAS_SYS (ptsname, char *, (int fd)); +_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_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_RANDOM_R@ +# if !@HAVE_RANDOM_R@ +# ifndef RAND_MAX +# define RAND_MAX 2147483647 +# endif +# endif +#endif + +#if @GNULIB_RANDOM_R@ +# 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)); +_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 !@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)); +_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 !@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)); +_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 !@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)); +_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 !@HAVE_REALLOC_POSIX@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# 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 +# 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_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_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_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 +_GL_CXXALIASWARN (setenv); +#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 (ptsname, "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_UNSETENV@ +_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); +# endif +_GL_CXXALIASWARN (unsetenv); +#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 + + +#endif /* _GL_STDLIB_H */ +#endif /* _GL_STDLIB_H */ +#endif diff --git a/lib/str-kmp.h b/lib/str-kmp.h new file mode 100644 index 0000000..4988171 --- /dev/null +++ b/lib/str-kmp.h @@ -0,0 +1,152 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Substring search in a NUL terminated string of 'char' elements, + using the Knuth-Morris-Pratt algorithm. + Copyright (C) 2005-2010 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Before including this file, you need to define: + 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. */ + +/* Knuth-Morris-Pratt algorithm. + See http://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm + Return a boolean indicating success: + Return true and set *RESULTP if the search was completed. + Return false if it was aborted because not enough memory was available. */ +static bool +knuth_morris_pratt_unibyte (const char *haystack, const char *needle, + const char **resultp) +{ + size_t m = strlen (needle); + + /* Allocate the table. */ + size_t *table = (size_t *) nmalloca (m, sizeof (size_t)); + if (table == NULL) + return false; + /* Fill the table. + For 0 < i < m: + 0 < table[i] <= i is defined such that + forall 0 < x < table[i]: needle[x..i-1] != needle[0..i-1-x], + and table[i] is as large as possible with this property. + This implies: + 1) For 0 < i < m: + If table[i] < i, + needle[table[i]..i-1] = needle[0..i-1-table[i]]. + 2) For 0 < i < m: + rhaystack[0..i-1] == needle[0..i-1] + and exists h, i <= h < m: rhaystack[h] != needle[h] + implies + forall 0 <= x < table[i]: rhaystack[x..x+m-1] != needle[0..m-1]. + table[0] remains uninitialized. */ + { + size_t i, j; + + /* i = 1: Nothing to verify for x = 0. */ + table[1] = 1; + j = 0; + + for (i = 2; i < m; i++) + { + /* Here: j = i-1 - table[i-1]. + The inequality needle[x..i-1] != needle[0..i-1-x] is known to hold + for x < table[i-1], by induction. + Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */ + unsigned char b = CANON_ELEMENT ((unsigned char) needle[i - 1]); + + for (;;) + { + /* Invariants: The inequality needle[x..i-1] != needle[0..i-1-x] + is known to hold for x < i-1-j. + Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */ + if (b == CANON_ELEMENT ((unsigned char) needle[j])) + { + /* Set table[i] := i-1-j. */ + table[i] = i - ++j; + break; + } + /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds + for x = i-1-j, because + needle[i-1] != needle[j] = needle[i-1-x]. */ + if (j == 0) + { + /* The inequality holds for all possible x. */ + table[i] = i; + break; + } + /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds + for i-1-j < x < i-1-j+table[j], because for these x: + needle[x..i-2] + = needle[x-(i-1-j)..j-1] + != needle[0..j-1-(x-(i-1-j))] (by definition of table[j]) + = needle[0..i-2-x], + hence needle[x..i-1] != needle[0..i-1-x]. + Furthermore + needle[i-1-j+table[j]..i-2] + = needle[table[j]..j-1] + = needle[0..j-1-table[j]] (by definition of table[j]). */ + j = j - table[j]; + } + /* Here: j = i - table[i]. */ + } + } + + /* Search, using the table to accelerate the processing. */ + { + size_t j; + const char *rhaystack; + const char *phaystack; + + *resultp = NULL; + j = 0; + rhaystack = haystack; + phaystack = haystack; + /* Invariant: phaystack = rhaystack + j. */ + while (*phaystack != '\0') + if (CANON_ELEMENT ((unsigned char) needle[j]) + == CANON_ELEMENT ((unsigned char) *phaystack)) + { + j++; + phaystack++; + if (j == m) + { + /* The entire needle has been found. */ + *resultp = rhaystack; + break; + } + } + else if (j > 0) + { + /* Found a match of needle[0..j-1], mismatch at needle[j]. */ + rhaystack += table[j]; + j -= table[j]; + } + else + { + /* Found a mismatch at needle[0] already. */ + rhaystack++; + phaystack++; + } + } + + freea (table); + return true; +} + +#undef CANON_ELEMENT diff --git a/lib/strcasecmp.c b/lib/strcasecmp.c new file mode 100644 index 0000000..d954714 --- /dev/null +++ b/lib/strcasecmp.c @@ -0,0 +1,65 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Case-insensitive string comparison function. + Copyright (C) 1998-1999, 2005-2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#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/lib/streq.h b/lib/streq.h new file mode 100644 index 0000000..97ebcbe --- /dev/null +++ b/lib/streq.h @@ -0,0 +1,178 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Optimized string comparison. + Copyright (C) 2001-2002, 2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General 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/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>. */ + +#ifndef _GL_STREQ_H +#define _GL_STREQ_H + +#include <string.h> + +/* STREQ allows to optimize string comparison with a small literal string. + STREQ (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(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(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + (strcmp (s1, s2) == 0) + +#endif + +#endif /* _GL_STREQ_H */ diff --git a/lib/strerror.c b/lib/strerror.c new file mode 100644 index 0000000..b0df778 --- /dev/null +++ b/lib/strerror.c @@ -0,0 +1,347 @@ +/* strerror.c --- POSIX compatible system error routine + + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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> + +#if REPLACE_STRERROR + +# include <errno.h> +# include <stdio.h> + +# if GNULIB_defined_ESOCK /* native Windows platforms */ +# if HAVE_WINSOCK2_H +# include <winsock2.h> +# endif +# endif + +# include "intprops.h" + +# undef strerror +# if ! HAVE_DECL_STRERROR +# define strerror(n) NULL +# endif + +char * +rpl_strerror (int n) +{ + char const *msg = NULL; + /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ + switch (n) + { +# if GNULIB_defined_ETXTBSY + case ETXTBSY: + msg = "Text file busy"; + break; +# endif + +# if GNULIB_defined_ESOCK /* native Windows platforms */ + /* EWOULDBLOCK is the same as EAGAIN. */ + case EINPROGRESS: + msg = "Operation now in progress"; + break; + case EALREADY: + msg = "Operation already in progress"; + break; + case ENOTSOCK: + msg = "Socket operation on non-socket"; + break; + case EDESTADDRREQ: + msg = "Destination address required"; + break; + case EMSGSIZE: + msg = "Message too long"; + break; + case EPROTOTYPE: + msg = "Protocol wrong type for socket"; + break; + case ENOPROTOOPT: + msg = "Protocol not available"; + break; + case EPROTONOSUPPORT: + msg = "Protocol not supported"; + break; + case ESOCKTNOSUPPORT: + msg = "Socket type not supported"; + break; + case EOPNOTSUPP: + msg = "Operation not supported"; + break; + case EPFNOSUPPORT: + msg = "Protocol family not supported"; + break; + case EAFNOSUPPORT: + msg = "Address family not supported by protocol"; + break; + case EADDRINUSE: + msg = "Address already in use"; + break; + case EADDRNOTAVAIL: + msg = "Cannot assign requested address"; + break; + case ENETDOWN: + msg = "Network is down"; + break; + case ENETUNREACH: + msg = "Network is unreachable"; + break; + case ENETRESET: + msg = "Network dropped connection on reset"; + break; + case ECONNABORTED: + msg = "Software caused connection abort"; + break; + case ECONNRESET: + msg = "Connection reset by peer"; + break; + case ENOBUFS: + msg = "No buffer space available"; + break; + case EISCONN: + msg = "Transport endpoint is already connected"; + break; + case ENOTCONN: + msg = "Transport endpoint is not connected"; + break; + case ESHUTDOWN: + msg = "Cannot send after transport endpoint shutdown"; + break; + case ETOOMANYREFS: + msg = "Too many references: cannot splice"; + break; + case ETIMEDOUT: + msg = "Connection timed out"; + break; + case ECONNREFUSED: + msg = "Connection refused"; + break; + case ELOOP: + msg = "Too many levels of symbolic links"; + break; + case EHOSTDOWN: + msg = "Host is down"; + break; + case EHOSTUNREACH: + msg = "No route to host"; + break; + case EPROCLIM: + msg = "Too many processes"; + break; + case EUSERS: + msg = "Too many users"; + break; + case EDQUOT: + msg = "Disk quota exceeded"; + break; + case ESTALE: + msg = "Stale NFS file handle"; + break; + case EREMOTE: + msg = "Object is remote"; + break; +# 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: + msg = "Overlapped operation aborted"; + break; + case WSA_IO_INCOMPLETE: + msg = "Overlapped I/O event object not in signaled state"; + break; + case WSA_IO_PENDING: + msg = "Overlapped operations will complete later"; + break; + /* 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 is EINPROGRESS */ + /* WSAEALREADY is EALREADY */ + /* WSAENOTSOCK is ENOTSOCK */ + /* WSAEDESTADDRREQ is EDESTADDRREQ */ + /* WSAEMSGSIZE is EMSGSIZE */ + /* WSAEPROTOTYPE is EPROTOTYPE */ + /* WSAENOPROTOOPT is ENOPROTOOPT */ + /* WSAEPROTONOSUPPORT is EPROTONOSUPPORT */ + /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ + /* WSAEOPNOTSUPP is EOPNOTSUPP */ + /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ + /* WSAEAFNOSUPPORT is EAFNOSUPPORT */ + /* WSAEADDRINUSE is EADDRINUSE */ + /* WSAEADDRNOTAVAIL is EADDRNOTAVAIL */ + /* WSAENETDOWN is ENETDOWN */ + /* WSAENETUNREACH is ENETUNREACH */ + /* WSAENETRESET is ENETRESET */ + /* WSAECONNABORTED is ECONNABORTED */ + /* WSAECONNRESET is ECONNRESET */ + /* WSAENOBUFS is ENOBUFS */ + /* WSAEISCONN is EISCONN */ + /* WSAENOTCONN is ENOTCONN */ + /* WSAESHUTDOWN is ESHUTDOWN */ + /* WSAETOOMANYREFS is ETOOMANYREFS */ + /* WSAETIMEDOUT is ETIMEDOUT */ + /* WSAECONNREFUSED is ECONNREFUSED */ + /* WSAELOOP is ELOOP */ + /* WSAENAMETOOLONG maps to ENAMETOOLONG */ + /* WSAEHOSTDOWN is EHOSTDOWN */ + /* WSAEHOSTUNREACH is EHOSTUNREACH */ + /* WSAENOTEMPTY maps to ENOTEMPTY */ + /* WSAEPROCLIM is EPROCLIM */ + /* WSAEUSERS is EUSERS */ + /* WSAEDQUOT is EDQUOT */ + /* WSAESTALE is ESTALE */ + /* WSAEREMOTE is EREMOTE */ + case WSASYSNOTREADY: + msg = "Network subsystem is unavailable"; + break; + case WSAVERNOTSUPPORTED: + msg = "Winsock.dll version out of range"; + break; + case WSANOTINITIALISED: + msg = "Successful WSAStartup not yet performed"; + break; + case WSAEDISCON: + msg = "Graceful shutdown in progress"; + break; + case WSAENOMORE: case WSA_E_NO_MORE: + msg = "No more results"; + break; + case WSAECANCELLED: case WSA_E_CANCELLED: + msg = "Call was canceled"; + break; + case WSAEINVALIDPROCTABLE: + msg = "Procedure call table is invalid"; + break; + case WSAEINVALIDPROVIDER: + msg = "Service provider is invalid"; + break; + case WSAEPROVIDERFAILEDINIT: + msg = "Service provider failed to initialize"; + break; + case WSASYSCALLFAILURE: + msg = "System call failure"; + break; + case WSASERVICE_NOT_FOUND: + msg = "Service not found"; + break; + case WSATYPE_NOT_FOUND: + msg = "Class type not found"; + break; + case WSAEREFUSED: + msg = "Database query was refused"; + break; + case WSAHOST_NOT_FOUND: + msg = "Host not found"; + break; + case WSATRY_AGAIN: + msg = "Nonauthoritative host not found"; + break; + case WSANO_RECOVERY: + msg = "Nonrecoverable error"; + break; + case WSANO_DATA: + msg = "Valid name, no data record of requested type"; + break; + /* WSA_QOS_* omitted */ +# endif +# endif + +# if GNULIB_defined_ENOMSG + case ENOMSG: + msg = "No message of desired type"; + break; +# endif + +# if GNULIB_defined_EIDRM + case EIDRM: + msg = "Identifier removed"; + break; +# endif + +# if GNULIB_defined_ENOLINK + case ENOLINK: + msg = "Link has been severed"; + break; +# endif + +# if GNULIB_defined_EPROTO + case EPROTO: + msg = "Protocol error"; + break; +# endif + +# if GNULIB_defined_EMULTIHOP + case EMULTIHOP: + msg = "Multihop attempted"; + break; +# endif + +# if GNULIB_defined_EBADMSG + case EBADMSG: + msg = "Bad message"; + break; +# endif + +# if GNULIB_defined_EOVERFLOW + case EOVERFLOW: + msg = "Value too large for defined data type"; + break; +# endif + +# if GNULIB_defined_ENOTSUP + case ENOTSUP: + msg = "Not supported"; + break; +# endif + +# if GNULIB_defined_ESTALE + case ESTALE: + msg = "Stale NFS file handle"; + break; +# endif + +# if GNULIB_defined_ECANCELED + case ECANCELED: + msg = "Operation canceled"; + break; +# endif + } + + if (msg) + return (char *) msg; + + { + char *result = strerror (n); + + if (result == NULL || result[0] == '\0') + { + static char const fmt[] = "Unknown error (%d)"; + static char msg_buf[sizeof fmt + INT_STRLEN_BOUND (n)]; + sprintf (msg_buf, fmt, n); + return msg_buf; + } + + return result; + } +} + +#endif diff --git a/lib/strftime.c b/lib/strftime.c new file mode 100644 index 0000000..01c0c55 --- /dev/null +++ b/lib/strftime.c @@ -0,0 +1,1465 @@ +/* Copyright (C) 1991-2001, 2003-2007, 2009-2010 Free Software Foundation, Inc. + + 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 + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +#ifdef _LIBC +# 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 "ignore-value.h" +# include "fprintftime.h" +# else +# include "strftime.h" +# endif +#endif + +#include <ctype.h> +#include <time.h> + +#if HAVE_TZNAME && !HAVE_DECL_TZNAME +extern char *tzname[]; +#endif + +/* Do multibyte processing if multibytes 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. + But this does not hold for the DEC-HANYU encoding used on OSF/1. */ +#if !defined __osf__ +# 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 <stdbool.h> +#include <stddef.h> +#include <stdlib.h> +#include <string.h> + +#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 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 tzname __tzname +# define tzset __tzset +#endif + +#if !HAVE_TM_GMTOFF +/* 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. + 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 +#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 \ + { \ + int _n = (n); \ + int _delta = width - _n; \ + int _incr = _n + (_delta > 0 ? _delta : 0); \ + if ((size_t) _incr >= maxsize - i) \ + return 0; \ + if (p) \ + { \ + if (digits == 0 && _delta > 0) \ + { \ + 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 \ + { \ + /* We are ignoring the value of fwrite here, in spite of the \ + fact that technically, that may not be valid: the fwrite \ + specification in POSIX 2008 defers to that of fputc, which \ + is intended to be consistent with the one from ISO C, \ + which permits failure due to ENOMEM *without* setting the \ + stream's error indicator. */ \ + ignore_value (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_ARG , loc +# define LOCALE_PARAM_PROTO , __locale_t loc +# define HELPER_LOCALE_ARG , current +#else +# define LOCALE_PARAM_PROTO +# 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_PROTO) +{ + 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_PROTO) +{ + 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 *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) +#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 UT and NS. Emacs is a special case for now, but + this Emacs-specific code can be removed once Emacs's config.h + defines my_strftime. */ +#if defined emacs && !defined my_strftime +# define my_strftime nstrftime +#endif + +#if FPRINTFTIME +# undef my_strftime +# define my_strftime fprintftime +#endif + +#ifdef my_strftime +# define extra_args , ut, ns +# define extra_args_spec , int ut, 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 ut 0 +# define ns 0 +#endif + + +/* Just like my_strftime, below, but with one more parameter, UPCASE, + to indicate that the result should be converted to upper case. */ +static size_t +strftime_case_ (bool upcase, STREAM_OR_CHAR_T *s, + STRFTIME_ARG (size_t maxsize) + const CHAR_T *format, + const struct tm *tp extra_args_spec LOCALE_PARAM_PROTO) +{ +#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 *) _NL_CURRENT (LC_TIME, NLW(ABDAY_1) + tp->tm_wday)) +# define f_wkday \ + ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(DAY_1) + tp->tm_wday)) +# define a_month \ + ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ABMON_1) + tp->tm_mon)) +# define f_month \ + ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(MON_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 ap_len STRLEN (ampm) +#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 (ut) + { + if (! (zone && *zone)) + zone = "GMT"; + } + else + { + /* POSIX.1 requires that local time zone information be used as + though strftime called tzset. */ +# if HAVE_TZSET + tzset (); +# endif + } +#endif + + 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 to specify the field width. */ + 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) \ + digits = d; \ + number_value = v; goto do_number +#define DO_SIGNED_NUMBER(d, negative, v) \ + digits = d; \ + negative_number = negative; \ + u_number_value = v; goto do_signed_number + + /* 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, negative, mask, v) \ + digits = d; \ + negative_number = negative; \ + tz_colon_mask = mask; \ + u_number_value = v; goto do_tz_offset +#define DO_NUMBER_SPACEPAD(d, v) \ + digits = d; \ + number_value = v; goto do_number_spacepad + + 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 != 0) + goto bad_format; +#ifdef _NL_CURRENT + cpy (am_len, a_month); + break; +#else + goto underlying_strftime; +#endif + + case L_('B'): + if (modifier != 0) + goto bad_format; + if (change_case) + { + to_uppcase = true; + to_lowcase = false; + } +#ifdef _NL_CURRENT + 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_case_ (to_uppcase, + NULL, STRFTIME_ARG ((size_t) -1) + subfmt, + tp extra_args LOCALE_ARG); + add (len, strftime_case_ (to_uppcase, p, + STRFTIME_ARG (maxsize - i) + subfmt, + tp 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_('O')) + goto bad_format; + 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_('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 (<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; + else + 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; + } + +#if HAVE_TZNAME + /* The tzset() call might have changed the value. */ + if (!(zone && *zone) && tp->tm_isdst >= 0) + zone = tzname[tp->tm_isdst != 0]; +#endif + if (! zone) + zone = ""; + +#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 (ut) + diff = 0; + else + { + struct tm gtm; + struct tm ltm; + time_t lt; + + ltm = *tp; + lt = mktime (<m); + + if (lt == (time_t) -1) + { + /* mktime returns -1 for errors, but -1 is also a + valid time_t value. Check whether an error really + occurred. */ + struct tm tm; + + if (! __localtime_r (<, &tm) + || ((ltm.tm_sec ^ tm.tm_sec) + | (ltm.tm_min ^ tm.tm_min) + | (ltm.tm_hour ^ tm.tm_hour) + | (ltm.tm_mday ^ tm.tm_mday) + | (ltm.tm_mon ^ tm.tm_mon) + | (ltm.tm_year ^ tm.tm_year))) + break; + } + + if (! __gmtime_r (<, >m)) + break; + + diff = tm_diff (<m, >m); + } +#endif + + hour_diff = diff / 60 / 60; + min_diff = diff / 60 % 60; + sec_diff = diff % 60; + + switch (colons) + { + case 0: /* +hhmm */ + DO_TZ_OFFSET (5, diff < 0, 0, hour_diff * 100 + min_diff); + + case 1: tz_hh_mm: /* +hh:mm */ + DO_TZ_OFFSET (6, diff < 0, 04, hour_diff * 100 + min_diff); + + case 2: tz_hh_mm_ss: /* +hh:mm:ss */ + DO_TZ_OFFSET (9, diff < 0, 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, diff < 0, 0, hour_diff); + + default: + goto bad_format; + } + } + + case L_('\0'): /* GNU extension: % at end of format. */ + --f; + /* Fall through. */ + 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; +} + +/* 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_PROTO) +{ + return strftime_case_ (false, s, STRFTIME_ARG (maxsize) + format, tp extra_args LOCALE_ARG); +} + +#if defined _LIBC && ! FPRINTFTIME +libc_hidden_def (my_strftime) +#endif + + +#if defined emacs && ! FPRINTFTIME +/* For Emacs we have a separate interface which corresponds to the normal + strftime function plus the ut argument, but without the ns argument. */ +size_t +emacs_strftimeu (char *s, size_t maxsize, const char *format, + const struct tm *tp, int ut) +{ + return my_strftime (s, maxsize, format, tp, ut, 0); +} +#endif diff --git a/lib/strftime.h b/lib/strftime.h new file mode 100644 index 0000000..bf14540 --- /dev/null +++ b/lib/strftime.h @@ -0,0 +1,34 @@ +/* declarations for strftime.c + + Copyright (C) 2002, 2004, 2008-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 <time.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* Just like strftime, but with two more arguments: + POSIX requires that strftime use the local timezone information. + When __UTC is nonzero and tm->tm_zone is NULL or the empty string, + use UTC instead. Use __NS as the number of nanoseconds in the + %N directive. */ +size_t nstrftime (char *, size_t, char const *, struct tm const *, + int __utc, int __ns); + +#ifdef __cplusplus +} +#endif diff --git a/lib/striconv.c b/lib/striconv.c new file mode 100644 index 0000000..096a01b --- /dev/null +++ b/lib/striconv.c @@ -0,0 +1,459 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Charset conversion. + Copyright (C) 2001-2007, 2009-2010 Free Software Foundation, Inc. + Written by Bruno Haible and 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include <config.h> + +/* Specification. */ +#include "striconv.h" + +#include <errno.h> +#include <stdlib.h> +#include <string.h> + +#if HAVE_ICONV +# include <iconv.h> +/* Get MB_LEN_MAX, CHAR_BIT. */ +# include <limits.h> +#endif + +#include "c-strcase.h" + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + + +#if HAVE_ICONV + +int +mem_cd_iconv (const char *src, size_t srclen, iconv_t cd, + char **resultp, size_t *lengthp) +{ +# define tmpbufsize 4096 + size_t length; + char *result; + + /* Avoid glibc-2.1 bug and Solaris 2.7-2.9 bug. */ +# if defined _LIBICONV_VERSION \ + || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun) + /* Set to the initial state. */ + iconv (cd, NULL, NULL, NULL, NULL); +# endif + + /* Determine the length we need. */ + { + size_t count = 0; + /* The alignment is needed when converting e.g. to glibc's WCHAR_T or + libiconv's UCS-4-INTERNAL encoding. */ + union { unsigned int align; char buf[tmpbufsize]; } tmp; +# define tmpbuf tmp.buf + const char *inptr = src; + size_t insize = srclen; + + while (insize > 0) + { + char *outptr = tmpbuf; + size_t outsize = tmpbufsize; + size_t res = iconv (cd, + (ICONV_CONST char **) &inptr, &insize, + &outptr, &outsize); + + if (res == (size_t)(-1)) + { + if (errno == E2BIG) + ; + else if (errno == EINVAL) + break; + else + return -1; + } +# if !defined _LIBICONV_VERSION && !defined __GLIBC__ + /* Irix iconv() inserts a NUL byte if it cannot convert. + NetBSD iconv() inserts a question mark if it cannot convert. + Only GNU libiconv and GNU libc are known to prefer to fail rather + than doing a lossy conversion. */ + else if (res > 0) + { + errno = EILSEQ; + return -1; + } +# endif + count += outptr - tmpbuf; + } + /* Avoid glibc-2.1 bug and Solaris 2.7 bug. */ +# if defined _LIBICONV_VERSION \ + || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun) + { + char *outptr = tmpbuf; + size_t outsize = tmpbufsize; + size_t res = iconv (cd, NULL, NULL, &outptr, &outsize); + + if (res == (size_t)(-1)) + return -1; + count += outptr - tmpbuf; + } +# endif + length = count; +# undef tmpbuf + } + + if (length == 0) + { + *lengthp = 0; + return 0; + } + if (*resultp != NULL && *lengthp >= length) + result = *resultp; + else + { + result = (char *) malloc (length); + if (result == NULL) + { + errno = ENOMEM; + return -1; + } + } + + /* Avoid glibc-2.1 bug and Solaris 2.7-2.9 bug. */ +# if defined _LIBICONV_VERSION \ + || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun) + /* Return to the initial state. */ + iconv (cd, NULL, NULL, NULL, NULL); +# endif + + /* Do the conversion for real. */ + { + const char *inptr = src; + size_t insize = srclen; + char *outptr = result; + size_t outsize = length; + + while (insize > 0) + { + size_t res = iconv (cd, + (ICONV_CONST char **) &inptr, &insize, + &outptr, &outsize); + + if (res == (size_t)(-1)) + { + if (errno == EINVAL) + break; + else + goto fail; + } +# if !defined _LIBICONV_VERSION && !defined __GLIBC__ + /* Irix iconv() inserts a NUL byte if it cannot convert. + NetBSD iconv() inserts a question mark if it cannot convert. + Only GNU libiconv and GNU libc are known to prefer to fail rather + than doing a lossy conversion. */ + else if (res > 0) + { + errno = EILSEQ; + goto fail; + } +# endif + } + /* Avoid glibc-2.1 bug and Solaris 2.7 bug. */ +# if defined _LIBICONV_VERSION \ + || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun) + { + size_t res = iconv (cd, NULL, NULL, &outptr, &outsize); + + if (res == (size_t)(-1)) + goto fail; + } +# endif + if (outsize != 0) + abort (); + } + + *resultp = result; + *lengthp = length; + + return 0; + + fail: + { + if (result != *resultp) + { + int saved_errno = errno; + free (result); + errno = saved_errno; + } + return -1; + } +# undef tmpbufsize +} + +char * +str_cd_iconv (const char *src, iconv_t cd) +{ + /* For most encodings, a trailing NUL byte in the input will be converted + to a trailing NUL byte in the output. But not for UTF-7. So that this + function is usable for UTF-7, we have to exclude the NUL byte from the + conversion and add it by hand afterwards. */ +# if !defined _LIBICONV_VERSION && !defined __GLIBC__ + /* Irix iconv() inserts a NUL byte if it cannot convert. + NetBSD iconv() inserts a question mark if it cannot convert. + Only GNU libiconv and GNU libc are known to prefer to fail rather + than doing a lossy conversion. For other iconv() implementations, + we have to look at the number of irreversible conversions returned; + but this information is lost when iconv() returns for an E2BIG reason. + Therefore we cannot use the second, faster algorithm. */ + + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconv (src, strlen (src), cd, &result, &length); + char *final_result; + + if (retval < 0) + { + if (result != NULL) + abort (); + return NULL; + } + + /* Add the terminating NUL byte. */ + final_result = + (result != NULL ? realloc (result, length + 1) : malloc (length + 1)); + if (final_result == NULL) + { + free (result); + errno = ENOMEM; + return NULL; + } + final_result[length] = '\0'; + + return final_result; + +# else + /* This algorithm is likely faster than the one above. But it may produce + iconv() returns for an E2BIG reason, when the output size guess is too + small. Therefore it can only be used when we don't need the number of + irreversible conversions performed. */ + char *result; + size_t result_size; + size_t length; + const char *inptr = src; + size_t inbytes_remaining = strlen (src); + + /* Make a guess for the worst-case output size, in order to avoid a + realloc. It's OK if the guess is wrong as long as it is not zero and + doesn't lead to an integer overflow. */ + result_size = inbytes_remaining; + { + size_t approx_sqrt_SIZE_MAX = SIZE_MAX >> (sizeof (size_t) * CHAR_BIT / 2); + if (result_size <= approx_sqrt_SIZE_MAX / MB_LEN_MAX) + result_size *= MB_LEN_MAX; + } + result_size += 1; /* for the terminating NUL */ + + result = (char *) malloc (result_size); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + + /* Avoid glibc-2.1 bug and Solaris 2.7-2.9 bug. */ +# if defined _LIBICONV_VERSION \ + || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun) + /* Set to the initial state. */ + iconv (cd, NULL, NULL, NULL, NULL); +# endif + + /* Do the conversion. */ + { + char *outptr = result; + size_t outbytes_remaining = result_size - 1; + + for (;;) + { + /* Here inptr + inbytes_remaining = src + strlen (src), + outptr + outbytes_remaining = result + result_size - 1. */ + size_t res = iconv (cd, + (ICONV_CONST char **) &inptr, &inbytes_remaining, + &outptr, &outbytes_remaining); + + if (res == (size_t)(-1)) + { + if (errno == EINVAL) + break; + else if (errno == E2BIG) + { + size_t used = outptr - result; + size_t newsize = result_size * 2; + char *newresult; + + if (!(newsize > result_size)) + { + errno = ENOMEM; + goto failed; + } + newresult = (char *) realloc (result, newsize); + if (newresult == NULL) + { + errno = ENOMEM; + goto failed; + } + result = newresult; + result_size = newsize; + outptr = result + used; + outbytes_remaining = result_size - 1 - used; + } + else + goto failed; + } + else + break; + } + /* Avoid glibc-2.1 bug and Solaris 2.7 bug. */ +# if defined _LIBICONV_VERSION \ + || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun) + for (;;) + { + /* Here outptr + outbytes_remaining = result + result_size - 1. */ + size_t res = iconv (cd, NULL, NULL, &outptr, &outbytes_remaining); + + if (res == (size_t)(-1)) + { + if (errno == E2BIG) + { + size_t used = outptr - result; + size_t newsize = result_size * 2; + char *newresult; + + if (!(newsize > result_size)) + { + errno = ENOMEM; + goto failed; + } + newresult = (char *) realloc (result, newsize); + if (newresult == NULL) + { + errno = ENOMEM; + goto failed; + } + result = newresult; + result_size = newsize; + outptr = result + used; + outbytes_remaining = result_size - 1 - used; + } + else + goto failed; + } + else + break; + } +# endif + + /* Add the terminating NUL byte. */ + *outptr++ = '\0'; + + length = outptr - result; + } + + /* Give away unused memory. */ + if (length < result_size) + { + char *smaller_result = (char *) realloc (result, length); + + if (smaller_result != NULL) + result = smaller_result; + } + + return result; + + failed: + { + int saved_errno = errno; + free (result); + errno = saved_errno; + return NULL; + } + +# endif +} + +#endif + +char * +str_iconv (const char *src, const char *from_codeset, const char *to_codeset) +{ + if (*src == '\0' || c_strcasecmp (from_codeset, to_codeset) == 0) + { + char *result = strdup (src); + + if (result == NULL) + errno = ENOMEM; + return result; + } + else + { +#if HAVE_ICONV + iconv_t cd; + char *result; + + /* Avoid glibc-2.1 bug with EUC-KR. */ +# if (__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) && !defined _LIBICONV_VERSION + if (c_strcasecmp (from_codeset, "EUC-KR") == 0 + || c_strcasecmp (to_codeset, "EUC-KR") == 0) + { + errno = EINVAL; + return NULL; + } +# endif + cd = iconv_open (to_codeset, from_codeset); + if (cd == (iconv_t) -1) + return NULL; + + result = str_cd_iconv (src, cd); + + if (result == NULL) + { + /* Close cd, but preserve the errno from str_cd_iconv. */ + int saved_errno = errno; + iconv_close (cd); + errno = saved_errno; + } + else + { + if (iconv_close (cd) < 0) + { + /* Return NULL, but free the allocated memory, and while doing + that, preserve the errno from iconv_close. */ + int saved_errno = errno; + free (result); + errno = saved_errno; + return NULL; + } + } + return result; +#else + /* This is a different error code than if iconv_open existed but didn't + support from_codeset and to_codeset, so that the caller can emit + an error message such as + "iconv() is not supported. Installing GNU libiconv and + then reinstalling this package would fix this." */ + errno = ENOSYS; + return NULL; +#endif + } +} diff --git a/lib/striconv.h b/lib/striconv.h new file mode 100644 index 0000000..bc864e0 --- /dev/null +++ b/lib/striconv.h @@ -0,0 +1,78 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Charset conversion. + Copyright (C) 2001-2004, 2006-2007, 2009-2010 Free Software Foundation, Inc. + Written by Bruno Haible and 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _STRICONV_H +#define _STRICONV_H + +#include <stddef.h> +#if HAVE_ICONV +#include <iconv.h> +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if HAVE_ICONV + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + The conversion descriptor is passed as CD. + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int mem_cd_iconv (const char *src, size_t srclen, iconv_t cd, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + The conversion descriptor is passed as CD. Both the "from" and the "to" + encoding must use a single NUL byte at the end of the string (i.e. not + UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * str_cd_iconv (const char *src, iconv_t cd); + +#endif + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + Both the "from" and the "to" encoding must use a single NUL byte at the + end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * str_iconv (const char *src, + const char *from_codeset, const char *to_codeset); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _STRICONV_H */ diff --git a/lib/string.in.h b/lib/string.in.h new file mode 100644 index 0000000..13406a9 --- /dev/null +++ b/lib/string.in.h @@ -0,0 +1,931 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like <string.h>. + + Copyright (C) 1995-1996, 2001-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_STRING_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_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 @GNULIB_MBSLEN@ && defined __MirBSD__ +# include <wchar.h> +#endif + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +# define __attribute__(Spec) /* empty */ +# endif +/* The attribute __pure__ was added in gcc 2.96. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) +# define __pure__ /* empty */ +# 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. */ + + +/* 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) + __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) + __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 \ + && (__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) + __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) + __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) + __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 \ + && (__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) + __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 \ + && (__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) +# 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 ! @HAVE_STRCHRNUL@ +_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) + __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)); +# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ + && (__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 !(@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 *__string, size_t __n) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n)); +# else +# if ! @HAVE_DECL_STRNDUP@ +_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, 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 *__string, size_t __maxlen) + __attribute__ ((__pure__)) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)); +# else +# if ! @HAVE_DECL_STRNLEN@ +_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen) + __attribute__ ((__pure__)) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, 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) + __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 \ + && (__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) + __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 \ + && (__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) + __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) + __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 \ + && (__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_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); +# else +_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _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_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_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_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 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) + _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_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_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_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_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, returning less than, equal to or greater than zero if this + initial segment is lexicographically less than, equal to or greater than + PREFIX. + Note: This function may, in multibyte locales, return 0 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_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_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_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_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_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_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 + +#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_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 */ diff --git a/lib/strings.in.h b/lib/strings.in.h new file mode 100644 index 0000000..e1d7725 --- /dev/null +++ b/lib/strings.in.h @@ -0,0 +1,95 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A substitute <strings.h>. + + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_STRINGS_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STRINGS_H@ + +#ifndef _GL_STRINGS_H +#define _GL_STRINGS_H + + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +#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. + 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 /* _GL_STRING_H */ +#endif /* _GL_STRING_H */ diff --git a/lib/stripslash.c b/lib/stripslash.c new file mode 100644 index 0000000..3a5996f --- /dev/null +++ b/lib/stripslash.c @@ -0,0 +1,45 @@ +/* stripslash.c -- remove redundant trailing slashes from a file name + + Copyright (C) 1990, 2001, 2003-2006, 2009-2010 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "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/lib/strncasecmp.c b/lib/strncasecmp.c new file mode 100644 index 0000000..c0972ab --- /dev/null +++ b/lib/strncasecmp.c @@ -0,0 +1,65 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* strncasecmp.c -- case insensitive string comparator + Copyright (C) 1998-1999, 2005-2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#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/lib/strndup.c b/lib/strndup.c new file mode 100644 index 0000000..a7e03ef --- /dev/null +++ b/lib/strndup.c @@ -0,0 +1,39 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A replacement function, for systems that lack strndup. + + Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006, 2007, 2009, + 2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include <config.h> + +#include <string.h> + +#include <stdlib.h> + +char * +strndup (char const *s, size_t n) +{ + size_t len = strnlen (s, n); + char *new = malloc (len + 1); + + if (new == NULL) + return NULL; + + new[len] = '\0'; + return memcpy (new, s, len); +} diff --git a/lib/strnlen.c b/lib/strnlen.c new file mode 100644 index 0000000..2455d5c --- /dev/null +++ b/lib/strnlen.c @@ -0,0 +1,33 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Find the length of STRING, but scan at most MAXLEN characters. + Copyright (C) 2005, 2006, 2007, 2009, 2010 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include <config.h> + +#include <string.h> + +/* Find the length of STRING, but scan at most MAXLEN characters. + If no '\0' terminator is found in that many characters, return MAXLEN. */ + +size_t +strnlen (const char *string, size_t maxlen) +{ + const char *end = memchr (string, '\0', maxlen); + return end ? (size_t) (end - string) : maxlen; +} diff --git a/lib/strnlen1.c b/lib/strnlen1.c new file mode 100644 index 0000000..b8cd2bf --- /dev/null +++ b/lib/strnlen1.c @@ -0,0 +1,35 @@ +/* Find the length of STRING + 1, but scan at most MAXLEN bytes. + Copyright (C) 2005-2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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> + +/* Specification. */ +#include "strnlen1.h" + +#include <string.h> + +/* Find the length of STRING + 1, but scan at most MAXLEN bytes. + If no '\0' terminator is found in that many characters, return MAXLEN. */ +/* This is the same as strnlen (string, maxlen - 1) + 1. */ +size_t +strnlen1 (const char *string, size_t maxlen) +{ + const char *end = (const char *) memchr (string, '\0', maxlen); + if (end != NULL) + return end - string + 1; + else + return maxlen; +} diff --git a/lib/strnlen1.h b/lib/strnlen1.h new file mode 100644 index 0000000..dfaf62d --- /dev/null +++ b/lib/strnlen1.h @@ -0,0 +1,39 @@ +/* Find the length of STRING + 1, but scan at most MAXLEN bytes. + Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 _STRNLEN1_H +#define _STRNLEN1_H + +#include <stddef.h> + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Find the length of STRING + 1, but scan at most MAXLEN bytes. + If no '\0' terminator is found in that many characters, return MAXLEN. */ +/* This is the same as strnlen (string, maxlen - 1) + 1. */ +extern size_t strnlen1 (const char *string, size_t maxlen); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _STRNLEN1_H */ diff --git a/lib/strptime.c b/lib/strptime.c new file mode 100644 index 0000000..82b3b60 --- /dev/null +++ b/lib/strptime.c @@ -0,0 +1,1141 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 2002, 2004, 2005, 2007, 2009, 2010 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _LIBC +# include <config.h> +#endif + +#include <time.h> + +#include <assert.h> +#include <ctype.h> +#ifdef _LIBC +# include <langinfo.h> +#endif +#include <limits.h> +#include <string.h> +#include <stdbool.h> + +#ifdef _LIBC +# include "../locale/localeinfo.h" +#endif + +#ifndef _LIBC +enum ptime_locale_status { not, loc, raw }; +#endif + + + +#define match_char(ch1, ch2) if (ch1 != ch2) return NULL +#if defined _LIBC && defined __GNUC__ && __GNUC__ >= 2 +# define match_string(cs1, s2) \ + ({ size_t len = strlen (cs1); \ + int result = __strncasecmp_l ((cs1), (s2), len, locale) == 0; \ + if (result) (s2) += len; \ + result; }) +#else +/* Oh come on. Get a reasonable compiler. */ +# define match_string(cs1, s2) \ + (strncasecmp ((cs1), (s2), strlen (cs1)) ? 0 : ((s2) += strlen (cs1), 1)) +#endif +/* We intentionally do not use isdigit() for testing because this will + lead to problems with the wide character version. */ +#define get_number(from, to, n) \ + do { \ + int __n = n; \ + val = 0; \ + while (*rp == ' ') \ + ++rp; \ + if (*rp < '0' || *rp > '9') \ + return NULL; \ + do { \ + val *= 10; \ + val += *rp++ - '0'; \ + } while (--__n > 0 && val * 10 <= to && *rp >= '0' && *rp <= '9'); \ + if (val < from || val > to) \ + return NULL; \ + } while (0) +#ifdef _NL_CURRENT +# define get_alt_number(from, to, n) \ + ({ \ + __label__ do_normal; \ + \ + if (*decided != raw) \ + { \ + val = _nl_parse_alt_digit (&rp HELPER_LOCALE_ARG); \ + if (val == -1 && *decided != loc) \ + { \ + *decided = loc; \ + goto do_normal; \ + } \ + if (val < from || val > to) \ + return NULL; \ + } \ + else \ + { \ + do_normal: \ + get_number (from, to, n); \ + } \ + 0; \ + }) +#else +# define get_alt_number(from, to, n) \ + /* We don't have the alternate representation. */ \ + get_number(from, to, n) +#endif +#define recursive(new_fmt) \ + (*(new_fmt) != '\0' \ + && (rp = __strptime_internal (rp, (new_fmt), tm, \ + decided, era_cnt LOCALE_ARG)) != NULL) + + +#ifdef _LIBC +/* This is defined in locale/C-time.c in the GNU libc. */ +extern const struct locale_data _nl_C_LC_TIME attribute_hidden; + +# define weekday_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (DAY_1)].string) +# define ab_weekday_name \ + (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (ABDAY_1)].string) +# define month_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (MON_1)].string) +# define ab_month_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (ABMON_1)].string) +# define HERE_D_T_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (D_T_FMT)].string) +# define HERE_D_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (D_FMT)].string) +# define HERE_AM_STR (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (AM_STR)].string) +# define HERE_PM_STR (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (PM_STR)].string) +# define HERE_T_FMT_AMPM \ + (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (T_FMT_AMPM)].string) +# define HERE_T_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (T_FMT)].string) + +# define strncasecmp(s1, s2, n) __strncasecmp (s1, s2, n) +#else +static char const weekday_name[][10] = + { + "Sunday", "Monday", "Tuesday", "Wednesday", + "Thursday", "Friday", "Saturday" + }; +static char const ab_weekday_name[][4] = + { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + }; +static char const month_name[][10] = + { + "January", "February", "March", "April", "May", "June", + "July", "August", "September", "October", "November", "December" + }; +static char const ab_month_name[][4] = + { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" + }; +# define HERE_D_T_FMT "%a %b %e %H:%M:%S %Y" +# define HERE_D_FMT "%m/%d/%y" +# define HERE_AM_STR "AM" +# define HERE_PM_STR "PM" +# define HERE_T_FMT_AMPM "%I:%M:%S %p" +# define HERE_T_FMT "%H:%M:%S" + +static 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 } + }; +#endif + +#if defined _LIBC +/* 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 strptime __strptime_l +# undef _NL_CURRENT +# define _NL_CURRENT(category, item) \ + (current->values[_NL_ITEM_INDEX (item)].string) +# undef _NL_CURRENT_WORD +# define _NL_CURRENT_WORD(category, item) \ + (current->values[_NL_ITEM_INDEX (item)].word) +# define LOCALE_PARAM , locale +# define LOCALE_ARG , locale +# define LOCALE_PARAM_PROTO , __locale_t locale +# define LOCALE_PARAM_DECL __locale_t locale; +# define HELPER_LOCALE_ARG , current +# define ISSPACE(Ch) __isspace_l (Ch, locale) +#else +# define LOCALE_PARAM +# define LOCALE_ARG +# define LOCALE_PARAM_DECL +# define LOCALE_PARAM_PROTO +# define HELPER_LOCALE_ARG +# define ISSPACE(Ch) isspace (Ch) +#endif + + + + +#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 + +/* Compute the day of the week. */ +static void +day_of_the_week (struct tm *tm) +{ + /* We know that January 1st 1970 was a Thursday (= 4). Compute the + the difference between this data in the one on TM and so determine + the weekday. */ + int corr_year = 1900 + tm->tm_year - (tm->tm_mon < 2); + int wday = (-473 + + (365 * (tm->tm_year - 70)) + + (corr_year / 4) + - ((corr_year / 4) / 25) + ((corr_year / 4) % 25 < 0) + + (((corr_year / 4) / 25) / 4) + + __mon_yday[0][tm->tm_mon] + + tm->tm_mday - 1); + tm->tm_wday = ((wday % 7) + 7) % 7; +} + +/* Compute the day of the year. */ +static void +day_of_the_year (struct tm *tm) +{ + tm->tm_yday = (__mon_yday[__isleap (1900 + tm->tm_year)][tm->tm_mon] + + (tm->tm_mday - 1)); +} + + +#ifdef _LIBC +char * +internal_function +#else +static char * +#endif +__strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) + const char *rp; + const char *fmt; + struct tm *tm; + enum ptime_locale_status *decided; + int era_cnt; + LOCALE_PARAM_DECL +{ +#ifdef _LIBC + struct locale_data *const current = locale->__locales[LC_TIME]; +#endif + + const char *rp_backup; + int cnt; + size_t val; + int have_I, is_pm; + int century, want_century; + int want_era; + int have_wday, want_xday; + int have_yday; + int have_mon, have_mday; + int have_uweek, have_wweek; + int week_no; + size_t num_eras; + struct era_entry *era; + + have_I = is_pm = 0; + century = -1; + want_century = 0; + want_era = 0; + era = NULL; + week_no = 0; + + have_wday = want_xday = have_yday = have_mon = have_mday = have_uweek = 0; + have_wweek = 0; + + while (*fmt != '\0') + { + /* A white space in the format string matches 0 more or white + space in the input string. */ + if (ISSPACE (*fmt)) + { + while (ISSPACE (*rp)) + ++rp; + ++fmt; + continue; + } + + /* Any character but `%' must be matched by the same character + in the iput string. */ + if (*fmt != '%') + { + match_char (*fmt++, *rp++); + continue; + } + + ++fmt; +#ifndef _NL_CURRENT + /* We need this for handling the `E' modifier. */ + start_over: +#endif + + /* Make back up of current processing pointer. */ + rp_backup = rp; + + switch (*fmt++) + { + case '%': + /* Match the `%' character itself. */ + match_char ('%', *rp++); + break; + case 'a': + case 'A': + /* Match day of week. */ + for (cnt = 0; cnt < 7; ++cnt) + { +#ifdef _NL_CURRENT + if (*decided !=raw) + { + if (match_string (_NL_CURRENT (LC_TIME, DAY_1 + cnt), rp)) + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, DAY_1 + cnt), + weekday_name[cnt])) + *decided = loc; + break; + } + if (match_string (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), rp)) + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), + ab_weekday_name[cnt])) + *decided = loc; + break; + } + } +#endif + if (*decided != loc + && (match_string (weekday_name[cnt], rp) + || match_string (ab_weekday_name[cnt], rp))) + { + *decided = raw; + break; + } + } + if (cnt == 7) + /* Does not match a weekday name. */ + return NULL; + tm->tm_wday = cnt; + have_wday = 1; + break; + case 'b': + case 'B': + case 'h': + /* Match month name. */ + for (cnt = 0; cnt < 12; ++cnt) + { +#ifdef _NL_CURRENT + if (*decided !=raw) + { + if (match_string (_NL_CURRENT (LC_TIME, MON_1 + cnt), rp)) + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, MON_1 + cnt), + month_name[cnt])) + *decided = loc; + break; + } + if (match_string (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), rp)) + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), + ab_month_name[cnt])) + *decided = loc; + break; + } + } +#endif + if (match_string (month_name[cnt], rp) + || match_string (ab_month_name[cnt], rp)) + { + *decided = raw; + break; + } + } + if (cnt == 12) + /* Does not match a month name. */ + return NULL; + tm->tm_mon = cnt; + want_xday = 1; + break; + case 'c': + /* Match locale's date and time format. */ +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (!recursive (_NL_CURRENT (LC_TIME, D_T_FMT))) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (*decided == not && + strcmp (_NL_CURRENT (LC_TIME, D_T_FMT), HERE_D_T_FMT)) + *decided = loc; + want_xday = 1; + break; + } + *decided = raw; + } +#endif + if (!recursive (HERE_D_T_FMT)) + return NULL; + want_xday = 1; + break; + case 'C': + /* Match century number. */ + match_century: + get_number (0, 99, 2); + century = val; + want_xday = 1; + break; + case 'd': + case 'e': + /* Match day of month. */ + get_number (1, 31, 2); + tm->tm_mday = val; + have_mday = 1; + want_xday = 1; + break; + case 'F': + if (!recursive ("%Y-%m-%d")) + return NULL; + want_xday = 1; + break; + case 'x': +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (!recursive (_NL_CURRENT (LC_TIME, D_FMT))) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, D_FMT), HERE_D_FMT)) + *decided = loc; + want_xday = 1; + break; + } + *decided = raw; + } +#endif + /* Fall through. */ + case 'D': + /* Match standard day format. */ + if (!recursive (HERE_D_FMT)) + return NULL; + want_xday = 1; + break; + case 'k': + case 'H': + /* Match hour in 24-hour clock. */ + get_number (0, 23, 2); + tm->tm_hour = val; + have_I = 0; + break; + case 'l': + /* Match hour in 12-hour clock. GNU extension. */ + case 'I': + /* Match hour in 12-hour clock. */ + get_number (1, 12, 2); + tm->tm_hour = val % 12; + have_I = 1; + break; + case 'j': + /* Match day number of year. */ + get_number (1, 366, 3); + tm->tm_yday = val - 1; + have_yday = 1; + break; + case 'm': + /* Match number of month. */ + get_number (1, 12, 2); + tm->tm_mon = val - 1; + have_mon = 1; + want_xday = 1; + break; + case 'M': + /* Match minute. */ + get_number (0, 59, 2); + tm->tm_min = val; + break; + case 'n': + case 't': + /* Match any white space. */ + while (ISSPACE (*rp)) + ++rp; + break; + case 'p': + /* Match locale's equivalent of AM/PM. */ +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (match_string (_NL_CURRENT (LC_TIME, AM_STR), rp)) + { + if (strcmp (_NL_CURRENT (LC_TIME, AM_STR), HERE_AM_STR)) + *decided = loc; + break; + } + if (match_string (_NL_CURRENT (LC_TIME, PM_STR), rp)) + { + if (strcmp (_NL_CURRENT (LC_TIME, PM_STR), HERE_PM_STR)) + *decided = loc; + is_pm = 1; + break; + } + *decided = raw; + } +#endif + if (!match_string (HERE_AM_STR, rp)) + { + if (match_string (HERE_PM_STR, rp)) + is_pm = 1; + else + return NULL; + } + break; + case 'r': +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (!recursive (_NL_CURRENT (LC_TIME, T_FMT_AMPM))) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (*decided == not && + strcmp (_NL_CURRENT (LC_TIME, T_FMT_AMPM), + HERE_T_FMT_AMPM)) + *decided = loc; + break; + } + *decided = raw; + } +#endif + if (!recursive (HERE_T_FMT_AMPM)) + return NULL; + break; + case 'R': + if (!recursive ("%H:%M")) + return NULL; + break; + case 's': + { + /* The number of seconds may be very high so we cannot use + the `get_number' macro. Instead read the number + character for character and construct the result while + doing this. */ + time_t secs = 0; + if (*rp < '0' || *rp > '9') + /* We need at least one digit. */ + return NULL; + + do + { + secs *= 10; + secs += *rp++ - '0'; + } + while (*rp >= '0' && *rp <= '9'); + + if (localtime_r (&secs, tm) == NULL) + /* Error in function. */ + return NULL; + } + break; + case 'S': + get_number (0, 61, 2); + tm->tm_sec = val; + break; + case 'X': +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (!recursive (_NL_CURRENT (LC_TIME, T_FMT))) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (strcmp (_NL_CURRENT (LC_TIME, T_FMT), HERE_T_FMT)) + *decided = loc; + break; + } + *decided = raw; + } +#endif + /* Fall through. */ + case 'T': + if (!recursive (HERE_T_FMT)) + return NULL; + break; + case 'u': + get_number (1, 7, 1); + tm->tm_wday = val % 7; + have_wday = 1; + break; + case 'g': + get_number (0, 99, 2); + /* XXX This cannot determine any field in TM. */ + break; + case 'G': + if (*rp < '0' || *rp > '9') + return NULL; + /* XXX Ignore the number since we would need some more + information to compute a real date. */ + do + ++rp; + while (*rp >= '0' && *rp <= '9'); + break; + case 'U': + get_number (0, 53, 2); + week_no = val; + have_uweek = 1; + break; + case 'W': + get_number (0, 53, 2); + week_no = val; + have_wweek = 1; + break; + case 'V': + get_number (0, 53, 2); + /* XXX This cannot determine any field in TM without some + information. */ + break; + case 'w': + /* Match number of weekday. */ + get_number (0, 6, 1); + tm->tm_wday = val; + have_wday = 1; + break; + case 'y': + match_year_in_century: + /* Match year within century. */ + get_number (0, 99, 2); + /* The "Year 2000: The Millennium Rollover" paper suggests that + values in the range 69-99 refer to the twentieth century. */ + tm->tm_year = val >= 69 ? val : val + 100; + /* Indicate that we want to use the century, if specified. */ + want_century = 1; + want_xday = 1; + break; + case 'Y': + /* Match year including century number. */ + get_number (0, 9999, 4); + tm->tm_year = val - 1900; + want_century = 0; + want_xday = 1; + break; + case 'Z': + /* XXX How to handle this? */ + break; + case 'z': + /* We recognize two formats: if two digits are given, these + specify hours. If fours digits are used, minutes are + also specified. */ + { + bool neg; + int n; + + val = 0; + while (*rp == ' ') + ++rp; + if (*rp != '+' && *rp != '-') + return NULL; + neg = *rp++ == '-'; + n = 0; + while (n < 4 && *rp >= '0' && *rp <= '9') + { + val = val * 10 + *rp++ - '0'; + ++n; + } + if (n == 2) + val *= 100; + else if (n != 4) + /* Only two or four digits recognized. */ + return NULL; + else + { + /* We have to convert the minutes into decimal. */ + if (val % 100 >= 60) + return NULL; + val = (val / 100) * 100 + ((val % 100) * 50) / 30; + } + if (val > 1200) + return NULL; +#if defined _LIBC || HAVE_TM_GMTOFF + tm->tm_gmtoff = (val * 3600) / 100; + if (neg) + tm->tm_gmtoff = -tm->tm_gmtoff; +#endif + } + break; + case 'E': +#ifdef _NL_CURRENT + switch (*fmt++) + { + case 'c': + /* Match locale's alternate date and time format. */ + if (*decided != raw) + { + const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_T_FMT); + + if (*fmt == '\0') + fmt = _NL_CURRENT (LC_TIME, D_T_FMT); + + if (!recursive (fmt)) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (strcmp (fmt, HERE_D_T_FMT)) + *decided = loc; + want_xday = 1; + break; + } + *decided = raw; + } + /* The C locale has no era information, so use the + normal representation. */ + if (!recursive (HERE_D_T_FMT)) + return NULL; + want_xday = 1; + break; + case 'C': + if (*decided != raw) + { + if (era_cnt >= 0) + { + era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + if (era != NULL && match_string (era->era_name, rp)) + { + *decided = loc; + break; + } + else + return NULL; + } + + num_eras = _NL_CURRENT_WORD (LC_TIME, + _NL_TIME_ERA_NUM_ENTRIES); + for (era_cnt = 0; era_cnt < (int) num_eras; + ++era_cnt, rp = rp_backup) + { + era = _nl_select_era_entry (era_cnt + HELPER_LOCALE_ARG); + if (era != NULL && match_string (era->era_name, rp)) + { + *decided = loc; + break; + } + } + if (era_cnt != (int) num_eras) + break; + + era_cnt = -1; + if (*decided == loc) + return NULL; + + *decided = raw; + } + /* The C locale has no era information, so use the + normal representation. */ + goto match_century; + case 'y': + if (*decided != raw) + { + get_number(0, 9999, 4); + tm->tm_year = val; + want_era = 1; + want_xday = 1; + want_century = 1; + + if (era_cnt >= 0) + { + assert (*decided == loc); + + era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + bool match = false; + if (era != NULL) + { + int delta = ((tm->tm_year - era->offset) + * era->absolute_direction); + match = (delta >= 0 + && delta < (((int64_t) era->stop_date[0] + - (int64_t) era->start_date[0]) + * era->absolute_direction)); + } + if (! match) + return NULL; + + break; + } + + num_eras = _NL_CURRENT_WORD (LC_TIME, + _NL_TIME_ERA_NUM_ENTRIES); + for (era_cnt = 0; era_cnt < (int) num_eras; ++era_cnt) + { + era = _nl_select_era_entry (era_cnt + HELPER_LOCALE_ARG); + if (era != NULL) + { + int delta = ((tm->tm_year - era->offset) + * era->absolute_direction); + if (delta >= 0 + && delta < (((int64_t) era->stop_date[0] + - (int64_t) era->start_date[0]) + * era->absolute_direction)) + { + *decided = loc; + break; + } + } + } + if (era_cnt != (int) num_eras) + break; + + era_cnt = -1; + if (*decided == loc) + return NULL; + + *decided = raw; + } + + goto match_year_in_century; + case 'Y': + if (*decided != raw) + { + num_eras = _NL_CURRENT_WORD (LC_TIME, + _NL_TIME_ERA_NUM_ENTRIES); + for (era_cnt = 0; era_cnt < (int) num_eras; + ++era_cnt, rp = rp_backup) + { + era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + if (era != NULL && recursive (era->era_format)) + break; + } + if (era_cnt == (int) num_eras) + { + era_cnt = -1; + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + *decided = loc; + era_cnt = -1; + break; + } + + *decided = raw; + } + get_number (0, 9999, 4); + tm->tm_year = val - 1900; + want_century = 0; + want_xday = 1; + break; + case 'x': + if (*decided != raw) + { + const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_FMT); + + if (*fmt == '\0') + fmt = _NL_CURRENT (LC_TIME, D_FMT); + + if (!recursive (fmt)) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (strcmp (fmt, HERE_D_FMT)) + *decided = loc; + break; + } + *decided = raw; + } + if (!recursive (HERE_D_FMT)) + return NULL; + break; + case 'X': + if (*decided != raw) + { + const char *fmt = _NL_CURRENT (LC_TIME, ERA_T_FMT); + + if (*fmt == '\0') + fmt = _NL_CURRENT (LC_TIME, T_FMT); + + if (!recursive (fmt)) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (strcmp (fmt, HERE_T_FMT)) + *decided = loc; + break; + } + *decided = raw; + } + if (!recursive (HERE_T_FMT)) + return NULL; + break; + default: + return NULL; + } + break; +#else + /* We have no information about the era format. Just use + the normal format. */ + if (*fmt != 'c' && *fmt != 'C' && *fmt != 'y' && *fmt != 'Y' + && *fmt != 'x' && *fmt != 'X') + /* This is an illegal format. */ + return NULL; + + goto start_over; +#endif + case 'O': + switch (*fmt++) + { + case 'd': + case 'e': + /* Match day of month using alternate numeric symbols. */ + get_alt_number (1, 31, 2); + tm->tm_mday = val; + have_mday = 1; + want_xday = 1; + break; + case 'H': + /* Match hour in 24-hour clock using alternate numeric + symbols. */ + get_alt_number (0, 23, 2); + tm->tm_hour = val; + have_I = 0; + break; + case 'I': + /* Match hour in 12-hour clock using alternate numeric + symbols. */ + get_alt_number (1, 12, 2); + tm->tm_hour = val % 12; + have_I = 1; + break; + case 'm': + /* Match month using alternate numeric symbols. */ + get_alt_number (1, 12, 2); + tm->tm_mon = val - 1; + have_mon = 1; + want_xday = 1; + break; + case 'M': + /* Match minutes using alternate numeric symbols. */ + get_alt_number (0, 59, 2); + tm->tm_min = val; + break; + case 'S': + /* Match seconds using alternate numeric symbols. */ + get_alt_number (0, 61, 2); + tm->tm_sec = val; + break; + case 'U': + get_alt_number (0, 53, 2); + week_no = val; + have_uweek = 1; + break; + case 'W': + get_alt_number (0, 53, 2); + week_no = val; + have_wweek = 1; + break; + case 'V': + get_alt_number (0, 53, 2); + /* XXX This cannot determine any field in TM without + further information. */ + break; + case 'w': + /* Match number of weekday using alternate numeric symbols. */ + get_alt_number (0, 6, 1); + tm->tm_wday = val; + have_wday = 1; + break; + case 'y': + /* Match year within century using alternate numeric symbols. */ + get_alt_number (0, 99, 2); + tm->tm_year = val >= 69 ? val : val + 100; + want_xday = 1; + break; + default: + return NULL; + } + break; + default: + return NULL; + } + } + + if (have_I && is_pm) + tm->tm_hour += 12; + + if (century != -1) + { + if (want_century) + tm->tm_year = tm->tm_year % 100 + (century - 19) * 100; + else + /* Only the century, but not the year. Strange, but so be it. */ + tm->tm_year = (century - 19) * 100; + } + + if (era_cnt != -1) + { +#ifdef _NL_CURRENT + era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + if (era == NULL) + return NULL; + if (want_era) + tm->tm_year = (era->start_date[0] + + ((tm->tm_year - era->offset) + * era->absolute_direction)); + else + /* Era start year assumed. */ + tm->tm_year = era->start_date[0]; +#endif + } + else + if (want_era) + { + /* No era found but we have seen an E modifier. Rectify some + values. */ + if (want_century && century == -1 && tm->tm_year < 69) + tm->tm_year += 100; + } + + if (want_xday && !have_wday) + { + if ( !(have_mon && have_mday) && have_yday) + { + /* We don't have tm_mon and/or tm_mday, compute them. */ + int t_mon = 0; + while (__mon_yday[__isleap(1900 + tm->tm_year)][t_mon] <= tm->tm_yday) + t_mon++; + if (!have_mon) + tm->tm_mon = t_mon - 1; + if (!have_mday) + tm->tm_mday = + (tm->tm_yday + - __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1); + } + day_of_the_week (tm); + } + + if (want_xday && !have_yday) + day_of_the_year (tm); + + if ((have_uweek || have_wweek) && have_wday) + { + int save_wday = tm->tm_wday; + int save_mday = tm->tm_mday; + int save_mon = tm->tm_mon; + int w_offset = have_uweek ? 0 : 1; + + tm->tm_mday = 1; + tm->tm_mon = 0; + day_of_the_week (tm); + if (have_mday) + tm->tm_mday = save_mday; + if (have_mon) + tm->tm_mon = save_mon; + + if (!have_yday) + tm->tm_yday = ((7 - (tm->tm_wday - w_offset)) % 7 + + (week_no - 1) *7 + + save_wday - w_offset); + + if (!have_mday || !have_mon) + { + int t_mon = 0; + while (__mon_yday[__isleap(1900 + tm->tm_year)][t_mon] + <= tm->tm_yday) + t_mon++; + if (!have_mon) + tm->tm_mon = t_mon - 1; + if (!have_mday) + tm->tm_mday = + (tm->tm_yday + - __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1); + } + + tm->tm_wday = save_wday; + } + + return (char *) rp; +} + + +char * +strptime (buf, format, tm LOCALE_PARAM) + const char *restrict buf; + const char *restrict format; + struct tm *restrict tm; + LOCALE_PARAM_DECL +{ + enum ptime_locale_status decided; + +#ifdef _NL_CURRENT + decided = not; +#else + decided = raw; +#endif + return __strptime_internal (buf, format, tm, &decided, -1 LOCALE_ARG); +} + +#ifdef _LIBC +weak_alias (__strptime_l, strptime_l) +#endif diff --git a/lib/strtoimax.c b/lib/strtoimax.c new file mode 100644 index 0000000..ce873f7 --- /dev/null +++ b/lib/strtoimax.c @@ -0,0 +1,75 @@ +/* Convert string representation of a number into an intmax_t value. + + Copyright (C) 1999, 2001, 2002, 2003, 2004, 2006, 2009, 2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert. */ + +#include <config.h> + +/* Verify interface. */ +#include <inttypes.h> + +#include <stdlib.h> + +#include "verify.h" + +#ifdef UNSIGNED +# ifndef HAVE_DECL_STRTOULL +"this configure-time declaration test was not run" +# endif +# if !HAVE_DECL_STRTOULL && HAVE_UNSIGNED_LONG_LONG_INT +unsigned long long int strtoull (char const *, char **, int); +# endif + +#else + +# ifndef HAVE_DECL_STRTOLL +"this configure-time declaration test was not run" +# endif +# if !HAVE_DECL_STRTOLL && HAVE_LONG_LONG_INT +long long int strtoll (char const *, char **, int); +# endif +#endif + +#ifdef UNSIGNED +# define Have_long_long HAVE_UNSIGNED_LONG_LONG_INT +# define Int uintmax_t +# define Unsigned unsigned +# define strtoimax strtoumax +# define strtol strtoul +# define strtoll strtoull +#else +# define Have_long_long HAVE_LONG_LONG_INT +# define Int intmax_t +# define Unsigned +#endif + +Int +strtoimax (char const *ptr, char **endptr, int base) +{ +#if Have_long_long + verify (sizeof (Int) == sizeof (Unsigned long int) + || sizeof (Int) == sizeof (Unsigned long long int)); + + if (sizeof (Int) != sizeof (Unsigned long int)) + return strtoll (ptr, endptr, base); +#else + verify (sizeof (Int) == sizeof (Unsigned long int)); +#endif + + return strtol (ptr, endptr, base); +} diff --git a/lib/strtol.c b/lib/strtol.c new file mode 100644 index 0000000..e5b5a11 --- /dev/null +++ b/lib/strtol.c @@ -0,0 +1,434 @@ +/* Convert string representation of a number into an integer value. + + Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2005, + 2006, 2007, 2009, 2010 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C + Library. Bugs can be reported to bug-glibc@gnu.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 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 <http://www.gnu.org/licenses/>. */ + +#ifdef _LIBC +# define USE_NUMBER_GROUPING +#else +# include <config.h> +#endif + +#include <ctype.h> +#include <errno.h> +#ifndef __set_errno +# define __set_errno(Val) errno = (Val) +#endif + +#include <limits.h> +#include <stddef.h> +#include <stdlib.h> +#include <string.h> + +#ifdef USE_NUMBER_GROUPING +# include "../locale/localeinfo.h" +#endif + +/* Nonzero if we are defining `strtoul' or `strtoull', operating on + unsigned integers. */ +#ifndef UNSIGNED +# define UNSIGNED 0 +# define INT LONG int +#else +# define INT unsigned LONG int +#endif + +/* Determine the name. */ +#ifdef USE_IN_EXTENDED_LOCALE_MODEL +# if UNSIGNED +# ifdef USE_WIDE_CHAR +# ifdef QUAD +# define strtol __wcstoull_l +# else +# define strtol __wcstoul_l +# endif +# else +# ifdef QUAD +# define strtol __strtoull_l +# else +# define strtol __strtoul_l +# endif +# endif +# else +# ifdef USE_WIDE_CHAR +# ifdef QUAD +# define strtol __wcstoll_l +# else +# define strtol __wcstol_l +# endif +# else +# ifdef QUAD +# define strtol __strtoll_l +# else +# define strtol __strtol_l +# endif +# endif +# endif +#else +# if UNSIGNED +# ifdef USE_WIDE_CHAR +# ifdef QUAD +# define strtol wcstoull +# else +# define strtol wcstoul +# endif +# else +# ifdef QUAD +# define strtol strtoull +# else +# define strtol strtoul +# endif +# endif +# else +# ifdef USE_WIDE_CHAR +# ifdef QUAD +# define strtol wcstoll +# else +# define strtol wcstol +# endif +# else +# ifdef QUAD +# define strtol strtoll +# endif +# endif +# endif +#endif + +/* If QUAD is defined, we are defining `strtoll' or `strtoull', + operating on `long long int's. */ +#ifdef QUAD +# define LONG long long +# define STRTOL_LONG_MIN LLONG_MIN +# define STRTOL_LONG_MAX LLONG_MAX +# define STRTOL_ULONG_MAX ULLONG_MAX + +/* The extra casts in the following macros work around compiler bugs, + e.g., in Cray C 5.0.3.0. */ + +/* True if negative values of the signed integer type T use two's + complement, ones' complement, or signed magnitude representation, + respectively. Much GNU code assumes two's complement, but some + people like to be portable to all possible C hosts. */ +# define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) +# define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) +# define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) + +/* True if the arithmetic type T is signed. */ +# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + +/* The maximum and minimum values for the integer type T. These + macros have undefined behavior if T is signed and has padding bits. + If this is a problem for you, please let us know how to fix it for + your host. */ +# define TYPE_MINIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) 0 \ + : TYPE_SIGNED_MAGNITUDE (t) \ + ? ~ (t) 0 \ + : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +# define TYPE_MAXIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) -1 \ + : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) + +# ifndef ULLONG_MAX +# define ULLONG_MAX TYPE_MAXIMUM (unsigned long long) +# endif +# ifndef LLONG_MAX +# define LLONG_MAX TYPE_MAXIMUM (long long int) +# endif +# ifndef LLONG_MIN +# define LLONG_MIN TYPE_MINIMUM (long long int) +# endif + +# if __GNUC__ == 2 && __GNUC_MINOR__ < 7 + /* Work around gcc bug with using this constant. */ + static const unsigned long long int maxquad = ULLONG_MAX; +# undef STRTOL_ULONG_MAX +# define STRTOL_ULONG_MAX maxquad +# endif +#else +# define LONG long +# define STRTOL_LONG_MIN LONG_MIN +# define STRTOL_LONG_MAX LONG_MAX +# define STRTOL_ULONG_MAX ULONG_MAX +#endif + + +/* 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. */ +#ifdef USE_IN_EXTENDED_LOCALE_MODEL +# undef _NL_CURRENT +# define _NL_CURRENT(category, item) \ + (current->values[_NL_ITEM_INDEX (item)].string) +# define LOCALE_PARAM , loc +# define LOCALE_PARAM_PROTO , __locale_t loc +#else +# define LOCALE_PARAM +# define LOCALE_PARAM_PROTO +#endif + +#include <wchar.h> + +#ifdef USE_WIDE_CHAR +# include <wctype.h> +# define L_(Ch) L##Ch +# define UCHAR_TYPE wint_t +# define STRING_TYPE wchar_t +# ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define ISSPACE(Ch) __iswspace_l ((Ch), loc) +# define ISALPHA(Ch) __iswalpha_l ((Ch), loc) +# define TOUPPER(Ch) __towupper_l ((Ch), loc) +# else +# define ISSPACE(Ch) iswspace (Ch) +# define ISALPHA(Ch) iswalpha (Ch) +# define TOUPPER(Ch) towupper (Ch) +# endif +#else +# define L_(Ch) Ch +# define UCHAR_TYPE unsigned char +# define STRING_TYPE char +# ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define ISSPACE(Ch) __isspace_l ((Ch), loc) +# define ISALPHA(Ch) __isalpha_l ((Ch), loc) +# define TOUPPER(Ch) __toupper_l ((Ch), loc) +# else +# define ISSPACE(Ch) isspace (Ch) +# define ISALPHA(Ch) isalpha (Ch) +# define TOUPPER(Ch) toupper (Ch) +# endif +#endif + +#define INTERNAL(X) INTERNAL1(X) +#define INTERNAL1(X) __##X##_internal +#define WEAKNAME(X) WEAKNAME1(X) + +#ifdef USE_NUMBER_GROUPING +/* This file defines a function to check for correct grouping. */ +# include "grouping.h" +#endif + + + +/* Convert NPTR to an `unsigned long int' or `long int' in base BASE. + If BASE is 0 the base is determined by the presence of a leading + zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal. + If BASE is < 2 or > 36, it is reset to 10. + If ENDPTR is not NULL, a pointer to the character after the last + one converted is stored in *ENDPTR. */ + +INT +INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr, + int base, int group LOCALE_PARAM_PROTO) +{ + int negative; + register unsigned LONG int cutoff; + register unsigned int cutlim; + register unsigned LONG int i; + register const STRING_TYPE *s; + register UCHAR_TYPE c; + const STRING_TYPE *save, *end; + int overflow; + +#ifdef USE_NUMBER_GROUPING +# ifdef USE_IN_EXTENDED_LOCALE_MODEL + struct locale_data *current = loc->__locales[LC_NUMERIC]; +# endif + /* The thousands character of the current locale. */ + wchar_t thousands = L'\0'; + /* The numeric grouping specification of the current locale, + in the format described in <locale.h>. */ + const char *grouping; + + if (group) + { + grouping = _NL_CURRENT (LC_NUMERIC, GROUPING); + if (*grouping <= 0 || *grouping == CHAR_MAX) + grouping = NULL; + else + { + /* Figure out the thousands separator character. */ +# if defined _LIBC || defined _HAVE_BTOWC + thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP)); + if (thousands == WEOF) + thousands = L'\0'; +# endif + if (thousands == L'\0') + grouping = NULL; + } + } + else + grouping = NULL; +#endif + + if (base < 0 || base == 1 || base > 36) + { + __set_errno (EINVAL); + return 0; + } + + save = s = nptr; + + /* Skip white space. */ + while (ISSPACE (*s)) + ++s; + if (*s == L_('\0')) + goto noconv; + + /* Check for a sign. */ + if (*s == L_('-')) + { + negative = 1; + ++s; + } + else if (*s == L_('+')) + { + negative = 0; + ++s; + } + else + negative = 0; + + /* Recognize number prefix and if BASE is zero, figure it out ourselves. */ + if (*s == L_('0')) + { + if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X')) + { + s += 2; + base = 16; + } + else if (base == 0) + base = 8; + } + else if (base == 0) + base = 10; + + /* Save the pointer so we can check later if anything happened. */ + save = s; + +#ifdef USE_NUMBER_GROUPING + if (group) + { + /* Find the end of the digit string and check its grouping. */ + end = s; + for (c = *end; c != L_('\0'); c = *++end) + if ((wchar_t) c != thousands + && ((wchar_t) c < L_('0') || (wchar_t) c > L_('9')) + && (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base)) + break; + if (*s == thousands) + end = s; + else + end = correctly_grouped_prefix (s, end, thousands, grouping); + } + else +#endif + end = NULL; + + cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base; + cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base; + + overflow = 0; + i = 0; + for (c = *s; c != L_('\0'); c = *++s) + { + if (s == end) + break; + if (c >= L_('0') && c <= L_('9')) + c -= L_('0'); + else if (ISALPHA (c)) + c = TOUPPER (c) - L_('A') + 10; + else + break; + if ((int) c >= base) + break; + /* Check for overflow. */ + if (i > cutoff || (i == cutoff && c > cutlim)) + overflow = 1; + else + { + i *= (unsigned LONG int) base; + i += c; + } + } + + /* Check if anything actually happened. */ + if (s == save) + goto noconv; + + /* Store in ENDPTR the address of one character + past the last character we converted. */ + if (endptr != NULL) + *endptr = (STRING_TYPE *) s; + +#if !UNSIGNED + /* Check for a value that is within the range of + `unsigned LONG int', but outside the range of `LONG int'. */ + if (overflow == 0 + && i > (negative + ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1 + : (unsigned LONG int) STRTOL_LONG_MAX)) + overflow = 1; +#endif + + if (overflow) + { + __set_errno (ERANGE); +#if UNSIGNED + return STRTOL_ULONG_MAX; +#else + return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX; +#endif + } + + /* Return the result of the appropriate sign. */ + return negative ? -i : i; + +noconv: + /* We must handle a special case here: the base is 0 or 16 and the + first two characters are '0' and 'x', but the rest are no + hexadecimal digits. This is no error case. We return 0 and + ENDPTR points to the `x`. */ + if (endptr != NULL) + { + if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X') + && save[-2] == L_('0')) + *endptr = (STRING_TYPE *) &save[-1]; + else + /* There was no number to convert. */ + *endptr = (STRING_TYPE *) nptr; + } + + return 0L; +} + +/* External user entry point. */ + + +INT +#ifdef weak_function +weak_function +#endif +strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr, + int base LOCALE_PARAM_PROTO) +{ + return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM); +} diff --git a/lib/strtoll.c b/lib/strtoll.c new file mode 100644 index 0000000..8d25b0c --- /dev/null +++ b/lib/strtoll.c @@ -0,0 +1,33 @@ +/* Function to parse a `long long int' from text. + Copyright (C) 1995, 1996, 1997, 1999, 2001, 2009, 2010 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 <http://www.gnu.org/licenses/>. */ + +#define QUAD 1 + +#include <strtol.c> + +#ifdef _LIBC +# ifdef SHARED +# include <shlib-compat.h> + +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) +compat_symbol (libc, __strtoll_internal, __strtoq_internal, GLIBC_2_0); +# endif + +# endif +weak_alias (strtoll, strtoq) +#endif diff --git a/lib/strtoul.c b/lib/strtoul.c new file mode 100644 index 0000000..def103f --- /dev/null +++ b/lib/strtoul.c @@ -0,0 +1,19 @@ +/* Copyright (C) 1991, 1997, 2009, 2010 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 <http://www.gnu.org/licenses/>. */ + +#define UNSIGNED 1 + +#include "strtol.c" diff --git a/lib/strtoull.c b/lib/strtoull.c new file mode 100644 index 0000000..d4e65e3 --- /dev/null +++ b/lib/strtoull.c @@ -0,0 +1,27 @@ +/* Function to parse an `unsigned long long int' from text. + Copyright (C) 1995, 1996, 1997, 1999, 2009, 2010 Free Software Foundation, + Inc. + NOTE: The canonical source of this file is maintained with the GNU C + Library. Bugs can be reported to bug-glibc@gnu.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 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 <http://www.gnu.org/licenses/>. */ + +#define QUAD 1 + +#include "strtoul.c" + +#ifdef _LIBC +strong_alias (__strtoull_internal, __strtouq_internal) +weak_alias (strtoull, strtouq) +#endif diff --git a/lib/strtoumax.c b/lib/strtoumax.c new file mode 100644 index 0000000..dc395d6 --- /dev/null +++ b/lib/strtoumax.c @@ -0,0 +1,2 @@ +#define UNSIGNED 1 +#include "strtoimax.c" diff --git a/lib/sys_stat.in.h b/lib/sys_stat.in.h new file mode 100644 index 0000000..fca0b21 --- /dev/null +++ b/lib/sys_stat.in.h @@ -0,0 +1,642 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Provide a more complete sys/stat header file. + Copyright (C) 2005-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* 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 + +#if defined __need_system_sys_stat_h +/* Special invocation convention. */ + +#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SYS_STAT_H + +/* Get nlink_t. */ +#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 _GL_SYS_STAT_H +#define _GL_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(). */ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# include <io.h> /* mingw32, mingw64 */ +# include <direct.h> /* mingw64 */ +#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_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 @REPLACE_FSTAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# 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); + + +#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 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@ +# if @REPLACE_FUTIMENS@ +# 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 +_GL_CXXALIASWARN (futimens); +#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 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 __WIN32__) && ! defined __CYGWIN__ + +static inline int +rpl_mkdir (char const *name, mode_t mode) +{ + return _mkdir (name); +} + +# 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 +_GL_CXXALIAS_SYS (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@ +/* 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. */ +# undef stat +# ifdef _LARGE_FILES + /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, + so we have to replace stat64() instead of stat(). */ +# define stat stat64 +# undef stat64 +# define stat64(name, st) rpl_stat (name, st) +# else /* !_LARGE_FILES */ +# define stat(name, st) rpl_stat (name, st) +# endif /* !_LARGE_FILES */ +_GL_EXTERN_C int stat (const char *name, struct stat *buf) _GL_ARG_NONNULL ((1, 2)); +# endif +#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@ +# if @REPLACE_UTIMENSAT@ +# 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 +_GL_CXXALIASWARN (utimensat); +#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/lib/sys_time.in.h b/lib/sys_time.in.h new file mode 100644 index 0000000..ea9bb26 --- /dev/null +++ b/lib/sys_time.in.h @@ -0,0 +1,97 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Provide a more complete sys/time.h. + + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Paul Eggert. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined _GL_SYS_TIME_H + +/* Simply delegate to the system's header, without adding anything. */ +# if @HAVE_SYS_TIME_H@ +# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ +# endif + +#else + +# define _GL_SYS_TIME_H + +# if @HAVE_SYS_TIME_H@ +# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ +# else +# include <time.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@ +struct timeval +{ + time_t tv_sec; + long int tv_usec; +}; +# 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); +# 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 + +#endif /* _GL_SYS_TIME_H */ diff --git a/lib/sys_wait.in.h b/lib/sys_wait.in.h new file mode 100644 index 0000000..0451b06 --- /dev/null +++ b/lib/sys_wait.in.h @@ -0,0 +1,108 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A POSIX-like <sys/wait.h>. + Copyright (C) 2001-2003, 2005-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + + +#ifndef _GL_SYS_WAIT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +# @INCLUDE_NEXT@ @NEXT_SYS_WAIT_H@ +#endif + +#ifndef _GL_SYS_WAIT_H +#define _GL_SYS_WAIT_H + +#if !((defined _WIN32 || 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 + +/* True if the process dumped core. Not standardized by POSIX. */ +# ifndef WCOREDUMP +# define WCOREDUMP(x) ((x) & 0x80) +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +/* Declarations of functions. */ + +# ifdef __cplusplus +} +# endif + +#else +/* Native Windows API. */ + +# include <process.h> + +# define waitpid(pid,statusp,options) _cwait (statusp, pid, WAIT_CHILD) + +/* 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 core dumps. */ +# define WCOREDUMP(x) 0 + +#endif + +#endif /* _GL_SYS_WAIT_H */ +#endif /* _GL_SYS_WAIT_H */ diff --git a/lib/tempname.c b/lib/tempname.c new file mode 100644 index 0000000..134908b --- /dev/null +++ b/lib/tempname.c @@ -0,0 +1,311 @@ +/* tempname.c - generate the name of a temporary file. + + Copyright (C) 1991-2003, 2005-2007, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* 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 __gen_tempname gen_tempname +# define __getpid getpid +# define __gettimeofday gettimeofday +# define __mkdir mkdir +# define __open open +# define __open64 open +# define __lxstat64(version, file, buf) lstat (file, buf) +# define __xstat64(version, file, buf) stat (file, buf) +#endif + +#if ! (HAVE___SECURE_GETENV || _LIBC) +# define __secure_getenv getenv +#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"; + +/* 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 len; + char *XXXXXX; + static uint64_t value; + uint64_t random_time_bits; + unsigned int count; + int fd = -1; + int save_errno = errno; + struct_stat64 st; + + /* 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 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]; + + switch (kind) + { + case __GT_FILE: + fd = __open (tmpl, + (flags & ~O_ACCMODE) + | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); + break; + + case __GT_DIR: + fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR); + break; + + case __GT_NOCREATE: + /* This case is backward from the other three. __gen_tempname + succeeds if __xstat fails because the name does not exist. + Note the continue to bypass the common logic at the bottom + of the loop. */ + if (__lxstat64 (_STAT_VER, tmpl, &st) < 0) + { + if (errno == ENOENT) + { + __set_errno (save_errno); + return 0; + } + else + /* Give up now. */ + return -1; + } + continue; + + default: + assert (! "invalid KIND in __gen_tempname"); + abort (); + } + + 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; +} diff --git a/lib/tempname.h b/lib/tempname.h new file mode 100644 index 0000000..349bc36 --- /dev/null +++ b/lib/tempname.h @@ -0,0 +1,50 @@ +/* Create a temporary file or directory. + + Copyright (C) 2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* 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 + +/* 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); + +#endif /* GL_TEMPNAME_H */ diff --git a/lib/time.in.h b/lib/time.in.h new file mode 100644 index 0000000..6863bc0 --- /dev/null +++ b/lib/time.in.h @@ -0,0 +1,221 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A more-standard <time.h>. + + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#if __GNUC__ >= 3 +@PRAGMA_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. 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 _GL_TIME_H) + +# @INCLUDE_NEXT@ @NEXT_TIME_H@ + +#else + +# define _GL_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, Ultrix 4.3). + Or they define it with the wrong member names or define it in <sys/time.h> + (e.g., FreeBSD circa 1997). */ +# if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@ +# if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +# include <sys/time.h> +# else + +# ifdef __cplusplus +extern "C" { +# endif + +# undef timespec +# define timespec rpl_timespec +struct timespec +{ + time_t tv_sec; + long int tv_nsec; +}; + +# ifdef __cplusplus +} +# endif + +# endif +# 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 + +/* 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_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 +_GL_CXXALIASWARN (localtime_r); +# 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_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 +_GL_CXXALIASWARN (gmtime_r); +# endif + +/* Parse BUF as a time stamp, 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 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/lib/time_r.c b/lib/time_r.c new file mode 100644 index 0000000..ff0a527 --- /dev/null +++ b/lib/time_r.c @@ -0,0 +1,47 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Reentrant time functions like localtime_r. + + Copyright (C) 2003, 2006-2007, 2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* 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/lib/timegm.c b/lib/timegm.c new file mode 100644 index 0000000..f39756b --- /dev/null +++ b/lib/timegm.c @@ -0,0 +1,41 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Convert UTC calendar time to simple time. Like mktime but assumes UTC. + + Copyright (C) 1994, 1997, 2003, 2004, 2006, 2007, 2009, 2010 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _LIBC +# include <config.h> +#endif + +#include <time.h> + +#ifndef _LIBC +# undef __gmtime_r +# define __gmtime_r gmtime_r +# define __mktime_internal mktime_internal +# include "mktime-internal.h" +#endif + +time_t +timegm (struct tm *tmp) +{ + static time_t gmtime_offset; + tmp->tm_isdst = 0; + return __mktime_internal (tmp, __gmtime_r, &gmtime_offset); +} diff --git a/lib/timespec.h b/lib/timespec.h new file mode 100644 index 0000000..81b3423 --- /dev/null +++ b/lib/timespec.h @@ -0,0 +1,39 @@ +/* timespec -- System time interface + + Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 ! defined TIMESPEC_H +# define TIMESPEC_H + +# include <time.h> + +/* Return negative, zero, positive if A < B, A == B, A > B, respectively. + Assume the nanosecond components are in range, or close to it. */ +static inline int +timespec_cmp (struct timespec a, struct timespec b) +{ + return (a.tv_sec < b.tv_sec ? -1 + : a.tv_sec > b.tv_sec ? 1 + : a.tv_nsec < b.tv_nsec ? -1 + : a.tv_nsec > b.tv_nsec ? 1 + : 0); +} + +void gettime (struct timespec *); +int settime (struct timespec const *); + +#endif diff --git a/lib/trim.c b/lib/trim.c new file mode 100644 index 0000000..c8b0c7f --- /dev/null +++ b/lib/trim.c @@ -0,0 +1,133 @@ +/* Removes leading and/or trailing whitespaces + Copyright (C) 2006-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Davide Angelocola <davide.angelocola@gmail.com> */ + +#include <config.h> + +/* Specification. */ +#include "trim.h" + +#include <ctype.h> +#include <string.h> +#include <stddef.h> +#include <stdlib.h> + +#include "mbchar.h" +#include "mbiter.h" +#include "xalloc.h" + +/* Use this to suppress gcc's `...may be used before initialized' warnings. */ +#ifdef lint +# define IF_LINT(Code) Code +#else +# define IF_LINT(Code) /* empty */ +#endif + +char * +trim2 (const char *s, int how) +{ + char *d; + + d = strdup (s); + + if (!d) + xalloc_die (); + + if (MB_CUR_MAX > 1) + { + mbi_iterator_t i; + + /* Trim leading whitespaces. */ + if (how != TRIM_TRAILING) + { + mbi_init (i, d, strlen (d)); + + for (; mbi_avail (i) && mb_isspace (mbi_cur (i)); mbi_advance (i)) + ; + + memmove (d, mbi_cur_ptr (i), strlen (mbi_cur_ptr (i)) + 1); + } + + /* Trim trailing whitespaces. */ + if (how != TRIM_LEADING) + { + int state = 0; + char *r IF_LINT (= NULL); /* used only while state = 2 */ + + mbi_init (i, d, strlen (d)); + + for (; mbi_avail (i); mbi_advance (i)) + { + if (state == 0 && mb_isspace (mbi_cur (i))) + { + state = 0; + continue; + } + + if (state == 0 && !mb_isspace (mbi_cur (i))) + { + state = 1; + continue; + } + + if (state == 1 && !mb_isspace (mbi_cur (i))) + { + state = 1; + continue; + } + + if (state == 1 && mb_isspace (mbi_cur (i))) + { + state = 2; + r = (char *) mbi_cur_ptr (i); + } + else if (state == 2 && mb_isspace (mbi_cur (i))) + { + state = 2; + } + else + { + state = 1; + } + } + + if (state == 2) + *r = '\0'; + } + } + else + { + char *p; + + /* Trim leading whitespaces. */ + if (how != TRIM_TRAILING) { + for (p = d; *p && isspace ((unsigned char) *p); p++) + ; + + memmove (d, p, strlen (p) + 1); + } + + /* Trim trailing whitespaces. */ + if (how != TRIM_LEADING) { + for (p = d + strlen (d) - 1; p >= d && isspace ((unsigned char) *p); p--) + *p = '\0'; + } + } + + return d; +} + diff --git a/lib/trim.h b/lib/trim.h new file mode 100644 index 0000000..aa777e4 --- /dev/null +++ b/lib/trim.h @@ -0,0 +1,33 @@ +/* Removes leading and/or trailing whitespaces + Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Davide Angelocola <davide.angelocola@gmail.com> */ + +/* Trim mode. */ +#define TRIM_TRAILING 0 +#define TRIM_LEADING 1 +#define TRIM_BOTH 2 + +/* Removes trailing and leading whitespaces. */ +#define trim(s) trim2(s, TRIM_BOTH) + +/* Removes trailing whitespaces. */ +#define trim_trailing(s) trim2(s, TRIM_TRAILING) + +/* Removes leading whitespaces. */ +#define trim_leading(s) trim2(s, TRIM_LEADING) + +char *trim2 (const char *, int); diff --git a/lib/uinttostr.c b/lib/uinttostr.c new file mode 100644 index 0000000..1662985 --- /dev/null +++ b/lib/uinttostr.c @@ -0,0 +1,4 @@ +#define inttostr uinttostr +#define inttype unsigned int +#define inttype_is_signed 0 +#include "inttostr.c" diff --git a/lib/umaxtostr.c b/lib/umaxtostr.c new file mode 100644 index 0000000..914f388 --- /dev/null +++ b/lib/umaxtostr.c @@ -0,0 +1,4 @@ +#define inttostr umaxtostr +#define inttype uintmax_t +#define inttype_is_signed 0 +#include "inttostr.c" diff --git a/lib/unistd.in.h b/lib/unistd.in.h new file mode 100644 index 0000000..5a11062 --- /dev/null +++ b/lib/unistd.in.h @@ -0,0 +1,1294 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Substitute for and wrapper around <unistd.h>. + Copyright (C) 2003-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* Special invocation convention: + - On mingw, several headers, including <winsock2.h>, include <unistd.h>, + but we need to ensure that both the system <unistd.h> and <winsock2.h> + are completely included before we replace gethostname. */ +#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ + && !defined _GL_WINSOCK2_H_WITNESS && defined _WINSOCK2_H +/* <unistd.h> is being indirectly included for the first time from + <winsock2.h>; avoid declaring any overrides. */ +# if @HAVE_UNISTD_H@ +# @INCLUDE_NEXT@ @NEXT_UNISTD_H@ +# else +# error unexpected; report this to bug-gnulib@gnu.org +# endif +# define _GL_WINSOCK2_H_WITNESS + +/* Normal invocation. */ +#elif !defined _GL_UNISTD_H + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_UNISTD_H@ +# @INCLUDE_NEXT@ @NEXT_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 _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>. */ +/* 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_SYMLINKAT@ || defined GNULIB_POSIXCHECK)) \ + && ! 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 __GLIBC__ +# include <fcntl.h> +#endif + +/* mingw fails to declare _exit in <unistd.h>. */ +/* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ +/* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#ifndef __GLIBC__ +# include <stdlib.h> +#endif + +/* mingw declares getcwd in <io.h>, not in <unistd.h>. */ +#if ((@GNULIB_GETCWD@ || defined GNULIB_POSIXCHECK) \ + && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) +# include <io.h> +#endif + +#if (@GNULIB_WRITE@ || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \ + || @GNULIB_PREAD@ || defined GNULIB_POSIXCHECK) +/* Get ssize_t. */ +# include <sys/types.h> +#endif + +/* Get getopt(), optarg, optind, opterr, optopt. + But avoid namespace pollution on glibc systems. */ +#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT +# include <getopt.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. */ + + +#if @GNULIB_GETHOSTNAME@ +/* Get all possible declarations of gethostname(). */ +# if @UNISTD_H_HAVE_WINSOCK2_H@ +# 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 + + +/* 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_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:2001 specification + <http://www.opengroup.org/susv3xsh/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 @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); + + +#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:2001 specification + <http://www.opengroup.org/susv3xsh/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 + <http://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 !@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 <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 +static inline char *** +rpl_environ (void) +{ + return &environ; +} +_GL_WARN_ON_USE (rpl_environ, "environ is unportable - " + "use gnulib module environ for portability"); +# 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 !@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)); +_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:2001 specification + <http://www.opengroup.org/susv3xsh/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); + +# 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_FSYNC@ +/* Synchronize changes to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2001 specification + <http://www.opengroup.org/susv3xsh/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:2001 specification + <http://www.opengroup.org/susv3xsh/ftruncate.html>. */ +# if !@HAVE_FTRUNCATE@ +_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); +# endif +_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); +_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:2001 specification + <http://www.opengroup.org/susv3xsh/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 !@HAVE_GETDOMAINNAME@ +_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on MacOS X 10.5 systems, the second parameter is + int len. */ +_GL_CXXALIAS_SYS_CAST (getdomainname, int, (char *name, size_t len)); +_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 !@HAVE_GETDTABLESIZE@ +_GL_FUNCDECL_SYS (getdtablesize, int, (void)); +# endif +_GL_CXXALIAS_SYS (getdtablesize, int, (void)); +_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 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_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 !@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)); +_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 +static inline int +getpagesize () +{ + return _gl_getpagesize (); +} +# 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_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_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:2001 specification + <http://www.opengroup.org/susv3xsh/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:2001 specification + <http://www.opengroup.org/susv3xsh/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:2001 specification + <http://www.opengroup.org/susv3xsh/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_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 + <http://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:2001 + specification <http://www.opengroup.org/susv3xsh/pread.html>. */ +# if @REPLACE_PREAD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# 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_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:2001 specification + <http://www.opengroup.org/susv3xsh/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 !@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)); +_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 symlinkat 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_SLEEP@ +/* Pause the execution of the current thread for N seconds. + Returns the number of seconds left to sleep. + See the POSIX:2001 specification + <http://www.opengroup.org/susv3xsh/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 !@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)); +_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_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_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/sleep.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:2001 specification + <http://www.opengroup.org/susv3xsh/write.html>. */ +# if @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@ +# 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 + + +#endif /* _GL_UNISTD_H */ +#endif /* _GL_UNISTD_H */ diff --git a/lib/unitypes.h b/lib/unitypes.h new file mode 100644 index 0000000..61571c3 --- /dev/null +++ b/lib/unitypes.h @@ -0,0 +1,28 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Elementary types for the GNU UniString library. + Copyright (C) 2002, 2005-2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General 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 _UNITYPES_H +#define _UNITYPES_H + +/* Get uint8_t, uint16_t, uint32_t. */ +#include <stdint.h> + +/* Type representing a Unicode character. */ +typedef uint32_t ucs4_t; + +#endif /* _UNITYPES_H */ diff --git a/lib/uniwidth.h b/lib/uniwidth.h new file mode 100644 index 0000000..30e1923 --- /dev/null +++ b/lib/uniwidth.h @@ -0,0 +1,67 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Display width functions. + Copyright (C) 2001-2002, 2005, 2007, 2009-2010 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General 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 _UNIWIDTH_H +#define _UNIWIDTH_H + +#include "unitypes.h" + +/* Get size_t. */ +#include <stddef.h> + +/* Get locale_charset() declaration. */ +#include "localcharset.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Display width. */ + +/* These functions are locale dependent. The encoding argument identifies + the encoding (e.g. "ISO-8859-2" for Polish). */ + +/* Determine number of column positions required for UC. */ +extern int + uc_width (ucs4_t uc, const char *encoding); + +/* Determine number of column positions required for first N units + (or fewer if S ends before this) in S. */ +extern int + u8_width (const uint8_t *s, size_t n, const char *encoding); +extern int + u16_width (const uint16_t *s, size_t n, const char *encoding); +extern int + u32_width (const uint32_t *s, size_t n, const char *encoding); + +/* Determine number of column positions required for S. */ +extern int + u8_strwidth (const uint8_t *s, const char *encoding); +extern int + u16_strwidth (const uint16_t *s, const char *encoding); +extern int + u32_strwidth (const uint32_t *s, const char *encoding); + + +#ifdef __cplusplus +} +#endif + +#endif /* _UNIWIDTH_H */ diff --git a/lib/uniwidth/cjk.h b/lib/uniwidth/cjk.h new file mode 100644 index 0000000..c2b69cc --- /dev/null +++ b/lib/uniwidth/cjk.h @@ -0,0 +1,39 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test for CJK encoding. + Copyright (C) 2001-2002, 2005-2007, 2009-2010 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General 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 "streq.h" + +static int +is_cjk_encoding (const char *encoding) +{ + if (0 + /* Legacy Japanese encodings */ + || STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0) + /* Legacy Chinese encodings */ + || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) + || STREQ (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0) + || STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0) + || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0) + /* Legacy Korean encodings */ + || STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + || STREQ (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0) + || STREQ (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0)) + return 1; + return 0; +} diff --git a/lib/uniwidth/width.c b/lib/uniwidth/width.c new file mode 100644 index 0000000..2dba811 --- /dev/null +++ b/lib/uniwidth/width.c @@ -0,0 +1,361 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Determine display width of Unicode character. + Copyright (C) 2001-2002, 2006-2010 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General 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> + +/* Specification. */ +#include "uniwidth.h" + +#include "cjk.h" + +/* + * Non-spacing attribute table. + * Consists of: + * - Non-spacing characters; generated from PropList.txt or + * "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt" + * - Format control characters; generated from + * "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt" + * - Zero width characters; generated from + * "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt" + */ +static const unsigned char nonspacing_table_data[26*64] = { + /* 0x0000-0x01ff */ + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */ + 0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */ + /* 0x0200-0x03ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */ + /* 0x0400-0x05ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */ + 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */ + 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */ + 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */ + /* 0x0600-0x07ff */ + 0x0f, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */ + 0x00, 0xf8, 0xff, 0x7f, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */ + 0x00, 0x00, 0xc0, 0xff, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */ + 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */ + 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */ + 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */ + /* 0x0800-0x09ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0800-0x083f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08c0-0x08ff */ + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0900-0x093f */ + 0xfe, 0x21, 0x1e, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */ + 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */ + /* 0x0a00-0x0bff */ + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */ + 0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */ + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */ + 0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */ + 0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */ + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */ + 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */ + /* 0x0c00-0x0dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */ + 0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */ + 0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */ + 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */ + 0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */ + /* 0x0e00-0x0fff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */ + 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */ + 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */ + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */ + 0xdf, 0x00, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */ + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */ + /* 0x1000-0x11ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */ + 0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */ + 0x64, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */ + /* 0x1200-0x13ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */ + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */ + /* 0x1600-0x17ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */ + 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */ + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */ + 0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */ + /* 0x1800-0x19ff */ + 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */ + /* 0x1a00-0x1bff */ + 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a40-0x1a7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a80-0x1abf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */ + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */ + 0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */ + 0x03, 0x00, 0x00, 0x00, 0x3c, 0x03, 0x00, 0x00, /* 0x1b80-0x1bbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc0-0x1bff */ + /* 0x1c00-0x1dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cc0-0x1cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */ + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xc0, /* 0x1dc0-0x1dff */ + /* 0x2000-0x21ff */ + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */ + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, /* 0x2040-0x207f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */ + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */ + /* 0x2c00-0x2dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2cc0-0x2cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d40-0x2d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */ + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */ + /* 0x3000-0x31ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, /* 0x3000-0x303f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */ + 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */ + /* 0xa600-0xa7ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x30, /* 0xa640-0xa67f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa6c0-0xa6ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */ + /* 0xa800-0xa9ff */ + 0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */ + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8c0-0xa8ff */ + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */ + 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa980-0xa9bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */ + /* 0xaa00-0xabff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */ + 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa40-0xaa7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa80-0xaabf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaac0-0xaaff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xabc0-0xabff */ + /* 0xfa00-0xfbff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */ + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */ + /* 0xfe00-0xffff */ + 0xff, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, /* 0xfe00-0xfe3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */ + /* 0x10000-0x101ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */ + /* 0x10a00-0x10bff */ + 0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */ + /* 0x1d000-0x1d1ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xf8, /* 0x1d140-0x1d17f */ + 0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */ + /* 0x1d200-0x1d3ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */ + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x1d3c0-0x1d3ff */ +}; +static const signed char nonspacing_table_ind[240] = { + 0, 1, 2, 3, 4, 5, 6, 7, /* 0x0000-0x0fff */ + 8, 9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */ + 14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */ + 16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */ + -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */ + -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */ + 22, -1, -1, -1, -1, 23, -1, -1, /* 0x10000-0x10fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x11000-0x11fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x16000-0x16fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1b000-0x1bfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */ + 24, 25, -1, -1, -1, -1, -1, -1 /* 0x1d000-0x1dfff */ +}; + +/* Determine number of column positions required for UC. */ +int +uc_width (ucs4_t uc, const char *encoding) +{ + /* Test for non-spacing or control character. */ + if ((uc >> 9) < 240) + { + int ind = nonspacing_table_ind[uc >> 9]; + if (ind >= 0) + if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1) + { + if (uc > 0 && uc < 0xa0) + return -1; + else + return 0; + } + } + else if ((uc >> 9) == (0xe0000 >> 9)) + { + if (uc >= 0xe0100) + { + if (uc <= 0xe01ef) + return 0; + } + else + { + if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001) + return 0; + } + } + /* Test for double-width character. + * Generated from "grep '^....;[WF]' EastAsianWidth.txt" + * and "grep '^....;[^WF]' EastAsianWidth.txt" + */ + if (uc >= 0x1100 + && ((uc < 0x1160) /* Hangul Jamo */ + || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */ + || (uc >= 0x2e80 && uc < 0xa4d0 /* CJK ... Yi */ + && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00)) + || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */ + || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */ + || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */ + || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */ + || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */ + || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */ + || (uc >= 0x20000 && uc <= 0x2a6d6) /* CJK */ + || (uc >= 0x2f800 && uc <= 0x2fa1d) /* CJK Compatibility Ideographs */ + ) ) + return 2; + /* In ancient CJK encodings, Cyrillic and most other characters are + double-width as well. */ + if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9 + && is_cjk_encoding (encoding)) + return 2; + return 1; +} diff --git a/lib/unlocked-io.h b/lib/unlocked-io.h new file mode 100644 index 0000000..75bf89f --- /dev/null +++ b/lib/unlocked-io.h @@ -0,0 +1,136 @@ +/* Prefer faster, non-thread-safe stdio functions if available. + + Copyright (C) 2001-2004, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* 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/lib/verify.h b/lib/verify.h new file mode 100644 index 0000000..bcd3f5a --- /dev/null +++ b/lib/verify.h @@ -0,0 +1,140 @@ +/* Compile-time assert-like macros. + + Copyright (C) 2005-2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ + +#ifndef VERIFY_H +# define VERIFY_H 1 + +/* 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. + + Symbols ending in "__" are private to this header. + + The code below uses several ideas. + + * 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 verify_type__ { unsigned int verify_error_if_negative_size__: 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 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. + + 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 verify_type__ {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern void dummy (int [sizeof (struct verify_type__ {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + extern int (*dummy (void)) [sizeof (struct 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 {...})]; + + * This implementation exploits the fact that GCC does not warn about + the last declaration mentioned above. If a future version of GCC + introduces a warning for this, the problem could be worked around + by using code specialized to GCC, e.g.,: + + #if 4 <= __GNUC__ + # define verify(R) \ + extern int (* verify_function__ (void)) \ + [__builtin_constant_p (R) && (R) ? 1 : -1] + #endif + + * In C++, any struct definition inside sizeof is invalid. + Use a template type to work around the problem. */ + + +/* Verify requirement R at compile-time, as an integer constant expression. + Return 1. */ + +# ifdef __cplusplus +template <int w> + struct verify_type__ { unsigned int verify_error_if_negative_size__: w; }; +# define verify_true(R) \ + (!!sizeof (verify_type__<(R) ? 1 : -1>)) +# else +# define verify_true(R) \ + (!!sizeof \ + (struct { unsigned int verify_error_if_negative_size__: (R) ? 1 : -1; })) +# endif + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. */ + +# define verify(R) extern int (* verify_function__ (void)) [verify_true (R)] + +#endif diff --git a/lib/version-etc-fsf.c b/lib/version-etc-fsf.c new file mode 100644 index 0000000..fc837a8 --- /dev/null +++ b/lib/version-etc-fsf.c @@ -0,0 +1,30 @@ +/* Variable with FSF copyright information, for version-etc. + Copyright (C) 1999-2006, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* 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/lib/version-etc.c b/lib/version-etc.c new file mode 100644 index 0000000..19c873d --- /dev/null +++ b/lib/version-etc.c @@ -0,0 +1,258 @@ +/* Print --version and bug-reporting information in a consistent format. + Copyright (C) 1999-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Jim Meyering. */ + +#include <config.h> + +/* Specification. */ +#include "version-etc.h" + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.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 = 2010 }; + +/* 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 <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\ +\n\ +"), + stream); + + switch (n_authors) + { + case 0: + /* The caller must provide at least one author name. */ + abort (); + 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: <http://www.gnu.org/software/%s/>\n"), + PACKAGE_NAME, PACKAGE); +#endif + fputs (_("General help using GNU software: <http://www.gnu.org/gethelp/>\n"), + stdout); +} diff --git a/lib/version-etc.h b/lib/version-etc.h new file mode 100644 index 0000000..629fe83 --- /dev/null +++ b/lib/version-etc.h @@ -0,0 +1,78 @@ +/* Print --version and bug-reporting information in a consistent format. + Copyright (C) 1999, 2003, 2005, 2009-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* 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 ATTRIBUTE_SENTINEL +# if 4 <= __GNUC__ +# define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__)) +# else +# define 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 asumed 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 */ ...) + ATTRIBUTE_SENTINEL; + +/* Display the usual `Report bugs to' stanza */ +extern void emit_bug_reporting_address (void); + +#endif /* VERSION_ETC_H */ diff --git a/lib/wchar.in.h b/lib/wchar.in.h new file mode 100644 index 0000000..4214be9 --- /dev/null +++ b/lib/wchar.in.h @@ -0,0 +1,430 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A substitute for ISO C99 <wchar.h>, for platforms that have issues. + + Copyright (C) 2007-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* 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 + +#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H +/* Special invocation convention: + - Inside glibc and uClibc header files. + - 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>. + - 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 _GL_WCHAR_H + +#define _GL_ALREADY_INCLUDING_WCHAR_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>. + But avoid namespace pollution on glibc systems. */ +#ifndef __GLIBC__ +# include <stddef.h> +# 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 _GL_WCHAR_H +#define _GL_WCHAR_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. */ + + +/* 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 +# 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@ +typedef int rpl_mbstate_t; +# undef mbstate_t +# define mbstate_t rpl_mbstate_t +# define GNULIB_defined_mbstate_t 1 +#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_CXXALIAS_RPL (btowc, wint_t, (int c)); +# else +# if !@HAVE_BTOWC@ +_GL_FUNCDECL_SYS (btowc, wint_t, (int c)); +# 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_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)); +# 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_CXXALIAS_RPL (wcwidth, int, (wchar_t)); +# else +# if !@HAVE_DECL_WCWIDTH@ +/* wcwidth exists but is not declared. */ +_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t)); +# 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 + + +#endif /* _GL_WCHAR_H */ +#endif /* _GL_WCHAR_H */ +#endif diff --git a/lib/wcrtomb.c b/lib/wcrtomb.c new file mode 100644 index 0000000..e7345f6 --- /dev/null +++ b/lib/wcrtomb.c @@ -0,0 +1,53 @@ +/* Convert wide character to multibyte character. + Copyright (C) 2008, 2009, 2010 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 <http://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/lib/wctype.in.h b/lib/wctype.in.h new file mode 100644 index 0000000..618db23 --- /dev/null +++ b/lib/wctype.in.h @@ -0,0 +1,379 @@ +/* -*- buffer-read-only: t -*- vi: set ro: */ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A substitute for ISO C99 <wctype.h>, for platforms that lack it. + + Copyright (C) 2006-2010 Free Software Foundation, Inc. + + This program is free software; you can redistribute 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* 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. + */ + +#ifndef _GL_WCTYPE_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#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 + +/* 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 _GL_WCTYPE_H +#define _GL_WCTYPE_H + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* 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 +# ifndef WEOF +# define WEOF ((wint_t) -1) +# endif +#endif + + +/* 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 +# define towlower rpl_towlower +# define towupper rpl_towupper +# endif +# endif + +static inline int +# if @REPLACE_ISWCNTRL@ +rpl_iswalnum +# else +iswalnum +# endif + (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); +} + +static inline int +# if @REPLACE_ISWCNTRL@ +rpl_iswalpha +# else +iswalpha +# endif + (wint_t wc) +{ + return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; +} + +static inline int +# if @REPLACE_ISWCNTRL@ +rpl_iswblank +# else +iswblank +# endif + (wint_t wc) +{ + return wc == ' ' || wc == '\t'; +} + +static inline int +# if @REPLACE_ISWCNTRL@ +rpl_iswcntrl +# else +iswcntrl +# endif + (wint_t wc) +{ + return (wc & ~0x1f) == 0 || wc == 0x7f; +} + +static inline int +# if @REPLACE_ISWCNTRL@ +rpl_iswdigit +# else +iswdigit +# endif + (wint_t wc) +{ + return wc >= '0' && wc <= '9'; +} + +static inline int +# if @REPLACE_ISWCNTRL@ +rpl_iswgraph +# else +iswgraph +# endif + (wint_t wc) +{ + return wc >= '!' && wc <= '~'; +} + +static inline int +# if @REPLACE_ISWCNTRL@ +rpl_iswlower +# else +iswlower +# endif + (wint_t wc) +{ + return wc >= 'a' && wc <= 'z'; +} + +static inline int +# if @REPLACE_ISWCNTRL@ +rpl_iswprint +# else +iswprint +# endif + (wint_t wc) +{ + return wc >= ' ' && wc <= '~'; +} + +static 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'))); +} + +static 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'); +} + +static inline int +# if @REPLACE_ISWCNTRL@ +rpl_iswupper +# else +iswupper +# endif + (wint_t wc) +{ + return wc >= 'A' && wc <= 'Z'; +} + +static inline int +# if @REPLACE_ISWCNTRL@ +rpl_iswxdigit +# else +iswxdigit +# endif + (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); +} + +static inline wint_t +# if @REPLACE_ISWCNTRL@ +rpl_towlower +# else +towlower +# endif + (wint_t wc) +{ + return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); +} + +static inline wint_t +# if @REPLACE_ISWCNTRL@ +rpl_towupper +# else +towupper +# endif + (wint_t wc) +{ + return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); +} + +#elif ! @HAVE_ISWBLANK@ +/* Only the iswblank function is missing. */ + +static inline int +iswblank (wint_t wc) +{ + return wc == ' ' || wc == '\t'; +} + +#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. */ + +static 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 + +static 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__ */ + +#if @REPLACE_ISWCNTRL@ +_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswblank, 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 (iswblank, 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 (iswblank); +_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 @REPLACE_ISWCNTRL@ || 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); + + +#endif /* _GL_WCTYPE_H */ +#endif /* _GL_WCTYPE_H */ diff --git a/lib/wcwidth.c b/lib/wcwidth.c new file mode 100644 index 0000000..66b5b15 --- /dev/null +++ b/lib/wcwidth.c @@ -0,0 +1,50 @@ +/* Determine the number of screen columns needed for a character. + Copyright (C) 2006-2007, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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> + +/* Specification. */ +#include <wchar.h> + +/* Get iswprint. */ +#include <wctype.h> + +#include "localcharset.h" +#include "streq.h" +#include "uniwidth.h" + +int +wcwidth (wchar_t wc) +#undef wcwidth +{ + /* In UTF-8 locales, use a Unicode aware width function. */ + const char *encoding = locale_charset (); + if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0)) + { + /* We assume that in a UTF-8 locale, a wide character is the same as a + Unicode character. */ + return uc_width (wc, encoding); + } + else + { + /* Otherwise, fall back to the system's wcwidth function. */ +#if HAVE_WCWIDTH + return wcwidth (wc); +#else + return wc == 0 ? 0 : iswprint (wc) ? 1 : -1; +#endif + } +} diff --git a/lib/xalloc-die.c b/lib/xalloc-die.c new file mode 100644 index 0000000..4b22040 --- /dev/null +++ b/lib/xalloc-die.c @@ -0,0 +1,41 @@ +/* Report a memory allocation failure and exit. + + Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2006, 2009, 2010 + Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "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")); + + /* The `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/lib/xalloc.h b/lib/xalloc.h new file mode 100644 index 0000000..6122cc5 --- /dev/null +++ b/lib/xalloc.h @@ -0,0 +1,281 @@ +/* xalloc.h -- malloc with out-of-memory checking + + Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2003, 2004, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 XALLOC_H_ +# define XALLOC_H_ + +# include <stddef.h> + + +# ifdef __cplusplus +extern "C" { +# endif + + +# ifndef __attribute__ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) +# define __attribute__(x) +# endif +# endif + +# ifndef ATTRIBUTE_NORETURN +# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) +# endif + +# ifndef ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 +# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define ATTRIBUTE_MALLOC +# endif +# 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 void xalloc_die (void) ATTRIBUTE_NORETURN; + +void *xmalloc (size_t s) ATTRIBUTE_MALLOC; +void *xzalloc (size_t s) ATTRIBUTE_MALLOC; +void *xcalloc (size_t n, size_t s) ATTRIBUTE_MALLOC; +void *xrealloc (void *p, size_t s); +void *x2realloc (void *p, size_t *pn); +void *xmemdup (void const *p, size_t s) ATTRIBUTE_MALLOC; +char *xstrdup (char const *str) ATTRIBUTE_MALLOC; + +/* Return 1 if an array of N objects, each of size S, cannot exist due + to size arithmetic overflow. S must be positive and N must be + nonnegative. This is a macro, not an inline function, so that it + works correctly even when SIZE_MAX < N. + + By gnulib convention, SIZE_MAX represents overflow in size + calculations, so the conservative dividend to use here is + SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value. + However, malloc (SIZE_MAX) fails on all known hosts where + sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for + exactly-SIZE_MAX allocations on such hosts; this avoids a test and + branch when S is known to be 1. */ +# define xalloc_oversized(n, s) \ + ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n)) + + +/* 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)))) + + +# if HAVE_INLINE +# define static_inline static inline +# else +void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC; +void *xnrealloc (void *p, size_t n, size_t s); +void *x2nrealloc (void *p, size_t *pn, size_t s); +char *xcharalloc (size_t n) ATTRIBUTE_MALLOC; +# endif + +# ifdef static_inline + +/* Allocate an array of N objects, each with S bytes of memory, + dynamically, with error checking. S must be nonzero. */ + +static_inline void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC; +static_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. */ + +static_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. *PN must be nonzero unless P is null, and 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; + } + + */ + +static_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. 64 bytes is the largest "small" request for the + GNU C library malloc. */ + enum { DEFAULT_MXFAST = 64 }; + + n = DEFAULT_MXFAST / s; + n += !n; + } + } + else + { + /* Set N = ceil (1.5 * N) so that progress is made if N == 1. + Check for overflow, so that N * S stays in size_t range. + The check is slightly conservative, but an exact check isn't + worth the trouble. */ + if ((size_t) -1 / 3 * 2 / s <= n) + xalloc_die (); + n += (n + 1) / 2; + } + + *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 *. */ + +static_inline char *xcharalloc (size_t n) ATTRIBUTE_MALLOC; +static_inline char * +xcharalloc (size_t n) +{ + return XNMALLOC (n, char); +} + +# endif + +# 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 + + +#endif /* !XALLOC_H_ */ diff --git a/lib/xfreopen.c b/lib/xfreopen.c new file mode 100644 index 0000000..297bda4 --- /dev/null +++ b/lib/xfreopen.c @@ -0,0 +1,42 @@ +/* a wrapper for frepoen + Copyright (C) 2008-2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "xfreopen.h" + +#include <errno.h> +#include "error.h" +#include "exitfail.h" +#include "quote.h" +#include "stdio--.h" + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +void +xfreopen (char const *filename, char const *mode, FILE *fp) +{ + if (!freopen (filename, mode, fp)) + { + char const *f = (filename ? filename + : (fp == stdin ? _("stdin") + : (fp == stdout ? _("stdout") + : (fp == stderr ? _("stderr") + : _("unknown stream"))))); + error (exit_failure, errno, _("failed to reopen %s with mode %s"), + quote_n (0, f), quote_n (1, mode)); + } +} diff --git a/lib/xfreopen.h b/lib/xfreopen.h new file mode 100644 index 0000000..2ce49b5 --- /dev/null +++ b/lib/xfreopen.h @@ -0,0 +1,2 @@ +#include <stdio.h> +void xfreopen (char const *filename, char const *mode, FILE *fp); diff --git a/lib/xmalloc.c b/lib/xmalloc.c new file mode 100644 index 0000000..ecce529 --- /dev/null +++ b/lib/xmalloc.c @@ -0,0 +1,118 @@ +/* xmalloc.c -- malloc with out of memory checking + + Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 ! HAVE_INLINE +# define static_inline +#endif +#include "xalloc.h" +#undef static_inline + +#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 and supports the GNU API even on non-GNU platforms. */ +#if defined HAVE_CALLOC || defined __GLIBC__ +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) +{ + p = realloc (p, n); + if (!p && n != 0) + 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 some calloc implementations don't have + proper overflow checks. But omit overflow and size-zero tests if + HAVE_GNU_CALLOC, since GNU calloc catches overflow and never + returns NULL if successful. */ + if ((! HAVE_GNU_CALLOC && 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/lib/xstriconv.c b/lib/xstriconv.c new file mode 100644 index 0000000..7c8c142 --- /dev/null +++ b/lib/xstriconv.c @@ -0,0 +1,62 @@ +/* Charset conversion with out-of-memory checking. + Copyright (C) 2001-2004, 2006, 2009-2010 Free Software Foundation, Inc. + Written by 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 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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> + +/* Specification. */ +#include "xstriconv.h" + +#include <errno.h> + +#include "striconv.h" +#include "xalloc.h" + + +#if HAVE_ICONV + +int +xmem_cd_iconv (const char *src, size_t srclen, iconv_t cd, + char **resultp, size_t *lengthp) +{ + int retval = mem_cd_iconv (src, srclen, cd, resultp, lengthp); + + if (retval < 0 && errno == ENOMEM) + xalloc_die (); + return retval; +} + +char * +xstr_cd_iconv (const char *src, iconv_t cd) +{ + char *result = str_cd_iconv (src, cd); + + if (result == NULL && errno == ENOMEM) + xalloc_die (); + return result; +} + +#endif + +char * +xstr_iconv (const char *src, const char *from_codeset, const char *to_codeset) +{ + char *result = str_iconv (src, from_codeset, to_codeset); + + if (result == NULL && errno == ENOMEM) + xalloc_die (); + return result; +} diff --git a/lib/xstriconv.h b/lib/xstriconv.h new file mode 100644 index 0000000..72b2aa3 --- /dev/null +++ b/lib/xstriconv.h @@ -0,0 +1,78 @@ +/* Charset conversion with out-of-memory checking. + Copyright (C) 2001-2004, 2006-2007, 2009-2010 Free Software Foundation, Inc. + Written by Bruno Haible and 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _XSTRICONV_H +#define _XSTRICONV_H + +#include <stddef.h> +#if HAVE_ICONV +#include <iconv.h> +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if HAVE_ICONV + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + The conversion descriptor is passed as CD. + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Upon memory allocation failure, report the error and exit. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int xmem_cd_iconv (const char *src, size_t srclen, iconv_t cd, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + The conversion descriptor is passed as CD. Both the "from" and the "to" + encoding must use a single NUL byte at the end of the string (i.e. not + UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Upon memory allocation failure, report the error and exit. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * xstr_cd_iconv (const char *src, iconv_t cd); + +#endif + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + Both the "from" and the "to" encoding must use a single NUL byte at the + end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Upon memory allocation failure, report the error and exit. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * xstr_iconv (const char *src, + const char *from_codeset, const char *to_codeset); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _XSTRICONV_H */ diff --git a/lib/xstrndup.c b/lib/xstrndup.c new file mode 100644 index 0000000..414f9f4 --- /dev/null +++ b/lib/xstrndup.c @@ -0,0 +1,36 @@ +/* Duplicate a bounded initial segment of a string, with out-of-memory + checking. + Copyright (C) 2003, 2006, 2007, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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> + +/* Specification. */ +#include "xstrndup.h" + +#include <string.h> +#include "xalloc.h" + +/* Return a newly allocated copy of at most N bytes of STRING. + In other words, return a copy of the initial segment of length N of + STRING. */ +char * +xstrndup (const char *string, size_t n) +{ + char *s = strndup (string, n); + if (! s) + xalloc_die (); + return s; +} diff --git a/lib/xstrndup.h b/lib/xstrndup.h new file mode 100644 index 0000000..009fdb0 --- /dev/null +++ b/lib/xstrndup.h @@ -0,0 +1,23 @@ +/* Duplicate a bounded initial segment of a string, with out-of-memory + checking. + Copyright (C) 2003, 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 <stddef.h> + +/* Return a newly allocated copy of at most N bytes of STRING. + In other words, return a copy of the initial segment of length N of + STRING. */ +extern char *xstrndup (const char *string, size_t n); diff --git a/lib/xstrtol-error.c b/lib/xstrtol-error.c new file mode 100644 index 0000000..014fc1c --- /dev/null +++ b/lib/xstrtol-error.c @@ -0,0 +1,98 @@ +/* A more useful interface to strtol. + + Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "xstrtol.h" + +#include <stdlib.h> + +#include "error.h" +#include "exitfail.h" +#include "gettext.h" + +#define N_(msgid) msgid + +/* Report an error for an invalid integer in an option argument. + + ERR is the error code returned by one of the xstrto* functions. + + Use OPT_IDX to decide whether to print the short option string "C" + or "-C" or a long option string derived from LONG_OPTION. OPT_IDX + is -2 if the short option "C" was used, without any leading "-"; it + is -1 if the short option "-C" was used; otherwise it is an index + into LONG_OPTIONS, which should have a name preceded by two '-' + characters. + + ARG is the option-argument containing the integer. + + After reporting an error, exit with status EXIT_STATUS if it is + nonzero. */ + +static void +xstrtol_error (enum strtol_error err, + int opt_idx, char c, struct option const *long_options, + char const *arg, + int exit_status) +{ + char const *hyphens = "--"; + char const *msgid; + char const *option; + char option_buffer[2]; + + switch (err) + { + default: + abort (); + + case LONGINT_INVALID: + msgid = N_("invalid %s%s argument `%s'"); + break; + + case LONGINT_INVALID_SUFFIX_CHAR: + case LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW: + msgid = N_("invalid suffix in %s%s argument `%s'"); + break; + + case LONGINT_OVERFLOW: + msgid = N_("%s%s argument `%s' too large"); + break; + } + + if (opt_idx < 0) + { + hyphens -= opt_idx; + option_buffer[0] = c; + option_buffer[1] = '\0'; + option = option_buffer; + } + else + option = long_options[opt_idx].name; + + error (exit_status, 0, gettext (msgid), hyphens, option, arg); +} + +/* Like xstrtol_error, except exit with a failure status. */ + +void +xstrtol_fatal (enum strtol_error err, + int opt_idx, char c, struct option const *long_options, + char const *arg) +{ + xstrtol_error (err, opt_idx, c, long_options, arg, exit_failure); + abort (); +} diff --git a/lib/xstrtol.c b/lib/xstrtol.c new file mode 100644 index 0000000..43f5ada --- /dev/null +++ b/lib/xstrtol.c @@ -0,0 +1,228 @@ +/* A more useful interface to strtol. + + Copyright (C) 1995-1996, 1998-2001, 2003-2007, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +/* Written by Jim Meyering. */ + +#ifndef __strtol +# define __strtol strtol +# define __strtol_t long int +# define __xstrtol xstrtol +# define STRTOL_T_MINIMUM LONG_MIN +# define STRTOL_T_MAXIMUM LONG_MAX +#endif + +#include <config.h> + +#include "xstrtol.h" + +/* Some pre-ANSI implementations (e.g. SunOS 4) + need stderr defined if assertion checking is enabled. */ +#include <stdio.h> + +#include <assert.h> +#include <ctype.h> +#include <errno.h> +#include <limits.h> +#include <stdlib.h> +#include <string.h> + +#include "intprops.h" + +static strtol_error +bkm_scale (__strtol_t *x, int scale_factor) +{ + if (TYPE_SIGNED (__strtol_t) && *x < STRTOL_T_MINIMUM / scale_factor) + { + *x = STRTOL_T_MINIMUM; + return LONGINT_OVERFLOW; + } + if (STRTOL_T_MAXIMUM / scale_factor < *x) + { + *x = STRTOL_T_MAXIMUM; + return LONGINT_OVERFLOW; + } + *x *= scale_factor; + return LONGINT_OK; +} + +static strtol_error +bkm_scale_by_power (__strtol_t *x, int base, int power) +{ + strtol_error err = LONGINT_OK; + while (power--) + err |= bkm_scale (x, base); + return err; +} + +/* FIXME: comment. */ + +strtol_error +__xstrtol (const char *s, char **ptr, int strtol_base, + __strtol_t *val, const char *valid_suffixes) +{ + char *t_ptr; + char **p; + __strtol_t tmp; + strtol_error err = LONGINT_OK; + + assert (0 <= strtol_base && strtol_base <= 36); + + p = (ptr ? ptr : &t_ptr); + + if (! TYPE_SIGNED (__strtol_t)) + { + const char *q = s; + unsigned char ch = *q; + while (isspace (ch)) + ch = *++q; + if (ch == '-') + return LONGINT_INVALID; + } + + errno = 0; + tmp = __strtol (s, p, strtol_base); + + if (*p == s) + { + /* If there is no number but there is a valid suffix, assume the + number is 1. The string is invalid otherwise. */ + if (valid_suffixes && **p && strchr (valid_suffixes, **p)) + tmp = 1; + else + return LONGINT_INVALID; + } + else if (errno != 0) + { + if (errno != ERANGE) + return LONGINT_INVALID; + err = LONGINT_OVERFLOW; + } + + /* Let valid_suffixes == NULL mean `allow any suffix'. */ + /* FIXME: update all callers except the ones that allow suffixes + after the number, changing last parameter NULL to `""'. */ + if (!valid_suffixes) + { + *val = tmp; + return err; + } + + if (**p != '\0') + { + int base = 1024; + int suffixes = 1; + strtol_error overflow; + + if (!strchr (valid_suffixes, **p)) + { + *val = tmp; + return err | LONGINT_INVALID_SUFFIX_CHAR; + } + + if (strchr (valid_suffixes, '0')) + { + /* The ``valid suffix'' '0' is a special flag meaning that + an optional second suffix is allowed, which can change + the base. A suffix "B" (e.g. "100MB") stands for a power + of 1000, whereas a suffix "iB" (e.g. "100MiB") stands for + a power of 1024. If no suffix (e.g. "100M"), assume + power-of-1024. */ + + switch (p[0][1]) + { + case 'i': + if (p[0][2] == 'B') + suffixes += 2; + break; + + case 'B': + case 'D': /* 'D' is obsolescent */ + base = 1000; + suffixes++; + break; + } + } + + switch (**p) + { + case 'b': + overflow = bkm_scale (&tmp, 512); + break; + + case 'B': + overflow = bkm_scale (&tmp, 1024); + break; + + case 'c': + overflow = 0; + break; + + case 'E': /* exa or exbi */ + overflow = bkm_scale_by_power (&tmp, base, 6); + break; + + case 'G': /* giga or gibi */ + case 'g': /* 'g' is undocumented; for compatibility only */ + overflow = bkm_scale_by_power (&tmp, base, 3); + break; + + case 'k': /* kilo */ + case 'K': /* kibi */ + overflow = bkm_scale_by_power (&tmp, base, 1); + break; + + case 'M': /* mega or mebi */ + case 'm': /* 'm' is undocumented; for compatibility only */ + overflow = bkm_scale_by_power (&tmp, base, 2); + break; + + case 'P': /* peta or pebi */ + overflow = bkm_scale_by_power (&tmp, base, 5); + break; + + case 'T': /* tera or tebi */ + case 't': /* 't' is undocumented; for compatibility only */ + overflow = bkm_scale_by_power (&tmp, base, 4); + break; + + case 'w': + overflow = bkm_scale (&tmp, 2); + break; + + case 'Y': /* yotta or 2**80 */ + overflow = bkm_scale_by_power (&tmp, base, 8); + break; + + case 'Z': /* zetta or 2**70 */ + overflow = bkm_scale_by_power (&tmp, base, 7); + break; + + default: + *val = tmp; + return err | LONGINT_INVALID_SUFFIX_CHAR; + } + + err |= overflow; + *p += suffixes; + if (**p) + err |= LONGINT_INVALID_SUFFIX_CHAR; + } + + *val = tmp; + return err; +} diff --git a/lib/xstrtol.h b/lib/xstrtol.h new file mode 100644 index 0000000..3a94a9c --- /dev/null +++ b/lib/xstrtol.h @@ -0,0 +1,83 @@ +/* A more useful interface to strtol. + + Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 XSTRTOL_H_ +# define XSTRTOL_H_ 1 + +# include <getopt.h> +# include <inttypes.h> + +# ifndef _STRTOL_ERROR +enum strtol_error + { + LONGINT_OK = 0, + + /* These two values can be ORed together, to indicate that both + errors occurred. */ + LONGINT_OVERFLOW = 1, + LONGINT_INVALID_SUFFIX_CHAR = 2, + + LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW = (LONGINT_INVALID_SUFFIX_CHAR + | LONGINT_OVERFLOW), + LONGINT_INVALID = 4 + }; +typedef enum strtol_error strtol_error; +# endif + +# define _DECLARE_XSTRTOL(name, type) \ + strtol_error name (const char *, char **, int, type *, const char *); +_DECLARE_XSTRTOL (xstrtol, long int) +_DECLARE_XSTRTOL (xstrtoul, unsigned long int) +_DECLARE_XSTRTOL (xstrtoimax, intmax_t) +_DECLARE_XSTRTOL (xstrtoumax, uintmax_t) + +#if HAVE_LONG_LONG_INT +_DECLARE_XSTRTOL (xstrtoll, long long int) +_DECLARE_XSTRTOL (xstrtoull, unsigned long long int) +#endif + +#ifndef __attribute__ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) +# define __attribute__(x) +# endif +#endif + +#ifndef ATTRIBUTE_NORETURN +# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) +#endif + +/* Report an error for an invalid integer in an option argument. + + ERR is the error code returned by one of the xstrto* functions. + + Use OPT_IDX to decide whether to print the short option string "C" + or "-C" or a long option string derived from LONG_OPTION. OPT_IDX + is -2 if the short option "C" was used, without any leading "-"; it + is -1 if the short option "-C" was used; otherwise it is an index + into LONG_OPTIONS, which should have a name preceded by two '-' + characters. + + ARG is the option-argument containing the integer. + + After reporting an error, exit with a failure status. */ + +void xstrtol_fatal (enum strtol_error, + int, char, struct option const *, + char const *) ATTRIBUTE_NORETURN; + +#endif /* not XSTRTOL_H_ */ diff --git a/lib/xstrtoul.c b/lib/xstrtoul.c new file mode 100644 index 0000000..285f7b9 --- /dev/null +++ b/lib/xstrtoul.c @@ -0,0 +1,6 @@ +#define __strtol strtoul +#define __strtol_t unsigned long int +#define __xstrtol xstrtoul +#define STRTOL_T_MINIMUM 0 +#define STRTOL_T_MAXIMUM ULONG_MAX +#include "xstrtol.c" diff --git a/lib/xstrtoumax.c b/lib/xstrtoumax.c new file mode 100644 index 0000000..9a2349f --- /dev/null +++ b/lib/xstrtoumax.c @@ -0,0 +1,6 @@ +#define __strtol strtoumax +#define __strtol_t uintmax_t +#define __xstrtol xstrtoumax +#define STRTOL_T_MINIMUM 0 +#define STRTOL_T_MAXIMUM UINTMAX_MAX +#include "xstrtol.c" diff --git a/m4/00gnulib.m4 b/m4/00gnulib.m4 new file mode 100644 index 0000000..301469b --- /dev/null +++ b/m4/00gnulib.m4 @@ -0,0 +1,30 @@ +# 00gnulib.m4 serial 2 +dnl Copyright (C) 2009-2010 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 semantics. + +# 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/m4/alloca.m4 b/m4/alloca.m4 new file mode 100644 index 0000000..f3ee343 --- /dev/null +++ b/m4/alloca.m4 @@ -0,0 +1,47 @@ +# alloca.m4 serial 9 +dnl Copyright (C) 2002-2004, 2006-2007, 2009-2010 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], +[ + dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57. + AC_REQUIRE([AC_PROG_CPP]) + AC_REQUIRE([AC_PROG_EGREP]) + + 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]) +]) + +# Prerequisites of lib/alloca.c. +# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. +AC_DEFUN([gl_PREREQ_ALLOCA], [:]) diff --git a/m4/argmatch.m4 b/m4/argmatch.m4 new file mode 100644 index 0000000..510fef9 --- /dev/null +++ b/m4/argmatch.m4 @@ -0,0 +1,10 @@ +#serial 3 +dnl Copyright (C) 2005, 2006, 2009, 2010 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_ARGMATCH], +[ + AC_LIBOBJ([argmatch]) +]) diff --git a/m4/btowc.m4 b/m4/btowc.m4 new file mode 100644 index 0000000..c4ee4e4 --- /dev/null +++ b/m4/btowc.m4 @@ -0,0 +1,107 @@ +# btowc.m4 serial 6 +dnl Copyright (C) 2008-2010 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 <http://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_TRY_RUN([ +#include <stdio.h> +#include <string.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 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 otherwise. + *) gl_cv_func_btowc_eof="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR != none; then + AC_TRY_RUN([ +#include <locale.h> +#include <stdio.h> +#include <string.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 + if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([btowc]) + gl_PREREQ_BTOWC + fi +]) + +# Prerequisites of lib/btowc.c. +AC_DEFUN([gl_PREREQ_BTOWC], [ + : +]) diff --git a/m4/c-stack.m4 b/m4/c-stack.m4 new file mode 100644 index 0000000..634f444 --- /dev/null +++ b/m4/c-stack.m4 @@ -0,0 +1,349 @@ +# Check prerequisites for compiling lib/c-stack.c. + +# Copyright (C) 2002, 2003, 2004, 2008, 2009, 2010 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. + +# serial 10 + +AC_DEFUN([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC], + [# for STACK_DIRECTION + AC_REQUIRE([AC_FUNC_ALLOCA]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_FUNCS_ONCE([setrlimit]) + AC_CHECK_HEADERS_ONCE([ucontext.h]) + + dnl List of signals that are sent when an invalid virtual memory address + dnl is accessed, or when the stack overflows. + dnl Either { SIGSEGV } or { SIGSEGV, SIGBUS }. + case "$host_os" in + sunos4* | freebsd* | dragonfly* | openbsd* | netbsd* | kfreebsd* | knetbsd*) # BSD systems + FAULT_YIELDS_SIGBUS=1 ;; + hpux*) # HP-UX + FAULT_YIELDS_SIGBUS=1 ;; + macos* | darwin*) # MacOS X + FAULT_YIELDS_SIGBUS=1 ;; + gnu*) # Hurd + FAULT_YIELDS_SIGBUS=1 ;; + *) + FAULT_YIELDS_SIGBUS=0 ;; + esac + AC_DEFINE_UNQUOTED([FAULT_YIELDS_SIGBUS], [$FAULT_YIELDS_SIGBUS], + [Define to 1 if an invalid memory address access may yield a SIGBUS.]) + + AC_CACHE_CHECK([for working C stack overflow detection], + [ac_cv_sys_stack_overflow_works], + [AC_RUN_IFELSE([AC_LANG_SOURCE( + [[ + #include <unistd.h> + #include <signal.h> + #if HAVE_SETRLIMIT + # include <sys/types.h> + # include <sys/time.h> + # include <sys/resource.h> + #endif + #ifndef SIGSTKSZ + # define SIGSTKSZ 16384 + #endif + + static union + { + char buffer[2 * SIGSTKSZ]; + long double ld; + long u; + void *p; + } alternate_signal_stack; + + static void + segv_handler (int signo) + { + _exit (0); + } + + static int + c_stack_action () + { + stack_t st; + struct sigaction act; + int r; + + st.ss_flags = 0; + /* Use the midpoint to avoid Irix sigaltstack bug. */ + st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ; + st.ss_size = SIGSTKSZ; + r = sigaltstack (&st, 0); + if (r != 0) + return r; + + sigemptyset (&act.sa_mask); + act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND; + act.sa_handler = segv_handler; + #if FAULT_YIELDS_SIGBUS + if (sigaction (SIGBUS, &act, 0) < 0) + return -1; + #endif + return sigaction (SIGSEGV, &act, 0); + } + static volatile int * + recurse_1 (volatile int n, volatile int *p) + { + if (n >= 0) + *recurse_1 (n + 1, p) += n; + return p; + } + static int + recurse (volatile int n) + { + int sum = 0; + return *recurse_1 (n, &sum); + } + int + main () + { + #if HAVE_SETRLIMIT && defined RLIMIT_STACK + /* Before starting the endless recursion, try to be friendly + to the user's machine. On some Linux 2.2.x systems, there + is no stack limit for user processes at all. We don't want + to kill such systems. */ + struct rlimit rl; + rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ + setrlimit (RLIMIT_STACK, &rl); + #endif + + return c_stack_action () || recurse (0); + } + ]])], + [ac_cv_sys_stack_overflow_works=yes], + [ac_cv_sys_stack_overflow_works=no], + [ac_cv_sys_stack_overflow_works=cross-compiling])]) + + if test $ac_cv_sys_stack_overflow_works = yes; then + AC_DEFINE([HAVE_STACK_OVERFLOW_HANDLING], [1], + [Define to 1 if extending the stack slightly past the limit causes + a SIGSEGV which can be handled on an alternate stack established + with sigaltstack.]) + + dnl The ss_sp field of a stack_t is, according to POSIX, the lowest address + dnl of the memory block designated as an alternate stack. But IRIX 5.3 + dnl interprets it as the highest address! + AC_CACHE_CHECK([for correct stack_t interpretation], + [gl_cv_sigaltstack_low_base], [ + AC_RUN_IFELSE([ + AC_LANG_SOURCE([[ +#include <stdlib.h> +#include <signal.h> +#if HAVE_SYS_SIGNAL_H +# include <sys/signal.h> +#endif +#ifndef SIGSTKSZ +# define SIGSTKSZ 16384 +#endif +volatile char *stack_lower_bound; +volatile char *stack_upper_bound; +static void check_stack_location (volatile char *addr) +{ + if (addr >= stack_lower_bound && addr <= stack_upper_bound) + exit (0); + else + exit (1); +} +static void stackoverflow_handler (int sig) +{ + char dummy; + check_stack_location (&dummy); +} +int main () +{ + char mystack[2 * SIGSTKSZ]; + stack_t altstack; + struct sigaction action; + /* Install the alternate stack. */ + altstack.ss_sp = mystack + SIGSTKSZ; + altstack.ss_size = SIGSTKSZ; + stack_lower_bound = (char *) altstack.ss_sp; + stack_upper_bound = (char *) altstack.ss_sp + altstack.ss_size - 1; + altstack.ss_flags = 0; /* no SS_DISABLE */ + if (sigaltstack (&altstack, NULL) < 0) + exit (2); + /* Install the SIGSEGV handler. */ + sigemptyset (&action.sa_mask); + action.sa_handler = &stackoverflow_handler; + action.sa_flags = SA_ONSTACK; + if (sigaction (SIGSEGV, &action, (struct sigaction *) NULL) < 0) + exit(3); + /* Provoke a SIGSEGV. */ + raise (SIGSEGV); + exit (3); +}]])], + [gl_cv_sigaltstack_low_base=yes], + [gl_cv_sigaltstack_low_base=no], + [gl_cv_sigaltstack_low_base=cross-compiling])]) + if test "$gl_cv_sigaltstack_low_base" = no; then + AC_DEFINE([SIGALTSTACK_SS_REVERSED], [1], + [Define if sigaltstack() interprets the stack_t.ss_sp field + incorrectly, as the highest address of the alternate stack range + rather than as the lowest address.]) + fi + + AC_CACHE_CHECK([for precise C stack overflow detection], + ac_cv_sys_xsi_stack_overflow_heuristic, + [AC_RUN_IFELSE([AC_LANG_SOURCE( + [[ + #include <unistd.h> + #include <signal.h> + #if HAVE_UCONTEXT_H + # include <ucontext.h> + #endif + #if HAVE_SETRLIMIT + # include <sys/types.h> + # include <sys/time.h> + # include <sys/resource.h> + #endif + #ifndef SIGSTKSZ + # define SIGSTKSZ 16384 + #endif + + static union + { + char buffer[2 * SIGSTKSZ]; + long double ld; + long u; + void *p; + } alternate_signal_stack; + + #if STACK_DIRECTION + # define find_stack_direction(ptr) STACK_DIRECTION + #else + static int + find_stack_direction (char const *addr) + { + char dummy; + return (! addr ? find_stack_direction (&dummy) + : addr < &dummy ? 1 : -1); + } + #endif + + static void + segv_handler (int signo, siginfo_t *info, void *context) + { + if (0 < info->si_code) + { + /* For XSI heuristics to work, we need uc_stack to describe + the interrupted stack (as on Solaris), and not the + currently executing stack (as on Linux). */ + ucontext_t const *user_context = context; + char const *stack_min = user_context->uc_stack.ss_sp; + size_t stack_size = user_context->uc_stack.ss_size; + char const *faulting_address = info->si_addr; + size_t s = faulting_address - stack_min; + size_t page_size = sysconf (_SC_PAGESIZE); + if (find_stack_direction (0) < 0) + s += page_size; + if (s < stack_size + page_size) + _exit (0); + } + + _exit (1); + } + + static int + c_stack_action () + { + stack_t st; + struct sigaction act; + int r; + + st.ss_flags = 0; + /* Use the midpoint to avoid Irix sigaltstack bug. */ + st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ; + st.ss_size = SIGSTKSZ; + r = sigaltstack (&st, 0); + if (r != 0) + return r; + + sigemptyset (&act.sa_mask); + act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND | SA_SIGINFO; + act.sa_sigaction = segv_handler; + #if FAULT_YIELDS_SIGBUS + if (sigaction (SIGBUS, &act, 0) < 0) + return -1; + #endif + return sigaction (SIGSEGV, &act, 0); + } + static volatile int * + recurse_1 (volatile int n, volatile int *p) + { + if (n >= 0) + *recurse_1 (n + 1, p) += n; + return p; + } + static int + recurse (volatile int n) + { + int sum = 0; + return *recurse_1 (n, &sum); + } + int + main () + { + #if HAVE_SETRLIMIT && defined RLIMIT_STACK + /* Before starting the endless recursion, try to be friendly + to the user's machine. On some Linux 2.2.x systems, there + is no stack limit for user processes at all. We don't want + to kill such systems. */ + struct rlimit rl; + rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ + setrlimit (RLIMIT_STACK, &rl); + #endif + + return c_stack_action () || recurse (0); + } + ]])], + [ac_cv_sys_xsi_stack_overflow_heuristic=yes], + [ac_cv_sys_xsi_stack_overflow_heuristic=no], + [ac_cv_sys_xsi_stack_overflow_heuristic=cross-compiling])]) + + if test $ac_cv_sys_xsi_stack_overflow_heuristic = yes; then + AC_DEFINE([HAVE_XSI_STACK_OVERFLOW_HEURISTIC], [1], + [Define to 1 if extending the stack slightly past the limit causes + a SIGSEGV, and an alternate stack can be established with sigaltstack, + and the signal handler is passed a context that specifies the + run time stack. This behavior is defined by POSIX 1003.1-2001 + with the X/Open System Interface (XSI) option + and is a standardized way to implement a SEGV-based stack + overflow detection heuristic.]) + fi + fi]) + + +AC_DEFUN([gl_PREREQ_C_STACK], + [AC_REQUIRE([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC]) + AC_REQUIRE([gl_LIBSIGSEGV]) + + # for STACK_DIRECTION + AC_REQUIRE([AC_FUNC_ALLOCA]) + + AC_CHECK_FUNCS_ONCE([sigaltstack]) + AC_CHECK_DECLS([sigaltstack], , , [#include <signal.h>]) + + AC_CHECK_HEADERS_ONCE([unistd.h ucontext.h]) + + AC_CHECK_TYPES([stack_t], , , [#include <signal.h>]) + + dnl c-stack does not need -lsigsegv if the system has XSI heuristics. + if test "$gl_cv_lib_sigsegv" = yes \ + && test $"ac_cv_sys_xsi_stack_overflow_heuristic" != yes ; then + AC_SUBST([LIBCSTACK], [$LIBSIGSEGV]) + AC_SUBST([LTLIBCSTACK], [$LTLIBSIGSEGV]) + fi +]) + +AC_DEFUN([gl_C_STACK], +[ + dnl Prerequisites of lib/c-stack.c. + gl_PREREQ_C_STACK +]) diff --git a/m4/clock_time.m4 b/m4/clock_time.m4 new file mode 100644 index 0000000..8be179d --- /dev/null +++ b/m4/clock_time.m4 @@ -0,0 +1,31 @@ +# clock_time.m4 serial 10 +dnl Copyright (C) 2002-2006, 2009-2010 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/m4/codeset.m4 b/m4/codeset.m4 new file mode 100644 index 0000000..a53c042 --- /dev/null +++ b/m4/codeset.m4 @@ -0,0 +1,21 @@ +# codeset.m4 serial 4 (gettext-0.18) +dnl Copyright (C) 2000-2002, 2006, 2008-2010 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_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], + [AC_TRY_LINK([#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/m4/config-h.m4 b/m4/config-h.m4 new file mode 100644 index 0000000..319127d --- /dev/null +++ b/m4/config-h.m4 @@ -0,0 +1,13 @@ +# Say that -DHAVE_CONFIG_H is not needed. + +dnl Copyright (C) 2006, 2009-2010 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. + +# This package's source files all include config.h unconditionally, +# so there's no need to pass -DHAVE_CONFIG_H to the compiler. +AC_DEFUN([gl_CONFIG_H], + [AC_CONFIG_COMMANDS_PRE([test "X$DEFS" = X-DHAVE_CONFIG_H && DEFS=])]) diff --git a/m4/dirname.m4 b/m4/dirname.m4 new file mode 100644 index 0000000..576b5be --- /dev/null +++ b/m4/dirname.m4 @@ -0,0 +1,26 @@ +#serial 8 -*- autoconf -*- +dnl Copyright (C) 2002-2006, 2009-2010 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_LIBOBJ([basename]) + AC_LIBOBJ([dirname]) +]) + +AC_DEFUN([gl_DIRNAME_LGPL], +[ + AC_LIBOBJ([basename-lgpl]) + AC_LIBOBJ([dirname-lgpl]) + AC_LIBOBJ([stripslash]) + + dnl Prerequisites of lib/dirname.h. + AC_REQUIRE([gl_AC_DOS]) + 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/m4/dos.m4 b/m4/dos.m4 new file mode 100644 index 0000000..5660542 --- /dev/null +++ b/m4/dos.m4 @@ -0,0 +1,71 @@ +#serial 11 -*- autoconf -*- + +# Define some macros required for proper operation of code in lib/*.c +# on MSDOS/Windows systems. + +# Copyright (C) 2000-2001, 2004-2006, 2009-2010 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. + +AC_DEFUN([gl_AC_DOS], + [ + AC_CACHE_CHECK([whether system is Windows or MSDOS], [ac_cv_win_or_dos], + [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[ +#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __CYGWIN__ +neither MSDOS nor Windows +#endif]])], + [ac_cv_win_or_dos=yes], + [ac_cv_win_or_dos=no]) + ]) + + if test x"$ac_cv_win_or_dos" = xyes; then + ac_fs_accepts_drive_letter_prefix=1 + ac_fs_backslash_is_file_name_separator=1 + AC_CACHE_CHECK([whether drive letter can start relative path], + [ac_cv_drive_letter_can_be_relative], + [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[ +#if defined __CYGWIN__ +drive letters are always absolute +#endif]])], + [ac_cv_drive_letter_can_be_relative=yes], + [ac_cv_drive_letter_can_be_relative=no]) + ]) + if test x"$ac_cv_drive_letter_can_be_relative" = xyes; then + ac_fs_drive_letter_can_be_relative=1 + else + ac_fs_drive_letter_can_be_relative=0 + fi + else + ac_fs_accepts_drive_letter_prefix=0 + ac_fs_backslash_is_file_name_separator=0 + ac_fs_drive_letter_can_be_relative=0 + fi + + AC_DEFINE_UNQUOTED([FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX], + $ac_fs_accepts_drive_letter_prefix, + [Define on systems for which file names may have a so-called + `drive letter' prefix, define this to compute the length of that + prefix, including the colon.]) + + AH_VERBATIM(ISSLASH, + [#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#else +# define ISSLASH(C) ((C) == '/') +#endif]) + + AC_DEFINE_UNQUOTED([FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR], + $ac_fs_backslash_is_file_name_separator, + [Define if the backslash character may also serve as a file name + component separator.]) + + AC_DEFINE_UNQUOTED([FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE], + $ac_fs_drive_letter_can_be_relative, + [Define if a drive letter prefix denotes a relative path if it is + not followed by a file name component separator.]) + ]) diff --git a/m4/double-slash-root.m4 b/m4/double-slash-root.m4 new file mode 100644 index 0000000..66a79c0 --- /dev/null +++ b/m4/double-slash-root.m4 @@ -0,0 +1,38 @@ +# double-slash-root.m4 serial 4 -*- Autoconf -*- +dnl Copyright (C) 2006, 2008-2010 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/m4/dup2.m4 b/m4/dup2.m4 new file mode 100644 index 0000000..998d66f --- /dev/null +++ b/m4/dup2.m4 @@ -0,0 +1,58 @@ +#serial 10 +dnl Copyright (C) 2002, 2005, 2007, 2009-2010 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]) + AC_CHECK_FUNCS_ONCE([dup2]) + if test $ac_cv_func_dup2 = no; then + HAVE_DUP2=0 + AC_LIBOBJ([dup2]) + else + AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works], + [AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[#include <unistd.h> +#include <errno.h>]], + [if (dup2 (1, 1) == 0) + return 1; + close (0); + if (dup2 (0, 0) != -1) + return 2; + /* Many gnulib modules require POSIX conformance of EBADF. */ + if (dup2 (1, 1000000) == -1 && errno != EBADF) + return 3; + return 0; + ]) + ], + [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=no;; + cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 + gl_cv_func_dup2_works=no;; + linux*) # On linux between 2008-07-27 and 2009-05-11, dup2 of a + # closed fd may yield -EBADF instead of -1 / errno=EBADF. + gl_cv_func_dup2_works=no;; + freebsd*) # on FreeBSD 6.1, dup2(1,1000000) gives EMFILE, not EBADF. + gl_cv_func_dup2_works=no;; + *) gl_cv_func_dup2_works=yes;; + esac]) + ]) + if test "$gl_cv_func_dup2_works" = no; then + gl_REPLACE_DUP2 + fi + fi +]) + +AC_DEFUN([gl_REPLACE_DUP2], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + if test $ac_cv_func_dup2 = yes; then + REPLACE_DUP2=1 + fi + AC_LIBOBJ([dup2]) +]) diff --git a/m4/eealloc.m4 b/m4/eealloc.m4 new file mode 100644 index 0000000..63dd920 --- /dev/null +++ b/m4/eealloc.m4 @@ -0,0 +1,32 @@ +# eealloc.m4 serial 2 +dnl Copyright (C) 2003, 2009, 2010 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_REQUIRE([AC_C_INLINE]) +]) + +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/m4/environ.m4 b/m4/environ.m4 new file mode 100644 index 0000000..5f50d6e --- /dev/null +++ b/m4/environ.m4 @@ -0,0 +1,36 @@ +# environ.m4 serial 3 +dnl Copyright (C) 2001-2004, 2006-2010 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]) + gt_CHECK_VAR_DECL([#include <unistd.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_MSG_CHECKING([if $2 is properly declared]) + AC_CACHE_VAL([gt_cv_var], [ + AC_TRY_COMPILE([$1 + extern struct { int foo; } $2;], + [$2.foo = 1;], + gt_cv_var=no, + gt_cv_var=yes)]) + AC_MSG_RESULT([$gt_cv_var]) + if test $gt_cv_var = yes; then + AC_DEFINE([HAVE_]translit($2, [a-z], [A-Z])[_DECL], 1, + [Define if you have the declaration of $2.]) + fi + undefine([gt_cv_var]) +]) diff --git a/m4/errno_h.m4 b/m4/errno_h.m4 new file mode 100644 index 0000000..d02a039 --- /dev/null +++ b/m4/errno_h.m4 @@ -0,0 +1,115 @@ +# errno_h.m4 serial 6 +dnl Copyright (C) 2004, 2006, 2008, 2009, 2010 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_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 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 ESTALE +booboo +#endif +#if !defined ECANCELED +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_CHECK_NEXT_HEADERS([errno.h]) + ERRNO_H='errno.h' + fi + AC_SUBST([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 +]) + +dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. +dnl Remove this when we can assume autoconf >= 2.61. +m4_ifdef([AC_COMPUTE_INT], [], [ + AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) +]) diff --git a/m4/error.m4 b/m4/error.m4 new file mode 100644 index 0000000..9f1307a --- /dev/null +++ b/m4/error.m4 @@ -0,0 +1,22 @@ +#serial 12 + +# Copyright (C) 1996-1998, 2001-2004, 2009-2010 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], +[ + AC_FUNC_ERROR_AT_LINE + dnl Note: AC_FUNC_ERROR_AT_LINE does AC_LIBSOURCES([error.h, error.c]). + gl_PREREQ_ERROR +]) + +# Prerequisites of lib/error.c. +AC_DEFUN([gl_PREREQ_ERROR], +[ + AC_REQUIRE([AC_FUNC_STRERROR_R]) + AC_REQUIRE([AC_C_INLINE]) + : +]) diff --git a/m4/exclude.m4 b/m4/exclude.m4 new file mode 100644 index 0000000..72328ca --- /dev/null +++ b/m4/exclude.m4 @@ -0,0 +1,11 @@ +# exclude.m4 serial 7 +dnl Copyright (C) 2002, 2003, 2005, 2006, 2009, 2010 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_EXCLUDE], +[ + AC_LIBOBJ([exclude]) +]) diff --git a/m4/extensions.m4 b/m4/extensions.m4 new file mode 100644 index 0000000..7d9458a --- /dev/null +++ b/m4/extensions.m4 @@ -0,0 +1,118 @@ +# serial 9 -*- Autoconf -*- +# Enable extensions on systems that normally disable them. + +# Copyright (C) 2003, 2006-2010 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 CVS +# Autoconf. Perhaps we can remove this once we can assume Autoconf +# 2.62 or later everywhere, but since CVS 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_REQUIRE([AC_CANONICAL_HOST]) + + 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.]) + fi + + dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, + dnl regardless of whether the flags -Ae or _D_HPUX_SOURCE=1 are already + dnl provided. + case "$host_os" in + hpux*) + AC_DEFINE([_XOPEN_SOURCE], [500], + [Define to 500 only on HP-UX.]) + ;; + esac + + AH_VERBATIM([__EXTENSIONS__], +[/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#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([_GNU_SOURCE]) + AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) + AC_DEFINE([_TANDEM_SOURCE]) +])# 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/m4/fcntl-o.m4 b/m4/fcntl-o.m4 new file mode 100644 index 0000000..d416a61 --- /dev/null +++ b/m4/fcntl-o.m4 @@ -0,0 +1,81 @@ +# fcntl-o.m4 serial 1 +dnl Copyright (C) 2006, 2009-2010 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. + +# 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_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> + #include <unistd.h> + #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 status = !constants; + { + static char const sym[] = "conftest.sym"; + if (symlink (".", sym) != 0 + || close (open (sym, O_RDONLY | O_NOFOLLOW)) == 0) + status |= 32; + unlink (sym); + } + { + static char const file[] = "confdefs.h"; + int fd = open (file, O_RDONLY | O_NOATIME); + char c; + struct stat st0, st1; + if (fd < 0 + || fstat (fd, &st0) != 0 + || sleep (1) != 0 + || read (fd, &c, 1) != 1 + || close (fd) != 0 + || stat (file, &st1) != 0 + || st0.st_atime != st1.st_atime) + status |= 64; + } + return status;]])], + [gl_cv_header_working_fcntl_h=yes], + [case $? in #( + 32) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( + 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( + 96) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( + *) gl_cv_header_working_fcntl_h='no';; + esac], + [gl_cv_header_working_fcntl_h=cross-compiling])]) + + 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/m4/fcntl.m4 b/m4/fcntl.m4 new file mode 100644 index 0000000..fcb5f44 --- /dev/null +++ b/m4/fcntl.m4 @@ -0,0 +1,83 @@ +# fcntl.m4 serial 3 +dnl Copyright (C) 2009, 2010 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 + AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly], + [gl_cv_func_fcntl_f_dupfd_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include <fcntl.h> +]], [[return fcntl (0, F_DUPFD, -1) != -1; + ]])], + [gl_cv_func_fcntl_f_dupfd_works=yes], + [gl_cv_func_fcntl_f_dupfd_works=no], + [# Guess that it works on glibc systems + case $host_os in #(( + *-gnu*) gl_cv_func_fcntl_f_dupfd_works="guessing yes";; + *) gl_cv_func_fcntl_f_dupfd_works="guessing no";; + 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 +]) + +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 + AC_LIBOBJ([fcntl]) +]) diff --git a/m4/fcntl_h.m4 b/m4/fcntl_h.m4 new file mode 100644 index 0000000..e41915c --- /dev/null +++ b/m4/fcntl_h.m4 @@ -0,0 +1,43 @@ +# serial 12 +# Configure fcntl.h. +dnl Copyright (C) 2006, 2007, 2009, 2010 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_CHECK_NEXT_HEADERS([fcntl.h]) + + 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_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/m4/file-type.m4 b/m4/file-type.m4 new file mode 100644 index 0000000..f021aca --- /dev/null +++ b/m4/file-type.m4 @@ -0,0 +1,10 @@ +# file-type.m4 serial 6 +dnl Copyright (C) 2002, 2005-2006, 2009-2010 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_FILE_TYPE], +[ + AC_LIBOBJ([file-type]) +]) diff --git a/m4/fnmatch.m4 b/m4/fnmatch.m4 new file mode 100644 index 0000000..212ead5 --- /dev/null +++ b/m4/fnmatch.m4 @@ -0,0 +1,121 @@ +# Check for fnmatch - serial 4. + +# Copyright (C) 2000-2007, 2009-2010 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. + +# Autoconf defines AC_FUNC_FNMATCH, but that is obsolescent. +# New applications should use the macros below instead. + +# Request a POSIX compliant fnmatch function. +AC_DEFUN([gl_FUNC_FNMATCH_POSIX], +[ + m4_divert_text([DEFAULTS], [gl_fnmatch_required=POSIX]) + + dnl Persuade glibc <fnmatch.h> to declare FNM_CASEFOLD etc. + dnl This is only needed if gl_fnmatch_required = GNU. It would be possible + dnl to avoid this dependency for gl_FUNC_FNMATCH_POSIX by putting + dnl gl_FUNC_FNMATCH_GNU into a separate .m4 file. + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + FNMATCH_H= + gl_fnmatch_required_lowercase=`echo $gl_fnmatch_required | tr 'A-Z' 'a-z'` + gl_fnmatch_cache_var="gl_cv_func_fnmatch_${gl_fnmatch_required_lowercase}" + AC_CACHE_CHECK([for working $gl_fnmatch_required fnmatch], + [$gl_fnmatch_cache_var], + [dnl Some versions of Solaris, SCO, and the GNU C Library + dnl have a broken or incompatible fnmatch. + dnl So we run a test program. If we are cross-compiling, take no chance. + dnl Thanks to John Oleynick, François Pinard, and Paul Eggert for this + dnl test. + if test $gl_fnmatch_required = GNU; then + gl_fnmatch_gnu_start= + gl_fnmatch_gnu_end= + else + gl_fnmatch_gnu_start='#if 0' + gl_fnmatch_gnu_end='#endif' + fi + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <fnmatch.h> + static int + y (char const *pattern, char const *string, int flags) + { + return fnmatch (pattern, string, flags) == 0; + } + static int + n (char const *pattern, char const *string, int flags) + { + return fnmatch (pattern, string, flags) == FNM_NOMATCH; + } + ]], + [[char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]"; + char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]"; + static char const A_1[] = { 'A' - 1, 0 }; + static char const A01[] = { 'A' + 1, 0 }; + static char const a_1[] = { 'a' - 1, 0 }; + static char const a01[] = { 'a' + 1, 0 }; + static char const bs_1[] = { '\\\\' - 1, 0 }; + static char const bs01[] = { '\\\\' + 1, 0 }; + return + !(n ("a*", "", 0) + && y ("a*", "abc", 0) + && n ("d*/*1", "d/s/1", FNM_PATHNAME) + && y ("a\\\\bc", "abc", 0) + && n ("a\\\\bc", "abc", FNM_NOESCAPE) + && y ("*x", ".x", 0) + && n ("*x", ".x", FNM_PERIOD) + && y (Apat, "\\\\", 0) && y (Apat, "A", 0) + && y (apat, "\\\\", 0) && y (apat, "a", 0) + && n (Apat, A_1, 0) == ('A' < '\\\\') + && n (apat, a_1, 0) == ('a' < '\\\\') + && y (Apat, A01, 0) == ('A' < '\\\\') + && y (apat, a01, 0) == ('a' < '\\\\') + && y (Apat, bs_1, 0) == ('A' < '\\\\') + && y (apat, bs_1, 0) == ('a' < '\\\\') + && n (Apat, bs01, 0) == ('A' < '\\\\') + && n (apat, bs01, 0) == ('a' < '\\\\') + $gl_fnmatch_gnu_start + && y ("xxXX", "xXxX", FNM_CASEFOLD) + && y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH) + && n ("d*/*1", "d/s/1", FNM_FILE_NAME) + && y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR) + && y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR) + && y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR) + $gl_fnmatch_gnu_end + ); + ]])], + [eval "$gl_fnmatch_cache_var=yes"], + [eval "$gl_fnmatch_cache_var=no"], + [eval "$gl_fnmatch_cache_var=\"guessing no\""]) + ]) + eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\"" + if test "$gl_fnmatch_result" = yes; then + dnl Not strictly necessary. Only to avoid spurious leftover files if people + dnl don't do "make distclean". + rm -f "$gl_source_base/fnmatch.h" + else + FNMATCH_H=fnmatch.h + AC_LIBOBJ([fnmatch]) + dnl We must choose a different name for our function, since on ELF systems + dnl a broken fnmatch() in libc.so would override our fnmatch() if it is + dnl compiled into a shared library. + AC_DEFINE_UNQUOTED([fnmatch], [${gl_fnmatch_required_lowercase}_fnmatch], + [Define to a replacement function name for fnmatch().]) + dnl Prerequisites of lib/fnmatch.c. + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + AC_CHECK_DECLS([isblank], [], [], [#include <ctype.h>]) + AC_CHECK_FUNCS_ONCE([btowc isblank iswctype mbsrtowcs mempcpy wmemchr wmemcpy wmempcpy]) + AC_CHECK_HEADERS_ONCE([wctype.h]) + fi + AC_SUBST([FNMATCH_H]) +]) + +# Request a POSIX compliant fnmatch function with GNU extensions. +AC_DEFUN([gl_FUNC_FNMATCH_GNU], +[ + m4_divert_text([INIT_PREPARE], [gl_fnmatch_required=GNU]) + + AC_REQUIRE([gl_FUNC_FNMATCH_POSIX]) +]) diff --git a/m4/freopen.m4 b/m4/freopen.m4 new file mode 100644 index 0000000..e39a2f7 --- /dev/null +++ b/m4/freopen.m4 @@ -0,0 +1,24 @@ +# freopen.m4 serial 2 +dnl Copyright (C) 2007-2010 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_FREOPEN], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + mingw* | pw*) + REPLACE_FREOPEN=1 + AC_LIBOBJ([freopen]) + gl_PREREQ_FREOPEN + ;; + esac +]) + +# Prerequisites of lib/freopen.c. +AC_DEFUN([gl_PREREQ_FREOPEN], +[ + AC_REQUIRE([AC_C_INLINE]) +]) diff --git a/m4/getdtablesize.m4 b/m4/getdtablesize.m4 new file mode 100644 index 0000000..d238628 --- /dev/null +++ b/m4/getdtablesize.m4 @@ -0,0 +1,15 @@ +# getdtablesize.m4 serial 1 +dnl Copyright (C) 2008, 2009, 2010 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_CHECK_FUNCS_ONCE([getdtablesize]) + if test $ac_cv_func_getdtablesize != yes; then + HAVE_GETDTABLESIZE=0 + AC_LIBOBJ([getdtablesize]) + fi +]) diff --git a/m4/getopt.m4 b/m4/getopt.m4 new file mode 100644 index 0000000..5b211e5 --- /dev/null +++ b/m4/getopt.m4 @@ -0,0 +1,306 @@ +# getopt.m4 serial 28 +dnl Copyright (C) 2002-2006, 2008-2010 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]) + gl_GETOPT_IFELSE([ + gl_REPLACE_GETOPT + ], + []) +]) + +# 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], +[ + m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU]) + + AC_REQUIRE([gl_FUNC_GETOPT_POSIX]) +]) + +# Request the gnulib implementation of the getopt functions unconditionally. +# argp.m4 uses this. +AC_DEFUN([gl_REPLACE_GETOPT], +[ + dnl Arrange for getopt.h to be created. + gl_GETOPT_SUBSTITUTE_HEADER + dnl Arrange for unistd.h to include getopt.h. + GNULIB_UNISTD_H_GETOPT=1 + dnl Arrange to compile the getopt implementation. + AC_LIBOBJ([getopt]) + AC_LIBOBJ([getopt1]) + gl_PREREQ_GETOPT +]) + +# emacs' configure.in uses this. +AC_DEFUN([gl_GETOPT_IFELSE], +[ + AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) + AS_IF([test -n "$gl_replace_getopt"], [$1], [$2]) +]) + +# Determine whether to replace the entire getopt facility. +AC_DEFUN([gl_GETOPT_CHECK_HEADERS], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt. + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + gl_CHECK_NEXT_HEADERS([getopt.h]) + AC_CHECK_HEADERS_ONCE([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 BSD getopt_long uses an incompatible method to reset option processing. + dnl Existence of the variable, in and of itself, is not a reason to replace + dnl getopt, but knowledge of the variable is needed to determine how to + dnl reset and whether a reset reparses the environment. + dnl Solaris supports neither optreset nor optind=0, but keeps no state that + dnl needs a reset beyond setting optind=1; detect Solaris by getopt_clip. + if test -z "$gl_replace_getopt"; then + AC_CHECK_DECLS([optreset], [], + [AC_CHECK_DECLS([getopt_clip], [], [], + [[#include <getopt.h>]]) + ], + [[#include <getopt.h>]]) + fi + + dnl mingw's getopt (in libmingwex.a) does weird things when the options + dnl strings starts with '+' and it's not the first call. Some internal state + dnl is left over from earlier calls, and neither setting optind = 0 nor + dnl setting optreset = 1 get rid of this internal state. + dnl POSIX is silent on optind vs. optreset, so we allow either behavior. + 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 This test fails on mingw and succeeds on all other platforms. + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +#if !HAVE_DECL_OPTRESET && !HAVE_DECL_GETOPT_CLIP +# define OPTIND_MIN 0 +#else +# define OPTIND_MIN 1 +#endif + +int +main () +{ + { + int argc = 0; + char *argv[10]; + int c; + + argv[argc++] = "program"; + argv[argc++] = "-a"; + argv[argc++] = "foo"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = OPTIND_MIN; + opterr = 0; + + c = getopt (argc, argv, "ab"); + if (!(c == 'a')) + return 1; + c = getopt (argc, argv, "ab"); + if (!(c == -1)) + return 2; + if (!(optind == 2)) + return 3; + } + /* Some internal state exists at this point. */ + { + int argc = 0; + char *argv[10]; + int c; + + argv[argc++] = "program"; + argv[argc++] = "donald"; + argv[argc++] = "-p"; + argv[argc++] = "billy"; + argv[argc++] = "duck"; + argv[argc++] = "-a"; + argv[argc++] = "bar"; + argv[argc] = NULL; + optind = OPTIND_MIN; + opterr = 0; + + c = getopt (argc, 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; + } + /* Detect MacOS 10.5 bug. */ + { + char *argv[3] = { "program", "-ab", NULL }; + optind = OPTIND_MIN; + opterr = 0; + 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], + [case "$host_os" in + mingw*) gl_cv_func_getopt_posix="guessing no";; + darwin*) gl_cv_func_getopt_posix="guessing no";; + *) gl_cv_func_getopt_posix="guessing yes";; + esac + ]) + ]) + 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. + gl_had_POSIXLY_CORRECT=${POSIXLY_CORRECT:+yes} + POSIXLY_CORRECT=1 + export POSIXLY_CORRECT + AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[#include <getopt.h> + #include <stddef.h> + #include <string.h> + ]], [[ + /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, + and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, + OSF/1 5.1, Solaris 10. */ + { + char *myargv[3]; + myargv[0] = "conftest"; + myargv[1] = "-+"; + myargv[2] = 0; + opterr = 0; + if (getopt (2, myargv, "+a") != '?') + return 1; + } + /* This code succeeds on glibc 2.8, mingw, + and fails on MacOS 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. */ + { + char *argv[] = { "program", "-p", "foo", "bar", NULL }; + + optind = 1; + if (getopt (4, argv, "p::") != 'p') + return 2; + if (optarg != NULL) + return 3; + if (getopt (4, argv, "p::") != -1) + return 4; + if (optind != 2) + return 5; + } + /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ + { + char *argv[] = { "program", "foo", "-p", NULL }; + optind = 0; + if (getopt (3, argv, "-p") != 1) + return 6; + if (getopt (3, argv, "-p") != 'p') + return 7; + } + /* This code fails on glibc 2.11. */ + { + char *argv[] = { "program", "-b", "-a", NULL }; + optind = opterr = 0; + if (getopt (3, argv, "+:a:b") != 'b') + return 8; + if (getopt (3, argv, "+:a:b") != ':') + return 9; + } + return 0; + ]])], + [gl_cv_func_getopt_gnu=yes], + [gl_cv_func_getopt_gnu=no], + [dnl Cross compiling. Guess based on host and declarations. + case $host_os:$ac_cv_have_decl_optreset in + *-gnu*:* | mingw*:*) gl_cv_func_getopt_gnu=no;; + *:yes) gl_cv_func_getopt_gnu=no;; + *) gl_cv_func_getopt_gnu=yes;; + esac + ]) + if test "$gl_had_POSIXLY_CORRECT" != yes; then + AS_UNSET([POSIXLY_CORRECT]) + fi + ]) + if test "$gl_cv_func_getopt_gnu" = "no"; then + gl_replace_getopt=yes + fi + fi +]) + +# emacs' configure.in uses this. +AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], +[ + GETOPT_H=getopt.h + AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], + [Define to rpl_ if the getopt replacement functions and variables + should be used.]) + AC_SUBST([GETOPT_H]) +]) + +# Prerequisites of lib/getopt*. +# emacs' configure.in uses this. +AC_DEFUN([gl_PREREQ_GETOPT], +[ + AC_CHECK_DECLS_ONCE([getenv]) +]) diff --git a/m4/gettext_gl.m4 b/m4/gettext_gl.m4 new file mode 100644 index 0000000..d6dc3fe --- /dev/null +++ b/m4/gettext_gl.m4 @@ -0,0 +1,381 @@ +# gettext.m4 serial 62 (gettext-0.18) +dnl Copyright (C) 1995-2010 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 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 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. + +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([$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 MacOS 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_TRY_LINK([#include <libintl.h> +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings;], + [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], + [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_TRY_LINK([#include <libintl.h> +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], + [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], + [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_TRY_LINK([#include <libintl.h> +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], + [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], + [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], []) diff --git a/m4/gettime.m4 b/m4/gettime.m4 new file mode 100644 index 0000000..9e7fde4 --- /dev/null +++ b/m4/gettime.m4 @@ -0,0 +1,15 @@ +# gettime.m4 serial 7 +dnl Copyright (C) 2002, 2004-2006, 2009-2010 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], +[ + AC_LIBOBJ([gettime]) + + dnl Prerequisites of lib/gettime.c. + AC_REQUIRE([gl_CLOCK_TIME]) + AC_REQUIRE([gl_TIMESPEC]) + AC_CHECK_FUNCS_ONCE([gettimeofday nanotime]) +]) diff --git a/m4/gettimeofday.m4 b/m4/gettimeofday.m4 new file mode 100644 index 0000000..709a4d4 --- /dev/null +++ b/m4/gettimeofday.m4 @@ -0,0 +1,120 @@ +# serial 15 + +# Copyright (C) 2001-2003, 2005, 2007, 2009-2010 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([AC_C_RESTRICT]) + AC_REQUIRE([gl_HEADER_SYS_TIME_H]) + AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([gettimeofday]) + + gl_gettimeofday_timezone=void + if test $ac_cv_func_gettimeofday != yes; then + HAVE_GETTIMEOFDAY=0 + AC_LIBOBJ([gettimeofday]) + gl_PREREQ_GETTIMEOFDAY + 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 + AC_LIBOBJ([gettimeofday]) + gl_PREREQ_GETTIMEOFDAY + fi + 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_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], + dnl When crosscompiling, assume it is broken. + [gl_cv_func_gettimeofday_clobber=yes])]) + + if test $gl_cv_func_gettimeofday_clobber = yes; then + REPLACE_GETTIMEOFDAY=1 + gl_GETTIMEOFDAY_REPLACE_LOCALTIME + AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1], + [Define if gettimeofday clobbers the localtime buffer.]) + fi +]) + +AC_DEFUN([gl_GETTIMEOFDAY_REPLACE_LOCALTIME], [ + AC_LIBOBJ([gettimeofday]) + gl_PREREQ_GETTIMEOFDAY + AC_DEFINE([gmtime], [rpl_gmtime], + [Define to rpl_gmtime if the replacement function should be used.]) + AC_DEFINE([localtime], [rpl_localtime], + [Define to rpl_localtime if the replacement function should be used.]) +]) + +# Prerequisites of lib/gettimeofday.c. +AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [ + AC_CHECK_HEADERS([sys/timeb.h]) + AC_CHECK_FUNCS([_ftime]) +]) diff --git a/m4/glibc21_gl.m4 b/m4/glibc21_gl.m4 new file mode 100644 index 0000000..68ada9d --- /dev/null +++ b/m4/glibc21_gl.m4 @@ -0,0 +1,30 @@ +# glibc21.m4 serial 4 +dnl Copyright (C) 2000-2002, 2004, 2008-2010 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. + +# Test for the GNU C Library, version 2.1 or newer. +# From Bruno Haible. + +AC_DEFUN([gl_GLIBC21], + [ + AC_CACHE_CHECK([whether we are using the GNU C Library 2.1 or newer], + [ac_cv_gnu_library_2_1], + [AC_EGREP_CPP([Lucky GNU user], + [ +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#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/m4/gnu-make.m4 b/m4/gnu-make.m4 new file mode 100644 index 0000000..385ab3f --- /dev/null +++ b/m4/gnu-make.m4 @@ -0,0 +1,19 @@ +# Determine whether recent-enough GNU Make is being used. + +# Copyright (C) 2007, 2009, 2010 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. + +# Set GNU_MAKE if we are using a recent-enough version of GNU make. + +# Use --version AND trailing junk, because SGI Make doesn't fail on --version. + +AC_DEFUN([gl_GNU_MAKE], +[ + AM_CONDITIONAL([GNU_MAKE], + [${MAKE-make} --version /cannot/make/this >/dev/null 2>&1]) +]) diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4 new file mode 100644 index 0000000..4c7ac30 --- /dev/null +++ b/m4/gnulib-common.m4 @@ -0,0 +1,201 @@ +# gnulib-common.m4 serial 20 +dnl Copyright (C) 2007-2010 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_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([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 MacOS 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 +]) + 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. +AC_DEFUN([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], +[ + GNULIB_[]m4_translit([[$1]], + [abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=gl_MODULE_INDICATOR_CONDITION +]) + +# 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.]) +]) + +# m4_foreach_w +# is a backport of autoconf-2.59c's m4_foreach_w. +# Remove this macro when we can assume autoconf >= 2.60. +m4_ifndef([m4_foreach_w], + [m4_define([m4_foreach_w], + [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) + +# 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])])]) + +# AC_PROG_MKDIR_P +# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix +# for interoperability with automake-1.9.6 from autoconf-2.62. +# Remove this macro when we can assume autoconf >= 2.62 or +# autoconf >= 2.60 && automake >= 1.10. +m4_ifdef([AC_PROG_MKDIR_P], [ + dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed. + m4_define([AC_PROG_MKDIR_P], + m4_defn([AC_PROG_MKDIR_P])[ + AC_SUBST([MKDIR_P])])], [ + dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P. + AC_DEFUN_ONCE([AC_PROG_MKDIR_P], + [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake + MKDIR_P='$(mkdir_p)' + AC_SUBST([MKDIR_P])])]) + +# AC_C_RESTRICT +# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61, +# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++ +# works. +# This definition can be removed once autoconf >= 2.62 can be assumed. +m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.62]),[-1],[ +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 s[1]; + int * $ac_kw t = s; + t[0] = 0; + return foo(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, even + though the corresponding Sun C compiler does, which causes + "#define restrict _Restrict" in the previous line. Perhaps some future + version of Sun C++ will work with _Restrict; if so, it'll probably + define __RESTRICT, just as Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +#endif]) + case $ac_cv_c_restrict in + restrict) ;; + no) AC_DEFINE([restrict], []) ;; + *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; + esac +]) +]) + +# 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" +]) diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4 new file mode 100644 index 0000000..2c0054d --- /dev/null +++ b/m4/gnulib-comp.m4 @@ -0,0 +1,1309 @@ +# -*- buffer-read-only: t -*- vi: set ro: +# DO NOT EDIT! GENERATED AUTOMATICALLY! +# DO NOT EDIT! GENERATED AUTOMATICALLY! +# Copyright (C) 2002-2010 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. 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 using CVS, 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 + AC_REQUIRE([AC_PROG_RANLIB]) + AC_REQUIRE([AM_PROG_CC_C_O]) + # Code from module alloca: + # Code from module alloca-opt: + # Code from module alloca-opt-tests: + # Code from module announce-gen: + # Code from module arg-nonnull: + # Code from module argmatch: + # Code from module argmatch-tests: + # Code from module binary-io: + # Code from module binary-io-tests: + # Code from module bitrotate: + # Code from module bitrotate-tests: + # Code from module btowc: + # Code from module btowc-tests: + # Code from module c++defs: + # Code from module c-ctype: + # Code from module c-ctype-tests: + # Code from module c-stack: + # Code from module c-stack-tests: + # Code from module c-strcase: + # Code from module c-strcase-tests: + # Code from module clock-time: + # Code from module config-h: + # Code from module configmake: + # Code from module diffseq: + # Code from module dirname: + # Code from module dirname-lgpl: + # Code from module dirname-tests: + # Code from module do-release-commit-and-tag: + # Code from module double-slash-root: + # Code from module dup2: + # Code from module dup2-tests: + # Code from module environ: + # Code from module environ-tests: + # Code from module errno: + # Code from module errno-tests: + # Code from module error: + # Code from module exclude: + # Code from module exclude-tests: + # Code from module exit: + # Code from module exitfail: + # Code from module extensions: + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + # Code from module fcntl: + # Code from module fcntl-h: + # Code from module fcntl-h-tests: + # Code from module fcntl-tests: + # Code from module fdl: + # Code from module file-type: + # Code from module fnmatch: + # Code from module fnmatch-gnu: + # Code from module fnmatch-tests: + # Code from module freopen: + # Code from module freopen-safer: + # Code from module freopen-safer-tests: + # Code from module freopen-tests: + # Code from module gendocs: + # Code from module getdtablesize: + # Code from module getdtablesize-tests: + # Code from module getopt: + # Code from module getopt-gnu: + # Code from module getopt-posix: + # Code from module getopt-posix-tests: + # Code from module gettext: + # Code from module gettext-h: + # Code from module gettime: + # Code from module gettimeofday: + # Code from module gettimeofday-tests: + # Code from module git-version-gen: + # Code from module gitlog-to-changelog: + # Code from module gnu-make: + # Code from module gnu-web-doc-update: + # Code from module gnumakefile: + # Code from module gnupload: + # Code from module gperf: + # Code from module hard-locale: + # Code from module hash: + # Code from module hash-pjw: + # Code from module hash-tests: + # Code from module havelib: + # Code from module iconv: + # Code from module iconv-h: + # Code from module iconv-h-tests: + # Code from module iconv-tests: + # Code from module iconv_open: + # Code from module ignore-value: + # Code from module include_next: + # Code from module inline: + # Code from module intprops: + # Code from module inttostr: + # Code from module inttypes: + # Code from module inttypes-tests: + # Code from module langinfo: + # Code from module langinfo-tests: + # Code from module libsigsegv: + # Code from module localcharset: + # Code from module lstat: + # Code from module lstat-tests: + # Code from module maintainer-makefile: + # Code from module malloc: + # Code from module malloc-posix: + # Code from module malloca: + # Code from module malloca-tests: + # Code from module manywarnings: + # Code from module mbchar: + # Code from module mbiter: + # Code from module mbrlen: + # Code from module mbrtowc: + # Code from module mbrtowc-tests: + # Code from module mbscasecmp: + # Code from module mbscasecmp-tests: + # Code from module mbsinit: + # Code from module mbsinit-tests: + # Code from module mbslen: + # Code from module mbsrtowcs: + # Code from module mbsrtowcs-tests: + # Code from module mbsstr: + # Code from module mbsstr-tests: + # Code from module mbuiter: + # Code from module memchr: + # Code from module memchr-tests: + # Code from module mkstemp: + # Code from module mktime: + # Code from module multiarch: + # Code from module nl_langinfo: + # Code from module nl_langinfo-tests: + # Code from module open: + # Code from module open-tests: + # Code from module pathmax: + # Code from module progname: + # Code from module propername: + # Code from module putenv: + # Code from module quote: + # Code from module quotearg: + # Code from module quotearg-tests: + # Code from module regex: + # Code from module same-inode: + # Code from module setenv: + # Code from module setenv-tests: + # Code from module sh-quote: + # Code from module sigaction: + # Code from module sigaction-tests: + # Code from module signal: + # Code from module signal-tests: + # Code from module sigprocmask: + # Code from module sleep: + # Code from module sleep-tests: + # Code from module ssize_t: + # Code from module stat: + # Code from module stat-macros: + # Code from module stat-tests: + # Code from module stat-time: + # Code from module stat-time-tests: + # 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. With Autoconf 2.60 or later, + dnl AC_PROG_CC_STDC arranges for this. With older Autoconf AC_PROG_CC_STDC + dnl shouldn't hurt, though installers are on their own to set c99 mode. + AC_REQUIRE([AC_PROG_CC_STDC]) + # Code from module stdbool: + # Code from module stdbool-tests: + # Code from module stddef: + # Code from module stddef-tests: + # Code from module stdint: + # Code from module stdint-tests: + # Code from module stdio: + # Code from module stdio-tests: + # Code from module stdlib: + # Code from module stdlib-tests: + # Code from module strcase: + # Code from module streq: + # Code from module strerror: + # Code from module strerror-tests: + # Code from module strftime: + # Code from module striconv: + # Code from module striconv-tests: + # Code from module string: + # Code from module string-tests: + # Code from module strings: + # Code from module strings-tests: + # Code from module strndup: + # Code from module strnlen: + # Code from module strnlen1: + # Code from module strptime: + # Code from module strtoimax: + # Code from module strtol: + # Code from module strtoll: + # Code from module strtoul: + # Code from module strtoull: + # Code from module strtoumax: + # Code from module symlink: + # Code from module symlink-tests: + # Code from module sys_stat: + # Code from module sys_stat-tests: + # Code from module sys_time: + # Code from module sys_time-tests: + # Code from module sys_wait: + # Code from module sys_wait-tests: + # Code from module tempname: + # Code from module time: + # Code from module time-tests: + # Code from module time_r: + # Code from module timegm: + # Code from module timespec: + # Code from module trim: + # Code from module unistd: + # Code from module unistd-tests: + # Code from module unitypes: + # Code from module uniwidth/base: + # Code from module uniwidth/width: + # Code from module uniwidth/width-tests: + # Code from module unlocked-io: + # Code from module unsetenv: + # Code from module unsetenv-tests: + # Code from module update-copyright: + # Code from module update-copyright-tests: + # Code from module useless-if-before-free: + # Code from module usleep: + # Code from module usleep-tests: + # Code from module vc-list-files: + # Code from module vc-list-files-tests: + # Code from module verify: + # Code from module version-etc: + # Code from module version-etc-fsf: + # Code from module version-etc-tests: + # Code from module warn-on-use: + # Code from module warnings: + # Code from module wchar: + # Code from module wchar-tests: + # Code from module wcrtomb: + # Code from module wcrtomb-tests: + # Code from module wctob: + # Code from module wctype: + # Code from module wctype-tests: + # Code from module wcwidth: + # Code from module wcwidth-tests: + # Code from module xalloc: + # Code from module xalloc-die: + # Code from module xalloc-die-tests: + # Code from module xfreopen: + # Code from module xstriconv: + # Code from module xstrndup: + # Code from module xstrtol: + # Code from module xstrtol-tests: + # Code from module xstrtoumax: + # Code from module xstrtoumax-tests: +]) + +# 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], [false]) + gl_cond_libtool=false + gl_libdeps= + gl_ltlibdeps= + 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' + # Code from module alloca: + # Code from module alloca-opt: + gl_FUNC_ALLOCA + # Code from module announce-gen: + # Code from module arg-nonnull: + # Code from module bitrotate: + AC_REQUIRE([AC_C_INLINE]) + # Code from module btowc: + gl_FUNC_BTOWC + gl_WCHAR_MODULE_INDICATOR([btowc]) + # Code from module c++defs: + # Code from module c-ctype: + # Code from module c-stack: + gl_C_STACK + # Code from module c-strcase: + # Code from module clock-time: + gl_CLOCK_TIME + # Code from module config-h: + gl_CONFIG_H + # Code from module configmake: + # Code from module diffseq: + # Code from module dirname: + gl_DIRNAME + gl_MODULE_INDICATOR([dirname]) + # Code from module dirname-lgpl: + gl_DIRNAME_LGPL + # Code from module do-release-commit-and-tag: + # Code from module double-slash-root: + gl_DOUBLE_SLASH_ROOT + # Code from module dup2: + gl_FUNC_DUP2 + gl_UNISTD_MODULE_INDICATOR([dup2]) + # Code from module errno: + gl_HEADER_ERRNO_H + # Code from module error: + gl_ERROR + m4_ifdef([AM_XGETTEXT_OPTION], + [AM_][XGETTEXT_OPTION([--flag=error:3:c-format]) + AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) + # Code from module exclude: + gl_EXCLUDE + # Code from module exit: + # Code from module exitfail: + # Code from module extensions: + # Code from module fcntl: + gl_FUNC_FCNTL + gl_FCNTL_MODULE_INDICATOR([fcntl]) + # Code from module fcntl-h: + gl_FCNTL_H + # Code from module fdl: + # Code from module file-type: + gl_FILE_TYPE + # Code from module fnmatch: + gl_FUNC_FNMATCH_POSIX + # Code from module fnmatch-gnu: + gl_FUNC_FNMATCH_GNU + # Code from module freopen: + gl_FUNC_FREOPEN + gl_STDIO_MODULE_INDICATOR([freopen]) + # Code from module freopen-safer: + gl_FREOPEN_SAFER + gl_MODULE_INDICATOR([freopen-safer]) + # Code from module gendocs: + # Code from module getdtablesize: + gl_FUNC_GETDTABLESIZE + gl_UNISTD_MODULE_INDICATOR([getdtablesize]) + # Code from module getopt: + # Code from module getopt-gnu: + gl_FUNC_GETOPT_GNU + gl_MODULE_INDICATOR_FOR_TESTS([getopt-gnu]) + # Code from module getopt-posix: + gl_FUNC_GETOPT_POSIX + # Code from module gettext: + dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac. + AM_GNU_GETTEXT_VERSION([0.17]) + # Code from module gettext-h: + AC_SUBST([LIBINTL]) + AC_SUBST([LTLIBINTL]) + # Code from module gettime: + gl_GETTIME + # Code from module gettimeofday: + gl_FUNC_GETTIMEOFDAY + gl_SYS_TIME_MODULE_INDICATOR([gettimeofday]) + # Code from module git-version-gen: + # Code from module gitlog-to-changelog: + # Code from module gnu-make: + gl_GNU_MAKE + # Code from module gnu-web-doc-update: + # Code from module gnumakefile: + # 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])]) + # Code from module gnupload: + # Code from module gperf: + # Code from module hard-locale: + gl_HARD_LOCALE + # Code from module hash: + gl_HASH + # Code from module havelib: + # Code from module iconv: + AM_ICONV + # Code from module iconv-h: + gl_ICONV_H + # Code from module iconv_open: + gl_FUNC_ICONV_OPEN + # Code from module ignore-value: + AC_REQUIRE([AC_C_INLINE]) + # Code from module include_next: + # Code from module inline: + gl_INLINE + # Code from module intprops: + # Code from module inttostr: + gl_INTTOSTR + # Code from module inttypes: + gl_INTTYPES_H + # Code from module langinfo: + gl_LANGINFO_H + # Code from module libsigsegv: + gl_LIBSIGSEGV + # Code from module localcharset: + gl_LOCALCHARSET + LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(top_builddir)/$gl_source_base\"" + AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) + # Code from module lstat: + gl_FUNC_LSTAT + gl_SYS_STAT_MODULE_INDICATOR([lstat]) + # Code from module maintainer-makefile: + AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER], + [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])]) + # Code from module malloc: + AC_FUNC_MALLOC + AC_DEFINE([GNULIB_MALLOC_GNU], 1, [Define to indicate the 'malloc' module.]) + # Code from module malloc-posix: + gl_FUNC_MALLOC_POSIX + gl_STDLIB_MODULE_INDICATOR([malloc-posix]) + # Code from module malloca: + gl_MALLOCA + # Code from module manywarnings: + # Code from module mbchar: + gl_MBCHAR + # Code from module mbiter: + gl_MBITER + # Code from module mbrlen: + gl_FUNC_MBRLEN + gl_WCHAR_MODULE_INDICATOR([mbrlen]) + # Code from module mbrtowc: + gl_FUNC_MBRTOWC + gl_WCHAR_MODULE_INDICATOR([mbrtowc]) + # Code from module mbscasecmp: + gl_STRING_MODULE_INDICATOR([mbscasecmp]) + # Code from module mbsinit: + gl_FUNC_MBSINIT + gl_WCHAR_MODULE_INDICATOR([mbsinit]) + # Code from module mbslen: + gl_FUNC_MBSLEN + gl_STRING_MODULE_INDICATOR([mbslen]) + # Code from module mbsrtowcs: + gl_FUNC_MBSRTOWCS + gl_WCHAR_MODULE_INDICATOR([mbsrtowcs]) + # Code from module mbsstr: + gl_STRING_MODULE_INDICATOR([mbsstr]) + # Code from module mbuiter: + gl_MBITER + # Code from module memchr: + gl_FUNC_MEMCHR + gl_STRING_MODULE_INDICATOR([memchr]) + # Code from module mkstemp: + gl_FUNC_MKSTEMP + gl_STDLIB_MODULE_INDICATOR([mkstemp]) + # Code from module mktime: + gl_FUNC_MKTIME + gl_TIME_MODULE_INDICATOR([mktime]) + # Code from module multiarch: + gl_MULTIARCH + # Code from module nl_langinfo: + gl_FUNC_NL_LANGINFO + gl_LANGINFO_MODULE_INDICATOR([nl_langinfo]) + # Code from module open: + gl_FUNC_OPEN + gl_FCNTL_MODULE_INDICATOR([open]) + # Code from module progname: + AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>]) + AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include <errno.h>]) + # Code from module propername: + m4_ifdef([AM_XGETTEXT_OPTION], + [AM_][XGETTEXT_OPTION([--keyword='proper_name:1,\"This is a proper name. See the gettext manual, section Names.\"']) + AM_][XGETTEXT_OPTION([--keyword='proper_name_utf8:1,\"This is a proper name. See the gettext manual, section Names.\"'])]) + # Code from module quote: + gl_QUOTE + # Code from module quotearg: + gl_QUOTEARG + # Code from module regex: + gl_REGEX + # Code from module sh-quote: + # Code from module sigaction: + gl_SIGACTION + gl_SIGNAL_MODULE_INDICATOR([sigaction]) + # Code from module signal: + gl_SIGNAL_H + # Code from module sigprocmask: + gl_SIGNALBLOCKING + gl_SIGNAL_MODULE_INDICATOR([sigprocmask]) + # Code from module ssize_t: + gt_TYPE_SSIZE_T + # Code from module stat: + gl_FUNC_STAT + gl_SYS_STAT_MODULE_INDICATOR([stat]) + # Code from module stat-macros: + # Code from module stat-time: + gl_STAT_TIME + gl_STAT_BIRTHTIME + # Code from module stdarg: + gl_STDARG_H + # Code from module stdbool: + AM_STDBOOL_H + # Code from module stddef: + gl_STDDEF_H + # Code from module stdint: + gl_STDINT_H + # Code from module stdio: + gl_STDIO_H + # Code from module stdlib: + gl_STDLIB_H + # Code from module strcase: + gl_STRCASE + # Code from module streq: + # Code from module strerror: + gl_FUNC_STRERROR + gl_STRING_MODULE_INDICATOR([strerror]) + # Code from module strftime: + gl_FUNC_GNU_STRFTIME + # Code from module striconv: + if test $gl_cond_libtool = false; then + gl_ltlibdeps="$gl_ltlibdeps $LTLIBICONV" + gl_libdeps="$gl_libdeps $LIBICONV" + fi + # Code from module string: + gl_HEADER_STRING_H + # Code from module strings: + gl_HEADER_STRINGS_H + # Code from module strndup: + gl_FUNC_STRNDUP + gl_STRING_MODULE_INDICATOR([strndup]) + # Code from module strnlen: + gl_FUNC_STRNLEN + gl_STRING_MODULE_INDICATOR([strnlen]) + # Code from module strnlen1: + # Code from module strptime: + gl_FUNC_STRPTIME + gl_TIME_MODULE_INDICATOR([strptime]) + # Code from module strtoimax: + gl_FUNC_STRTOIMAX + gl_INTTYPES_MODULE_INDICATOR([strtoimax]) + # Code from module strtol: + gl_FUNC_STRTOL + # Code from module strtoll: + gl_FUNC_STRTOLL + gl_STDLIB_MODULE_INDICATOR([strtoll]) + # Code from module strtoul: + gl_FUNC_STRTOUL + # Code from module strtoull: + gl_FUNC_STRTOULL + gl_STDLIB_MODULE_INDICATOR([strtoull]) + # Code from module strtoumax: + gl_FUNC_STRTOUMAX + gl_INTTYPES_MODULE_INDICATOR([strtoumax]) + # Code from module sys_stat: + gl_HEADER_SYS_STAT_H + AC_PROG_MKDIR_P + # Code from module sys_time: + gl_HEADER_SYS_TIME_H + AC_PROG_MKDIR_P + # Code from module sys_wait: + gl_SYS_WAIT_H + AC_PROG_MKDIR_P + # Code from module tempname: + gl_FUNC_GEN_TEMPNAME + # Code from module time: + gl_HEADER_TIME_H + # Code from module time_r: + gl_TIME_R + gl_TIME_MODULE_INDICATOR([time_r]) + # Code from module timegm: + gl_FUNC_TIMEGM + gl_TIME_MODULE_INDICATOR([timegm]) + # Code from module timespec: + gl_TIMESPEC + # Code from module trim: + # Code from module unistd: + gl_UNISTD_H + # Code from module unitypes: + # Code from module uniwidth/base: + # Code from module uniwidth/width: + # Code from module unlocked-io: + gl_FUNC_GLIBC_UNLOCKED_IO + # Code from module update-copyright: + # Code from module useless-if-before-free: + # Code from module vc-list-files: + # Code from module verify: + # Code from module version-etc: + gl_VERSION_ETC + # Code from module version-etc-fsf: + # Code from module warn-on-use: + # Code from module warnings: + AC_SUBST([WARN_CFLAGS]) + # Code from module wchar: + gl_WCHAR_H + # Code from module wcrtomb: + gl_FUNC_WCRTOMB + gl_WCHAR_MODULE_INDICATOR([wcrtomb]) + # Code from module wctype: + gl_WCTYPE_H + # Code from module wcwidth: + gl_FUNC_WCWIDTH + gl_WCHAR_MODULE_INDICATOR([wcwidth]) + # Code from module xalloc: + gl_XALLOC + # Code from module xalloc-die: + # Code from module xfreopen: + # Code from module xstriconv: + # Code from module xstrndup: + gl_XSTRNDUP + # Code from module xstrtol: + gl_XSTRTOL + # Code from module xstrtoumax: + # 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='gnulib-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]) + gl_ARGMATCH + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_FR + gt_LOCALE_TR_UTF8 + gl_ENVIRON + gl_UNISTD_MODULE_INDICATOR([environ]) + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_JA + gt_LOCALE_ZH_CN + gt_LOCALE_TR_UTF8 + gt_LOCALE_FR_UTF8 + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_JA + gt_LOCALE_ZH_CN + gt_LOCALE_FR_UTF8 + gt_LOCALE_ZH_CN + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gl_PATHMAX + gl_FUNC_PUTENV + gl_STDLIB_MODULE_INDICATOR([putenv]) + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gl_FUNC_SETENV + gl_STDLIB_MODULE_INDICATOR([setenv]) + gl_FUNC_SLEEP + gl_UNISTD_MODULE_INDICATOR([sleep]) + AC_CHECK_DECLS_ONCE([alarm]) + gt_TYPE_WCHAR_T + gt_TYPE_WINT_T + gl_FUNC_SYMLINK + gl_UNISTD_MODULE_INDICATOR([symlink]) + gl_FUNC_UNSETENV + gl_STDLIB_MODULE_INDICATOR([unsetenv]) + abs_aux_dir=`cd "$ac_aux_dir"; pwd` + AC_SUBST([abs_aux_dir]) + gl_FUNC_USLEEP + gl_UNISTD_MODULE_INDICATOR([usleep]) + abs_aux_dir=`cd "$ac_aux_dir"; pwd` + AC_SUBST([abs_aux_dir]) + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_JA + gt_LOCALE_ZH_CN + gl_FUNC_WCTOB + gl_WCHAR_MODULE_INDICATOR([wctob]) + 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]) + ]) + LIBDIFFUTILS_LIBDEPS="$gl_libdeps" + AC_SUBST([LIBDIFFUTILS_LIBDEPS]) + LIBDIFFUTILS_LTLIBDEPS="$gl_ltlibdeps" + AC_SUBST([LIBDIFFUTILS_LTLIBDEPS]) + LIBTESTS_LIBDEPS="$gltests_libdeps" + AC_SUBST([LIBTESTS_LIBDEPS]) +]) + +# 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], [gnulib-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/arg-nonnull.h + build-aux/c++defs.h + build-aux/config.rpath + build-aux/do-release-commit-and-tag + build-aux/gendocs.sh + build-aux/git-version-gen + build-aux/gitlog-to-changelog + build-aux/gnu-web-doc-update + build-aux/gnupload + build-aux/update-copyright + build-aux/useless-if-before-free + build-aux/vc-list-files + build-aux/warn-on-use.h + doc/fdl.texi + doc/gendocs_template + lib/alloca.c + lib/alloca.in.h + lib/basename-lgpl.c + lib/basename.c + lib/bitrotate.h + lib/btowc.c + lib/c-ctype.c + lib/c-ctype.h + lib/c-stack.c + lib/c-stack.h + lib/c-strcase.h + lib/c-strcasecmp.c + lib/c-strncasecmp.c + lib/config.charset + lib/diffseq.h + lib/dirname-lgpl.c + lib/dirname.c + lib/dirname.h + lib/dup2.c + lib/errno.in.h + lib/error.c + lib/error.h + lib/exclude.c + lib/exclude.h + lib/exitfail.c + lib/exitfail.h + lib/fcntl.c + lib/fcntl.in.h + lib/file-type.c + lib/file-type.h + lib/fnmatch.c + lib/fnmatch.in.h + lib/fnmatch_loop.c + lib/freopen-safer.c + lib/freopen.c + lib/getdtablesize.c + lib/getopt.c + lib/getopt.in.h + lib/getopt1.c + lib/getopt_int.h + lib/gettext.h + lib/gettime.c + lib/gettimeofday.c + lib/hard-locale.c + lib/hard-locale.h + lib/hash.c + lib/hash.h + lib/iconv.in.h + lib/iconv_open-aix.gperf + lib/iconv_open-hpux.gperf + lib/iconv_open-irix.gperf + lib/iconv_open-osf.gperf + lib/iconv_open-solaris.gperf + lib/iconv_open.c + lib/ignore-value.h + lib/imaxtostr.c + lib/intprops.h + lib/inttostr.c + lib/inttostr.h + lib/inttypes.in.h + lib/langinfo.in.h + lib/localcharset.c + lib/localcharset.h + lib/lstat.c + lib/malloc.c + lib/malloca.c + lib/malloca.h + lib/malloca.valgrind + lib/mbchar.c + lib/mbchar.h + lib/mbiter.h + lib/mbrlen.c + lib/mbrtowc.c + lib/mbscasecmp.c + lib/mbsinit.c + lib/mbslen.c + lib/mbsrtowcs-state.c + lib/mbsrtowcs.c + lib/mbsstr.c + lib/mbuiter.h + lib/memchr.c + lib/memchr.valgrind + lib/mkstemp.c + lib/mktime-internal.h + lib/mktime.c + lib/nl_langinfo.c + lib/offtostr.c + lib/open.c + lib/progname.c + lib/progname.h + lib/propername.c + lib/propername.h + lib/quote.c + lib/quote.h + lib/quotearg.c + lib/quotearg.h + lib/ref-add.sin + lib/ref-del.sin + lib/regcomp.c + lib/regex.c + lib/regex.h + lib/regex_internal.c + lib/regex_internal.h + lib/regexec.c + lib/sh-quote.c + lib/sh-quote.h + lib/sig-handler.h + lib/sigaction.c + lib/signal.in.h + lib/sigprocmask.c + lib/stat-macros.h + lib/stat-time.h + lib/stat.c + lib/stdarg.in.h + lib/stdbool.in.h + lib/stddef.in.h + lib/stdint.in.h + lib/stdio--.h + lib/stdio-safer.h + lib/stdio-write.c + lib/stdio.in.h + lib/stdlib.in.h + lib/str-kmp.h + lib/strcasecmp.c + lib/streq.h + lib/strerror.c + lib/strftime.c + lib/strftime.h + lib/striconv.c + lib/striconv.h + lib/string.in.h + lib/strings.in.h + lib/stripslash.c + lib/strncasecmp.c + lib/strndup.c + lib/strnlen.c + lib/strnlen1.c + lib/strnlen1.h + lib/strptime.c + lib/strtoimax.c + lib/strtol.c + lib/strtoll.c + lib/strtoul.c + lib/strtoull.c + lib/strtoumax.c + lib/sys_stat.in.h + lib/sys_time.in.h + lib/sys_wait.in.h + lib/tempname.c + lib/tempname.h + lib/time.in.h + lib/time_r.c + lib/timegm.c + lib/timespec.h + lib/trim.c + lib/trim.h + lib/uinttostr.c + lib/umaxtostr.c + lib/unistd.in.h + lib/unitypes.h + lib/uniwidth.h + lib/uniwidth/cjk.h + lib/uniwidth/width.c + lib/unlocked-io.h + lib/verify.h + lib/version-etc-fsf.c + lib/version-etc.c + lib/version-etc.h + lib/wchar.in.h + lib/wcrtomb.c + lib/wctype.in.h + lib/wcwidth.c + lib/xalloc-die.c + lib/xalloc.h + lib/xfreopen.c + lib/xfreopen.h + lib/xmalloc.c + lib/xstriconv.c + lib/xstriconv.h + lib/xstrndup.c + lib/xstrndup.h + lib/xstrtol-error.c + lib/xstrtol.c + lib/xstrtol.h + lib/xstrtoul.c + lib/xstrtoumax.c + m4/00gnulib.m4 + m4/alloca.m4 + m4/argmatch.m4 + m4/btowc.m4 + m4/c-stack.m4 + m4/clock_time.m4 + m4/codeset.m4 + m4/config-h.m4 + m4/dirname.m4 + m4/dos.m4 + m4/double-slash-root.m4 + m4/dup2.m4 + m4/eealloc.m4 + m4/environ.m4 + m4/errno_h.m4 + m4/error.m4 + m4/exclude.m4 + m4/extensions.m4 + m4/fcntl-o.m4 + m4/fcntl.m4 + m4/fcntl_h.m4 + m4/file-type.m4 + m4/fnmatch.m4 + m4/freopen.m4 + m4/getdtablesize.m4 + m4/getopt.m4 + m4/gettext.m4 + m4/gettime.m4 + m4/gettimeofday.m4 + m4/glibc2.m4 + m4/glibc21.m4 + m4/gnu-make.m4 + m4/gnulib-common.m4 + m4/hard-locale.m4 + m4/hash.m4 + m4/iconv.m4 + m4/iconv_h.m4 + m4/iconv_open.m4 + m4/include_next.m4 + m4/inline.m4 + m4/intdiv0.m4 + m4/intl.m4 + m4/intldir.m4 + m4/intlmacosx.m4 + m4/intmax.m4 + m4/inttostr.m4 + m4/inttypes-pri.m4 + m4/inttypes.m4 + m4/inttypes_h.m4 + m4/langinfo_h.m4 + m4/lcmessage.m4 + m4/lib-ld.m4 + m4/lib-link.m4 + m4/lib-prefix.m4 + m4/libsigsegv.m4 + m4/localcharset.m4 + m4/locale-fr.m4 + m4/locale-ja.m4 + m4/locale-tr.m4 + m4/locale-zh.m4 + m4/lock.m4 + m4/longlong.m4 + m4/lstat.m4 + m4/malloc.m4 + m4/malloca.m4 + m4/manywarnings.m4 + m4/mbchar.m4 + m4/mbiter.m4 + m4/mbrlen.m4 + m4/mbrtowc.m4 + m4/mbsinit.m4 + m4/mbslen.m4 + m4/mbsrtowcs.m4 + m4/mbstate_t.m4 + m4/memchr.m4 + m4/mkstemp.m4 + m4/mktime.m4 + m4/mmap-anon.m4 + m4/mode_t.m4 + m4/multiarch.m4 + m4/nl_langinfo.m4 + m4/nls.m4 + m4/open.m4 + m4/pathmax.m4 + m4/po.m4 + m4/printf-posix.m4 + m4/progtest.m4 + m4/putenv.m4 + m4/quote.m4 + m4/quotearg.m4 + m4/regex.m4 + m4/setenv.m4 + m4/sigaction.m4 + m4/signal_h.m4 + m4/signalblocking.m4 + m4/size_max.m4 + m4/sleep.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-safer.m4 + m4/stdio_h.m4 + m4/stdlib_h.m4 + m4/strcase.m4 + m4/strerror.m4 + m4/strftime.m4 + m4/string_h.m4 + m4/strings_h.m4 + m4/strndup.m4 + m4/strnlen.m4 + m4/strptime.m4 + m4/strtoimax.m4 + m4/strtol.m4 + m4/strtoll.m4 + m4/strtoul.m4 + m4/strtoull.m4 + m4/strtoumax.m4 + m4/symlink.m4 + m4/sys_stat_h.m4 + m4/sys_time_h.m4 + m4/sys_wait_h.m4 + m4/tempname.m4 + m4/threadlib.m4 + m4/time_h.m4 + m4/time_r.m4 + m4/timegm.m4 + m4/timespec.m4 + m4/tm_gmtoff.m4 + m4/uintmax_t.m4 + m4/unistd_h.m4 + m4/unlocked-io.m4 + m4/usleep.m4 + m4/version-etc.m4 + m4/visibility.m4 + m4/warn-on-use.m4 + m4/warnings.m4 + m4/wchar_h.m4 + m4/wchar_t.m4 + m4/wcrtomb.m4 + m4/wctob.m4 + m4/wctype_h.m4 + m4/wcwidth.m4 + m4/wint_t.m4 + m4/xalloc.m4 + m4/xsize.m4 + m4/xstrndup.m4 + m4/xstrtol.m4 + tests/init.sh + tests/locale/fr/LC_MESSAGES/test-quotearg.mo + tests/locale/fr/LC_MESSAGES/test-quotearg.po + tests/macros.h + tests/signature.h + tests/test-alloca-opt.c + tests/test-argmatch.c + tests/test-binary-io.c + tests/test-binary-io.sh + tests/test-bitrotate.c + tests/test-btowc.c + tests/test-btowc1.sh + tests/test-btowc2.sh + tests/test-c-ctype.c + tests/test-c-stack.c + tests/test-c-stack.sh + tests/test-c-stack2.sh + tests/test-c-strcase.sh + tests/test-c-strcasecmp.c + tests/test-c-strncasecmp.c + tests/test-dirname.c + tests/test-dup2.c + tests/test-environ.c + tests/test-errno.c + tests/test-exclude.c + tests/test-exclude1.sh + tests/test-exclude2.sh + tests/test-exclude3.sh + tests/test-exclude4.sh + tests/test-exclude5.sh + tests/test-exclude6.sh + tests/test-exclude7.sh + tests/test-fcntl-h.c + tests/test-fcntl.c + tests/test-fnmatch.c + tests/test-freopen-safer.c + tests/test-freopen.c + tests/test-getdtablesize.c + tests/test-getopt.c + tests/test-getopt.h + tests/test-getopt_long.h + tests/test-gettimeofday.c + tests/test-hash.c + tests/test-iconv-h.c + tests/test-iconv.c + tests/test-inttypes.c + tests/test-langinfo.c + tests/test-lstat.c + tests/test-lstat.h + tests/test-malloca.c + tests/test-mbrtowc.c + tests/test-mbrtowc1.sh + tests/test-mbrtowc2.sh + tests/test-mbrtowc3.sh + tests/test-mbrtowc4.sh + tests/test-mbscasecmp.c + tests/test-mbscasecmp.sh + tests/test-mbsinit.c + tests/test-mbsinit.sh + tests/test-mbsrtowcs.c + tests/test-mbsrtowcs1.sh + tests/test-mbsrtowcs2.sh + tests/test-mbsrtowcs3.sh + tests/test-mbsrtowcs4.sh + tests/test-mbsstr1.c + tests/test-mbsstr2.c + tests/test-mbsstr2.sh + tests/test-mbsstr3.c + tests/test-mbsstr3.sh + tests/test-memchr.c + tests/test-nl_langinfo.c + tests/test-nl_langinfo.sh + tests/test-open.c + tests/test-open.h + tests/test-quotearg.c + tests/test-quotearg.sh + tests/test-setenv.c + tests/test-sigaction.c + tests/test-signal.c + tests/test-sleep.c + tests/test-stat-time.c + tests/test-stat.c + tests/test-stat.h + tests/test-stdbool.c + tests/test-stddef.c + tests/test-stdint.c + tests/test-stdio.c + tests/test-stdlib.c + tests/test-strerror.c + tests/test-striconv.c + tests/test-string.c + tests/test-strings.c + tests/test-symlink.c + tests/test-symlink.h + tests/test-sys_stat.c + tests/test-sys_time.c + tests/test-sys_wait.c + tests/test-time.c + tests/test-unistd.c + tests/test-unsetenv.c + tests/test-update-copyright.sh + tests/test-usleep.c + tests/test-vc-list-files-cvs.sh + tests/test-vc-list-files-git.sh + tests/test-version-etc.c + tests/test-version-etc.sh + tests/test-wchar.c + tests/test-wcrtomb.c + tests/test-wcrtomb.sh + tests/test-wctype.c + tests/test-wcwidth.c + tests/test-xalloc-die.c + tests/test-xalloc-die.sh + tests/test-xstrtol.c + tests/test-xstrtol.sh + tests/test-xstrtoul.c + tests/test-xstrtoumax.c + tests/test-xstrtoumax.sh + tests/uniwidth/test-uc_width.c + tests/uniwidth/test-uc_width2.c + tests/uniwidth/test-uc_width2.sh + tests/zerosize-ptr.h + tests=lib/argmatch.c + tests=lib/argmatch.h + tests=lib/binary-io.h + tests=lib/hash-pjw.c + tests=lib/hash-pjw.h + tests=lib/pathmax.h + tests=lib/putenv.c + tests=lib/same-inode.h + tests=lib/setenv.c + tests=lib/sleep.c + tests=lib/symlink.c + tests=lib/unsetenv.c + tests=lib/usleep.c + tests=lib/wctob.c + top/GNUmakefile + top/maint.mk +]) diff --git a/m4/hard-locale.m4 b/m4/hard-locale.m4 new file mode 100644 index 0000000..fbf9f73 --- /dev/null +++ b/m4/hard-locale.m4 @@ -0,0 +1,12 @@ +# hard-locale.m4 serial 7 +dnl Copyright (C) 2002, 2003, 2004, 2005, 2006, 2009, 2010 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 No prerequisites of lib/hard-locale.c. +AC_DEFUN([gl_HARD_LOCALE], +[ + AC_LIBOBJ([hard-locale]) +]) diff --git a/m4/hash.m4 b/m4/hash.m4 new file mode 100644 index 0000000..414a213 --- /dev/null +++ b/m4/hash.m4 @@ -0,0 +1,14 @@ +# hash.m4 serial 6 +dnl Copyright (C) 2002-2003, 2005-2006, 2009-2010 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_HASH], +[ + AC_LIBOBJ([hash]) + + dnl Prerequisites of lib/hash.c. + AC_REQUIRE([AM_STDBOOL_H]) +]) diff --git a/m4/iconv.m4 b/m4/iconv.m4 new file mode 100644 index 0000000..f46ff14 --- /dev/null +++ b/m4/iconv.m4 @@ -0,0 +1,199 @@ +# iconv.m4 serial 9 (gettext-0.18) +dnl Copyright (C) 2000-2002, 2007-2010 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_TRY_LINK will then fail, the second AC_TRY_LINK 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_TRY_LINK([#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_TRY_LINK([#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, HP-UX 11.11, Solaris 10. + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + AC_TRY_RUN([ +#include <iconv.h> +#include <string.h> +int main () +{ + /* 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 const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + 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, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + return 1; + } + } + /* 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 const char input[] = "\263"; + char buf[10]; + 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, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + return 1; + } + } +#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 const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + 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, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + return 1; + } + } +#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)) + return 1; + return 0; +}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], + [case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac]) + 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]) +]) + +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_TRY_COMPILE([ +#include <stdlib.h> +#include <iconv.h> +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || 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.]) + fi +]) diff --git a/m4/iconv_h.m4 b/m4/iconv_h.m4 new file mode 100644 index 0000000..7366cb9 --- /dev/null +++ b/m4/iconv_h.m4 @@ -0,0 +1,37 @@ +# iconv_h.m4 serial 6 +dnl Copyright (C) 2007-2010 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_ICONV_H], +[ + AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + + dnl Execute this unconditionally, because ICONV_H may be set by other + dnl modules, after this code is executed. + gl_CHECK_NEXT_HEADERS([iconv.h]) +]) + +dnl Unconditionally enables the replacement of <iconv.h>. +AC_DEFUN([gl_REPLACE_ICONV_H], +[ + AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + ICONV_H='iconv.h' +]) + +AC_DEFUN([gl_ICONV_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) +]) + +AC_DEFUN([gl_ICONV_H_DEFAULTS], +[ + dnl Assume proper GNU behavior unless another module says otherwise. + REPLACE_ICONV=0; AC_SUBST([REPLACE_ICONV]) + REPLACE_ICONV_OPEN=0; AC_SUBST([REPLACE_ICONV_OPEN]) + REPLACE_ICONV_UTF=0; AC_SUBST([REPLACE_ICONV_UTF]) + ICONV_H=''; AC_SUBST([ICONV_H]) +]) diff --git a/m4/iconv_open.m4 b/m4/iconv_open.m4 new file mode 100644 index 0000000..60f62ca --- /dev/null +++ b/m4/iconv_open.m4 @@ -0,0 +1,240 @@ +# iconv_open.m4 serial 7 +dnl Copyright (C) 2007-2010 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_ICONV_OPEN], +[ + AC_REQUIRE([AM_ICONV]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + if test "$am_cv_func_iconv" = yes; then + dnl Provide the <iconv.h> override, for the sake of the C++ aliases. + gl_REPLACE_ICONV_H + dnl Test whether iconv_open accepts standardized encoding names. + dnl We know that GNU libiconv and GNU libc do. + AC_EGREP_CPP([gnu_iconv], [ + #include <iconv.h> + #if defined _LIBICONV_VERSION || defined __GLIBC__ + gnu_iconv + #endif + ], [gl_func_iconv_gnu=yes], [gl_func_iconv_gnu=no]) + if test $gl_func_iconv_gnu = no; then + iconv_flavor= + case "$host_os" in + aix*) iconv_flavor=ICONV_FLAVOR_AIX ;; + irix*) iconv_flavor=ICONV_FLAVOR_IRIX ;; + hpux*) iconv_flavor=ICONV_FLAVOR_HPUX ;; + osf*) iconv_flavor=ICONV_FLAVOR_OSF ;; + solaris*) iconv_flavor=ICONV_FLAVOR_SOLARIS ;; + esac + if test -n "$iconv_flavor"; then + AC_DEFINE_UNQUOTED([ICONV_FLAVOR], [$iconv_flavor], + [Define to a symbolic name denoting the flavor of iconv_open() + implementation.]) + gl_REPLACE_ICONV_OPEN + fi + fi + fi +]) + +AC_DEFUN([gl_REPLACE_ICONV_OPEN], +[ + gl_REPLACE_ICONV_H + REPLACE_ICONV_OPEN=1 + AC_LIBOBJ([iconv_open]) +]) + +AC_DEFUN([gl_FUNC_ICONV_OPEN_UTF], +[ + AC_REQUIRE([gl_FUNC_ICONV_OPEN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + if test "$am_cv_func_iconv" = yes; then + if test -n "$am_cv_proto_iconv_arg1"; then + ICONV_CONST="const" + else + ICONV_CONST= + fi + AC_SUBST([ICONV_CONST]) + AC_CACHE_CHECK([whether iconv supports conversion between UTF-8 and UTF-{16,32}{BE,LE}], + [gl_cv_func_iconv_supports_utf], + [ + save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_TRY_RUN([ +#include <iconv.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#define ASSERT(expr) if (!(expr)) return 1; +int main () +{ + /* Test conversion from UTF-8 to UTF-16BE with no errors. */ + { + static const char input[] = + "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; + static const char expected[] = + "\000J\000a\000p\000a\000n\000e\000s\000e\000 \000(\145\345\147\054\212\236\000)\000 \000[\330\065\335\015\330\065\335\036\330\065\335\055\000]"; + iconv_t cd; + char buf[100]; + const char *inptr; + size_t inbytesleft; + char *outptr; + size_t outbytesleft; + size_t res; + cd = iconv_open ("UTF-16BE", "UTF-8"); + ASSERT (cd != (iconv_t)(-1)); + inptr = input; + inbytesleft = sizeof (input) - 1; + outptr = buf; + outbytesleft = sizeof (buf); + res = iconv (cd, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + (sizeof (expected) - 1)); + ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); + ASSERT (iconv_close (cd) == 0); + } + /* Test conversion from UTF-8 to UTF-16LE with no errors. */ + { + static const char input[] = + "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; + static const char expected[] = + "J\000a\000p\000a\000n\000e\000s\000e\000 \000(\000\345\145\054\147\236\212)\000 \000[\000\065\330\015\335\065\330\036\335\065\330\055\335]\000"; + iconv_t cd; + char buf[100]; + const char *inptr; + size_t inbytesleft; + char *outptr; + size_t outbytesleft; + size_t res; + cd = iconv_open ("UTF-16LE", "UTF-8"); + ASSERT (cd != (iconv_t)(-1)); + inptr = input; + inbytesleft = sizeof (input) - 1; + outptr = buf; + outbytesleft = sizeof (buf); + res = iconv (cd, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + (sizeof (expected) - 1)); + ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); + ASSERT (iconv_close (cd) == 0); + } + /* Test conversion from UTF-8 to UTF-32BE with no errors. */ + { + static const char input[] = + "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; + static const char expected[] = + "\000\000\000J\000\000\000a\000\000\000p\000\000\000a\000\000\000n\000\000\000e\000\000\000s\000\000\000e\000\000\000 \000\000\000(\000\000\145\345\000\000\147\054\000\000\212\236\000\000\000)\000\000\000 \000\000\000[\000\001\325\015\000\001\325\036\000\001\325\055\000\000\000]"; + iconv_t cd; + char buf[100]; + const char *inptr; + size_t inbytesleft; + char *outptr; + size_t outbytesleft; + size_t res; + cd = iconv_open ("UTF-32BE", "UTF-8"); + ASSERT (cd != (iconv_t)(-1)); + inptr = input; + inbytesleft = sizeof (input) - 1; + outptr = buf; + outbytesleft = sizeof (buf); + res = iconv (cd, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + (sizeof (expected) - 1)); + ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); + ASSERT (iconv_close (cd) == 0); + } + /* Test conversion from UTF-8 to UTF-32LE with no errors. */ + { + static const char input[] = + "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; + static const char expected[] = + "J\000\000\000a\000\000\000p\000\000\000a\000\000\000n\000\000\000e\000\000\000s\000\000\000e\000\000\000 \000\000\000(\000\000\000\345\145\000\000\054\147\000\000\236\212\000\000)\000\000\000 \000\000\000[\000\000\000\015\325\001\000\036\325\001\000\055\325\001\000]\000\000\000"; + iconv_t cd; + char buf[100]; + const char *inptr; + size_t inbytesleft; + char *outptr; + size_t outbytesleft; + size_t res; + cd = iconv_open ("UTF-32LE", "UTF-8"); + ASSERT (cd != (iconv_t)(-1)); + inptr = input; + inbytesleft = sizeof (input) - 1; + outptr = buf; + outbytesleft = sizeof (buf); + res = iconv (cd, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + (sizeof (expected) - 1)); + ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); + ASSERT (iconv_close (cd) == 0); + } + /* Test conversion from UTF-16BE to UTF-8 with no errors. + This test fails on NetBSD 3.0. */ + { + static const char input[] = + "\000J\000a\000p\000a\000n\000e\000s\000e\000 \000(\145\345\147\054\212\236\000)\000 \000[\330\065\335\015\330\065\335\036\330\065\335\055\000]"; + static const char expected[] = + "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; + iconv_t cd; + char buf[100]; + const char *inptr; + size_t inbytesleft; + char *outptr; + size_t outbytesleft; + size_t res; + cd = iconv_open ("UTF-8", "UTF-16BE"); + ASSERT (cd != (iconv_t)(-1)); + inptr = input; + inbytesleft = sizeof (input) - 1; + outptr = buf; + outbytesleft = sizeof (buf); + res = iconv (cd, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + (sizeof (expected) - 1)); + ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); + ASSERT (iconv_close (cd) == 0); + } + return 0; +}], [gl_cv_func_iconv_supports_utf=yes], [gl_cv_func_iconv_supports_utf=no], + [ + dnl We know that GNU libiconv, GNU libc, and Solaris >= 9 do. + dnl OSF/1 5.1 has these encodings, but inserts a BOM in the "to" + dnl direction. + gl_cv_func_iconv_supports_utf=no + if test $gl_func_iconv_gnu = yes; then + gl_cv_func_iconv_supports_utf=yes + else +changequote(,)dnl + case "$host_os" in + solaris2.9 | solaris2.1[0-9]) gl_cv_func_iconv_supports_utf=yes ;; + esac +changequote([,])dnl + fi + ]) + LIBS="$save_LIBS" + ]) + if test $gl_cv_func_iconv_supports_utf = no; then + REPLACE_ICONV_UTF=1 + AC_DEFINE([REPLACE_ICONV_UTF], [1], + [Define if the iconv() functions are enhanced to handle the UTF-{16,32}{BE,LE} encodings.]) + REPLACE_ICONV=1 + gl_REPLACE_ICONV_OPEN + AC_LIBOBJ([iconv]) + AC_LIBOBJ([iconv_close]) + fi + fi +]) diff --git a/m4/include_next.m4 b/m4/include_next.m4 new file mode 100644 index 0000000..c7e0672 --- /dev/null +++ b/m4/include_next.m4 @@ -0,0 +1,187 @@ +# include_next.m4 serial 14 +dnl Copyright (C) 2006-2010 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 and PRAGMA_SYSTEM_HEADER. +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__'. + +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" + AC_COMPILE_IFELSE([#include <conftest.h>], + [gl_cv_have_include_next=yes], + [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" + AC_COMPILE_IFELSE([#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]) +]) + +# 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. +AC_DEFUN([gl_CHECK_NEXT_HEADERS], +[ + AC_REQUIRE([gl_INCLUDE_NEXT]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_HEADERS_ONCE([$1]) + + 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]), + [AS_VAR_PUSHDEF([gl_header_exists], + [ac_cv_header_]m4_defn([gl_HEADER_NAME])) + if test AS_VAR_GET(gl_header_exists) = yes; then + AC_LANG_CONFTEST( + [AC_LANG_SOURCE( + [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]] + )]) + 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 + 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_next_header], + ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | + sed -n '\#/]m4_defn([gl_HEADER_NAME])[#{ + s#.*"\(.*/]m4_defn([gl_HEADER_NAME])[\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"']) + else + AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) + fi + AS_VAR_POPDEF([gl_header_exists])]) + 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])]) +]) diff --git a/m4/inline.m4 b/m4/inline.m4 new file mode 100644 index 0000000..4ef768d --- /dev/null +++ b/m4/inline.m4 @@ -0,0 +1,40 @@ +# inline.m4 serial 4 +dnl Copyright (C) 2006, 2009, 2010 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 for the 'inline' keyword or equivalent. +dnl Define 'inline' to a supported equivalent, or to nothing if not supported, +dnl like AC_C_INLINE does. Also, define HAVE_INLINE if 'inline' or an +dnl equivalent is effectively supported, i.e. if the compiler is likely to +dnl drop unused 'static inline' functions. +AC_DEFUN([gl_INLINE], +[ + AC_REQUIRE([AC_C_INLINE]) + AC_CACHE_CHECK([whether the compiler generally respects inline], + [gl_cv_c_inline_effective], + [if test $ac_cv_c_inline = no; then + gl_cv_c_inline_effective=no + else + dnl GCC defines __NO_INLINE__ if not optimizing or if -fno-inline is + dnl specified. + dnl Use AC_COMPILE_IFELSE here, not AC_EGREP_CPP, because the result + dnl depends on optimization flags, which can be in CFLAGS. + dnl (AC_EGREP_CPP looks only at the CPPFLAGS.) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[]], + [[#ifdef __NO_INLINE__ + #error "inline is not effective" + #endif]])], + [gl_cv_c_inline_effective=yes], + [gl_cv_c_inline_effective=no]) + fi + ]) + if test $gl_cv_c_inline_effective = yes; then + AC_DEFINE([HAVE_INLINE], [1], + [Define to 1 if the compiler supports one of the keywords + 'inline', '__inline__', '__inline' and effectively inlines + functions marked as such.]) + fi +]) diff --git a/m4/intlmacosx.m4 b/m4/intlmacosx.m4 new file mode 100644 index 0000000..dd91025 --- /dev/null +++ b/m4/intlmacosx.m4 @@ -0,0 +1,51 @@ +# intlmacosx.m4 serial 3 (gettext-0.18) +dnl Copyright (C) 2004-2010 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 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 package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Checks for special options needed on MacOS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ + dnl Check for API introduced in MacOS X 10.2. + AC_CACHE_CHECK([for CFPreferencesCopyAppValue], + [gt_cv_func_CFPreferencesCopyAppValue], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_TRY_LINK([#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 MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) + fi + dnl Check for API introduced in MacOS X 10.3. + AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_TRY_LINK([#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 MacOS 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/m4/inttostr.m4 b/m4/inttostr.m4 new file mode 100644 index 0000000..3e17ed5 --- /dev/null +++ b/m4/inttostr.m4 @@ -0,0 +1,37 @@ +#serial 7 +dnl Copyright (C) 2004, 2005, 2006, 2009, 2010 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_INTTOSTR], +[ + AC_LIBOBJ([imaxtostr]) + AC_LIBOBJ([offtostr]) + AC_LIBOBJ([umaxtostr]) + AC_LIBOBJ([uinttostr]) + + gl_PREREQ_INTTOSTR + gl_PREREQ_IMAXTOSTR + gl_PREREQ_OFFTOSTR + gl_PREREQ_UMAXTOSTR + gl_PREREQ_UINTTOSTR +]) + +# Prerequisites of lib/inttostr.h. +AC_DEFUN([gl_PREREQ_INTTOSTR], [ + AC_REQUIRE([AC_TYPE_OFF_T]) + : +]) + +# Prerequisites of lib/imaxtostr.c. +AC_DEFUN([gl_PREREQ_IMAXTOSTR], [:]) + +# Prerequisites of lib/offtostr.c. +AC_DEFUN([gl_PREREQ_OFFTOSTR], [:]) + +# Prerequisites of lib/umaxtostr.c. +AC_DEFUN([gl_PREREQ_UMAXTOSTR], [:]) + +# Prerequisites of lib/uinttostr.c. +AC_DEFUN([gl_PREREQ_UINTTOSTR], [:]) diff --git a/m4/inttypes-pri.m4 b/m4/inttypes-pri.m4 new file mode 100644 index 0000000..718a4f4 --- /dev/null +++ b/m4/inttypes-pri.m4 @@ -0,0 +1,36 @@ +# inttypes-pri.m4 serial 6 (gettext-0.18) +dnl Copyright (C) 1997-2002, 2006, 2008-2010 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.52]) + +# 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_TRY_COMPILE([#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/m4/inttypes.m4 b/m4/inttypes.m4 new file mode 100644 index 0000000..e1be6e9 --- /dev/null +++ b/m4/inttypes.m4 @@ -0,0 +1,302 @@ +# inttypes.m4 serial 18 +dnl Copyright (C) 2006-2010 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_STDINT_H]) + AC_REQUIRE([gt_INTTYPES_PRI]) + AC_CHECK_HEADERS_ONCE([inttypes.h]) + AC_CHECK_DECLS_ONCE([imaxabs]) + AC_CHECK_DECLS_ONCE([imaxdiv]) + AC_CHECK_DECLS_ONCE([strtoimax]) + AC_CHECK_DECLS_ONCE([strtoumax]) + + dnl Now see if we need a substitute <inttypes.h>. + dnl A complete <inttypes.h> requires + dnl - a complete <stdint.h>, + dnl - the existence of an <inttypes.h>, + dnl - that imaxabs, imaxdiv, strtoimax, strtoumax are declared, + dnl - some additional tests. + AC_CACHE_CHECK([whether inttypes.h conforms to C99], + [gl_cv_header_working_inttypes_h], + [gl_cv_header_working_inttypes_h=no + if test "$gl_cv_header_working_stdint_h" = yes \ + && test $ac_cv_header_inttypes_h = yes \ + && test "$ac_cv_have_decl_imaxabs" = yes \ + && test "$ac_cv_have_decl_imaxdiv" = yes \ + && test "$ac_cv_have_decl_strtoimax" = yes \ + && test "$ac_cv_have_decl_strtoumax" = yes; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include <stddef.h> +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_FORMAT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* work if build isn't clean */ +#include <inttypes.h> + +/* No need to duplicate the tests of stdint.m4; they are subsumed by + $gl_cv_header_working_stdint_h = yes. */ + +/* Tests for macros supposed to be defined in inttypes.h. */ + +const char *k = /* implicit string concatenation */ +#ifdef INT8_MAX + PRId8 PRIi8 +#endif +#ifdef UINT8_MAX + PRIo8 PRIu8 PRIx8 PRIX8 +#endif +#ifdef INT16_MAX + PRId16 PRIi16 +#endif +#ifdef UINT16_MAX + PRIo16 PRIu16 PRIx16 PRIX16 +#endif +#ifdef INT32_MAX + PRId32 PRIi32 +#endif +#ifdef UINT32_MAX + PRIo32 PRIu32 PRIx32 PRIX32 +#endif +#ifdef INT64_MAX + PRId64 PRIi64 +#endif +#ifdef UINT64_MAX + PRIo64 PRIu64 PRIx64 PRIX64 +#endif + PRIdLEAST8 PRIiLEAST8 PRIoLEAST8 PRIuLEAST8 PRIxLEAST8 PRIXLEAST8 + PRIdLEAST16 PRIiLEAST16 PRIoLEAST16 PRIuLEAST16 PRIxLEAST16 PRIXLEAST16 + PRIdLEAST32 PRIiLEAST32 PRIoLEAST32 PRIuLEAST32 PRIxLEAST32 PRIXLEAST32 + PRIdLEAST64 PRIiLEAST64 + PRIoLEAST64 PRIuLEAST64 PRIxLEAST64 PRIXLEAST64 + PRIdFAST8 PRIiFAST8 PRIoFAST8 PRIuFAST8 PRIxFAST8 PRIXFAST8 + PRIdFAST16 PRIiFAST16 PRIoFAST16 PRIuFAST16 PRIxFAST16 PRIXFAST16 + PRIdFAST32 PRIiFAST32 PRIoFAST32 PRIuFAST32 PRIxFAST32 PRIXFAST32 + PRIdFAST64 PRIiFAST64 + PRIoFAST64 PRIuFAST64 PRIxFAST64 PRIXFAST64 + PRIdMAX PRIiMAX PRIoMAX PRIuMAX PRIxMAX PRIXMAX +#ifdef INTPTR_MAX + PRIdPTR PRIiPTR +#endif +#ifdef UINTPTR_MAX + PRIoPTR PRIuPTR PRIxPTR PRIXPTR +#endif + ; +const char *l = /* implicit string concatenation */ +#ifdef INT8_MAX + SCNd8 SCNi8 +#endif +#ifdef UINT8_MAX + SCNo8 SCNu8 SCNx8 +#endif +#ifdef INT16_MAX + SCNd16 SCNi16 +#endif +#ifdef UINT16_MAX + SCNo16 SCNu16 SCNx16 +#endif +#ifdef INT32_MAX + SCNd32 SCNi32 +#endif +#ifdef UINT32_MAX + SCNo32 SCNu32 SCNx32 +#endif +#ifdef INT64_MAX + SCNd64 SCNi64 +#endif +#ifdef UINT64_MAX + SCNo64 SCNu64 SCNx64 +#endif + SCNdLEAST8 SCNiLEAST8 SCNoLEAST8 SCNuLEAST8 SCNxLEAST8 + SCNdLEAST16 SCNiLEAST16 SCNoLEAST16 SCNuLEAST16 SCNxLEAST16 + SCNdLEAST32 SCNiLEAST32 SCNoLEAST32 SCNuLEAST32 SCNxLEAST32 + SCNdLEAST64 SCNiLEAST64 + SCNoLEAST64 SCNuLEAST64 SCNxLEAST64 + SCNdFAST8 SCNiFAST8 SCNoFAST8 SCNuFAST8 SCNxFAST8 + SCNdFAST16 SCNiFAST16 SCNoFAST16 SCNuFAST16 SCNxFAST16 + SCNdFAST32 SCNiFAST32 SCNoFAST32 SCNuFAST32 SCNxFAST32 + SCNdFAST64 SCNiFAST64 + SCNoFAST64 SCNuFAST64 SCNxFAST64 + SCNdMAX SCNiMAX SCNoMAX SCNuMAX SCNxMAX +#ifdef INTPTR_MAX + SCNdPTR SCNiPTR +#endif +#ifdef UINTPTR_MAX + SCNoPTR SCNuPTR SCNxPTR +#endif + ; + ]])], + [gl_cv_header_working_inttypes_h=yes]) + fi]) + + 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 Ensure that <stdint.h> defines the limit macros, since gnulib's + dnl <inttypes.h> relies on them. This macro is only needed when a + dnl C++ compiler is in use; it has no effect for a C compiler. + dnl Also be careful to define __STDC_LIMIT_MACROS only when gnulib's + dnl <inttypes.h> is going to be created, and to avoid redefinition warnings + dnl if the __STDC_LIMIT_MACROS is already defined through the CPPFLAGS. + AC_DEFINE([GL_TRIGGER_STDC_LIMIT_MACROS], [1], + [Define to make the limit macros in <stdint.h> visible.]) + AH_VERBATIM([__STDC_LIMIT_MACROS_ZZZ], +[/* Ensure that <stdint.h> defines the limit macros, since gnulib's + <inttypes.h> relies on them. */ +#if defined __cplusplus && !defined __STDC_LIMIT_MACROS && GL_TRIGGER_STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS 1 +#endif +]) + + 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]) + + if test "$ac_cv_have_decl_imaxabs" = yes; then + HAVE_DECL_IMAXABS=1 + else + HAVE_DECL_IMAXABS=0 + fi + + if test "$ac_cv_have_decl_imaxdiv" = yes; then + HAVE_DECL_IMAXDIV=1 + else + HAVE_DECL_IMAXDIV=0 + fi + + if test "$ac_cv_have_decl_strtoimax" = yes; then + HAVE_DECL_STRTOIMAX=1 + else + HAVE_DECL_STRTOIMAX=0 + fi + + if test "$ac_cv_have_decl_strtoumax" = yes; then + HAVE_DECL_STRTOUMAX=1 + else + HAVE_DECL_STRTOUMAX=0 + fi + + 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 + + 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]) +]) + +# 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]) +]) diff --git a/m4/langinfo_h.m4 b/m4/langinfo_h.m4 new file mode 100644 index 0000000..11a5698 --- /dev/null +++ b/m4/langinfo_h.m4 @@ -0,0 +1,77 @@ +# langinfo_h.m4 serial 6 +dnl Copyright (C) 2009-2010 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_ERA=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. + 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 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 + else + HAVE_LANGINFO_H=0 + fi + AC_SUBST([HAVE_LANGINFO_H]) + AC_SUBST([HAVE_LANGINFO_CODESET]) + AC_SUBST([HAVE_LANGINFO_ERA]) + + 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/m4/lib-ld_gl.m4 b/m4/lib-ld_gl.m4 new file mode 100644 index 0000000..ebb3052 --- /dev/null +++ b/m4/lib-ld_gl.m4 @@ -0,0 +1,110 @@ +# lib-ld.m4 serial 4 (gettext-0.18) +dnl Copyright (C) 1996-2003, 2009-2010 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/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.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 ld's 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-1.4. Sets the variable LD. +AC_DEFUN([AC_LIB_PROG_LD], +[AC_ARG_WITH([gnu-ld], +[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + 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. + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] + # Canonicalize the path 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 "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL([acl_cv_path_LD], +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + 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 GNU ld's 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="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_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]) +AC_LIB_PROG_LD_GNU +]) diff --git a/m4/lib-link.m4 b/m4/lib-link.m4 new file mode 100644 index 0000000..c73bd8e --- /dev/null +++ b/m4/lib-link.m4 @@ -0,0 +1,774 @@ +# lib-link.m4 serial 21 (gettext-0.18) +dnl Copyright (C) 2001-2010 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.54]) + +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],[translit([$1],[./-], [___])]) + pushdef([NAME],[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],[translit([$1],[./-], [___])]) + pushdef([NAME],[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_TRY_LINK([$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_hardcode_libdir_flag_spec, +dnl acl_hardcode_libdir_separator, +dnl acl_hardcode_direct, +dnl acl_hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + dnl Tell automake >= 1.10 to complain if config.rpath is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [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],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + define([acl_frompackage_]NAME, [$2]) + popdef([NAME]) + pushdef([PACK],[$2]) + pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + define([acl_libsinpackage_]PACKUP, + m4_ifdef([acl_libsinpackage_]PACKUP, [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],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) + pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) + dnl Autoconf >= 2.61 supports dots in --with options. + pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)]) + 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(P_A_C_K[-prefix], +[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib + --without-]]P_A_C_K[[-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([P_A_C_K]) + 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/m4/lib-prefix_gl.m4 b/m4/lib-prefix_gl.m4 new file mode 100644 index 0000000..1601cea --- /dev/null +++ b/m4/lib-prefix_gl.m4 @@ -0,0 +1,224 @@ +# lib-prefix.m4 serial 7 (gettext-0.18) +dnl Copyright (C) 2001-2005, 2008-2010 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_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +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_LIB_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]) + 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 <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>. + 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. + AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], + [AC_EGREP_CPP([sixtyfour bits], [ +#ifdef _LP64 +sixtyfour bits +#endif + ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) + ]) + 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 + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 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 + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" +]) diff --git a/m4/libsigsegv.m4 b/m4/libsigsegv.m4 new file mode 100644 index 0000000..9d255d3 --- /dev/null +++ b/m4/libsigsegv.m4 @@ -0,0 +1,16 @@ +# libsigsegv.m4 serial 4 +dnl Copyright (C) 2002-2003, 2008-2010 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, Sam Steingold. + +AC_DEFUN([gl_LIBSIGSEGV], +[ + AC_LIB_HAVE_LINKFLAGS([sigsegv], [], + [#include <sigsegv.h>], [sigsegv_deinstall_handler();], + [no, consider installing GNU libsigsegv]) + dnl Some other autoconf macros and clisp's configure use this variable. + gl_cv_lib_sigsegv="$ac_cv_libsigsegv" +]) diff --git a/m4/localcharset.m4 b/m4/localcharset.m4 new file mode 100644 index 0000000..ee2e801 --- /dev/null +++ b/m4/localcharset.m4 @@ -0,0 +1,17 @@ +# localcharset.m4 serial 7 +dnl Copyright (C) 2002, 2004, 2006, 2009, 2010 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]) + AC_REQUIRE([gl_FCNTL_O_FLAGS]) + AC_CHECK_DECLS_ONCE([getc_unlocked]) + + dnl Prerequisites of the lib/Makefile.am snippet. + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_GLIBC21]) +]) diff --git a/m4/locale-fr.m4 b/m4/locale-fr.m4 new file mode 100644 index 0000000..001f539 --- /dev/null +++ b/m4/locale-fr.m4 @@ -0,0 +1,185 @@ +# locale-fr.m4 serial 11 +dnl Copyright (C) 2003, 2005-2010 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 () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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; + /* 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; + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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 (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 + /* 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; + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + fi + rm -fr conftest* + ]) + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + AC_SUBST([LOCALE_FR_UTF8]) +]) diff --git a/m4/locale-ja.m4 b/m4/locale-ja.m4 new file mode 100644 index 0000000..0eedaf1 --- /dev/null +++ b/m4/locale-ja.m4 @@ -0,0 +1,107 @@ +# locale-ja.m4 serial 7 +dnl Copyright (C) 2003, 2005-2010 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 () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 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. */ + 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; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + fi + rm -fr conftest* + ]) + LOCALE_JA=$gt_cv_locale_ja + AC_SUBST([LOCALE_JA]) +]) diff --git a/m4/locale-tr.m4 b/m4/locale-tr.m4 new file mode 100644 index 0000000..404c063 --- /dev/null +++ b/m4/locale-tr.m4 @@ -0,0 +1,97 @@ +# locale-tr.m4 serial 6 +dnl Copyright (C) 2003, 2005-2010 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 turkish locale with UTF-8 encoding. +AC_DEFUN([gt_LOCALE_TR_UTF8], +[ + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a turkish Unicode locale], [gt_cv_locale_tr_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, 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. But BeOS does not + implement the Turkish upper-/lowercase mappings. Therefore, let this + program return 1 on BeOS. */ + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the tr_TR 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 eighth month, the second + character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f) + return 1; + /* Check whether the upper-/lowercase mappings are as expected for + Turkish. */ + if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i' + || towupper(0x0131) != 'I' || towlower ('I') != 0x0131) + return 1; + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr_TR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr_TR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr.UTF-8 + else + # None found. + gt_cv_locale_tr_utf8=none + fi + fi + fi + else + gt_cv_locale_tr_utf8=none + fi + rm -fr conftest* + ]) + LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8 + AC_SUBST([LOCALE_TR_UTF8]) +]) diff --git a/m4/locale-zh.m4 b/m4/locale-zh.m4 new file mode 100644 index 0000000..777fd14 --- /dev/null +++ b/m4/locale-zh.m4 @@ -0,0 +1,92 @@ +# locale-zh.m4 serial 6 +dnl Copyright (C) 2003, 2005-2010 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 () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS 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 a month name, no byte in the range 0x80..0x9F occurs. + 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) < 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; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS 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 + 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/m4/longlong_gl.m4 b/m4/longlong_gl.m4 new file mode 100644 index 0000000..cca3c1a --- /dev/null +++ b/m4/longlong_gl.m4 @@ -0,0 +1,106 @@ +# longlong.m4 serial 14 +dnl Copyright (C) 1999-2007, 2009-2010 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_LONG_LONG_INT if 'long long int' works. +# This fixes a bug in Autoconf 2.61, but can be removed once we +# assume 2.62 everywhere. + +# 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_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], + [AC_LINK_IFELSE( + [_AC_TYPE_LONG_LONG_SNIPPET], + [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. + dnl If cross compiling, assume the bug isn't 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=yes], + [ac_cv_type_long_long_int=no], + [ac_cv_type_long_long_int=yes])], + [ac_cv_type_long_long_int=no])]) + 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 fixes a bug in Autoconf 2.61, but can be removed once we +# assume 2.62 everywhere. + +# 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_LINK_IFELSE( + [_AC_TYPE_LONG_LONG_SNIPPET], + [ac_cv_type_unsigned_long_long_int=yes], + [ac_cv_type_unsigned_long_long_int=no])]) + 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/m4/lstat.m4 b/m4/lstat.m4 new file mode 100644 index 0000000..5dbd16e --- /dev/null +++ b/m4/lstat.m4 @@ -0,0 +1,28 @@ +# serial 20 + +# Copyright (C) 1997-2001, 2003-2010 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([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([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) + if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then + dnl Note: AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK does AC_LIBOBJ([lstat]). + REPLACE_LSTAT=1 + fi + # Prerequisites of lib/lstat.c. + AC_REQUIRE([AC_C_INLINE]) + else + HAVE_LSTAT=0 + fi +]) diff --git a/m4/malloc.m4 b/m4/malloc.m4 new file mode 100644 index 0000000..910ac92 --- /dev/null +++ b/m4/malloc.m4 @@ -0,0 +1,41 @@ +# malloc.m4 serial 9 +dnl Copyright (C) 2007, 2009, 2010 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_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_CHECK_MALLOC_POSIX]) + if test $gl_cv_func_malloc_posix = yes; then + HAVE_MALLOC_POSIX=1 + AC_DEFINE([HAVE_MALLOC_POSIX], [1], + [Define if the 'malloc' function is POSIX compliant.]) + else + AC_LIBOBJ([malloc]) + HAVE_MALLOC_POSIX=0 + fi + AC_SUBST([HAVE_MALLOC_POSIX]) +]) + +# 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_TRY_COMPILE([], + [#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + choke me + #endif + ], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no]) + ]) +]) diff --git a/m4/malloca.m4 b/m4/malloca.m4 new file mode 100644 index 0000000..e07c6d9 --- /dev/null +++ b/m4/malloca.m4 @@ -0,0 +1,15 @@ +# malloca.m4 serial 1 +dnl Copyright (C) 2003-2004, 2006-2007, 2009-2010 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/m4/manywarnings.m4 b/m4/manywarnings.m4 new file mode 100644 index 0000000..844a9ba --- /dev/null +++ b/m4/manywarnings.m4 @@ -0,0 +1,108 @@ +# manywarnings.m4 serial 1 +dnl Copyright (C) 2008, 2009, 2010 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 + +# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR) +# -------------------------------------------------- +# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR. +# Elements separated by whitespace. In set logic terms, the function +# does OUTVAR = LISTVAR \ REMOVEVAR. +AC_DEFUN([gl_MANYWARN_COMPLEMENT], +[ + gl_warn_set= + set x $2; shift + for gl_warn_item + do + case " $3 " in + *" $gl_warn_item "*) + ;; + *) + gl_warn_set="$gl_warn_set $gl_warn_item" + ;; + esac + done + $1=$gl_warn_set +]) + +# gl_MANYWARN_ALL_GCC(VARIABLE) +# ----------------------------- +# Add all documented GCC (currently as per version 4.4) warning +# parameters to variable VARIABLE. Note that you need to test them +# using gl_WARN_ADD if you want to make sure your gcc understands it. +AC_DEFUN([gl_MANYWARN_ALL_GCC], +[ + gl_manywarn_set= + for gl_manywarn_item in \ + -Wall \ + -W \ + -Wformat-y2k \ + -Wformat-nonliteral \ + -Wformat-security \ + -Winit-self \ + -Wmissing-include-dirs \ + -Wswitch-default \ + -Wswitch-enum \ + -Wunused \ + -Wunknown-pragmas \ + -Wstrict-aliasing \ + -Wstrict-overflow \ + -Wsystem-headers \ + -Wfloat-equal \ + -Wtraditional \ + -Wtraditional-conversion \ + -Wdeclaration-after-statement \ + -Wundef \ + -Wshadow \ + -Wunsafe-loop-optimizations \ + -Wpointer-arith \ + -Wbad-function-cast \ + -Wc++-compat \ + -Wcast-qual \ + -Wcast-align \ + -Wwrite-strings \ + -Wconversion \ + -Wsign-conversion \ + -Wlogical-op \ + -Waggregate-return \ + -Wstrict-prototypes \ + -Wold-style-definition \ + -Wmissing-prototypes \ + -Wmissing-declarations \ + -Wmissing-noreturn \ + -Wmissing-format-attribute \ + -Wpacked \ + -Wpadded \ + -Wredundant-decls \ + -Wnested-externs \ + -Wunreachable-code \ + -Winline \ + -Winvalid-pch \ + -Wlong-long \ + -Wvla \ + -Wvolatile-register-var \ + -Wdisabled-optimization \ + -Wstack-protector \ + -Woverlength-strings \ + -Wbuiltin-macro-redefined \ + -Wmudflap \ + -Wpacked-bitfield-compat \ + -Wsync-nand \ + ; do + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" + done + # The following are not documented in the manual but are included in + # output from gcc --help=warnings. + for gl_manywarn_item in \ + -Wattributes \ + -Wcoverage-mismatch \ + -Wmultichar \ + -Wunused-macros \ + ; do + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" + done + $1=$gl_manywarn_set +]) diff --git a/m4/mbchar.m4 b/m4/mbchar.m4 new file mode 100644 index 0000000..116ce7e --- /dev/null +++ b/m4/mbchar.m4 @@ -0,0 +1,14 @@ +# mbchar.m4 serial 8 +dnl Copyright (C) 2005-2007, 2009-2010 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 autoconf tests required for use of mbchar.m4 +dnl From Bruno Haible. + +AC_DEFUN([gl_MBCHAR], +[ + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([AC_C_INLINE]) +]) diff --git a/m4/mbiter.m4 b/m4/mbiter.m4 new file mode 100644 index 0000000..3481050 --- /dev/null +++ b/m4/mbiter.m4 @@ -0,0 +1,18 @@ +# mbiter.m4 serial 5 +dnl Copyright (C) 2005, 2008, 2009, 2010 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 autoconf tests required for use of mbiter.h +dnl From Bruno Haible. + +AC_DEFUN([gl_MBITER], +[ + AC_REQUIRE([AC_C_INLINE]) + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + dnl The following line is that so the user can test HAVE_MBRTOWC before + dnl #include "mbiter.h" or "mbuiter.h". It can be removed in 2010. + AC_REQUIRE([AC_FUNC_MBRTOWC]) + : +]) diff --git a/m4/mbrlen.m4 b/m4/mbrlen.m4 new file mode 100644 index 0000000..6049d1a --- /dev/null +++ b/m4/mbrlen.m4 @@ -0,0 +1,197 @@ +# mbrlen.m4 serial 2 +dnl Copyright (C) 2008, 2009, 2010 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 + 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 + if test $HAVE_MBRLEN = 0 || test $REPLACE_MBRLEN = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([mbrlen]) + gl_PREREQ_MBRLEN + 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. + 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_TRY_RUN([ +#include <locale.h> +#include <string.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_TRY_RUN([ +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + /* 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) + return 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) + return 1; + } + } + return 0; +}], + [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_TRY_RUN([ +#include <locale.h> +#include <string.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 + ]) +]) + +# Prerequisites of lib/mbrlen.c. +AC_DEFUN([gl_PREREQ_MBRLEN], [ + : +]) diff --git a/m4/mbrtowc.m4 b/m4/mbrtowc.m4 new file mode 100644 index 0000000..606de5c --- /dev/null +++ b/m4/mbrtowc.m4 @@ -0,0 +1,385 @@ +# mbrtowc.m4 serial 17 +dnl Copyright (C) 2001-2002, 2004-2005, 2008-2010 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 + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBRTOWC=1 + else + gl_MBRTOWC_NULL_ARG + gl_MBRTOWC_RETVAL + gl_MBRTOWC_NUL_RETVAL + case "$gl_cv_func_mbrtowc_null_arg" in + *yes) ;; + *) AC_DEFINE([MBRTOWC_NULL_ARG_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 + fi + fi + if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([mbrtowc]) + gl_PREREQ_MBRTOWC + 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 + if test $REPLACE_MBSTATE_T = 1; then + gl_REPLACE_WCHAR_H + 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. + 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_TRY_RUN([ +#include <locale.h> +#include <string.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 1; + } + 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_TRY_RUN([ +#include <locale.h> +#include <stdlib.h> +#include <string.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 1; + } + return 0; +}], + [gl_cv_func_mbrtowc_sanitycheck=yes], + [gl_cv_func_mbrtowc_sanitycheck=no], + [:]) + fi + ]) +]) + +dnl Test whether mbrtowc supports a NULL string argument correctly. +dnl Result is gl_cv_func_mbrtowc_null_arg. + +AC_DEFUN([gl_MBRTOWC_NULL_ARG], +[ + 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_arg], + [ + 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_arg="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR_UTF8 != none; then + AC_TRY_RUN([ +#include <locale.h> +#include <string.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 1; + } + return 0; +}], [gl_cv_func_mbrtowc_null_arg=yes], [gl_cv_func_mbrtowc_null_arg=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]) dnl for cross-compiles + 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 and Solaris. + hpux* | solaris*) 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; then + AC_TRY_RUN([ +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + /* 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) + return 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) + return 1; + } + } + return 0; +}], + [gl_cv_func_mbrtowc_retval=yes], + [gl_cv_func_mbrtowc_retval=no], + [:]) + 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_TRY_RUN([ +#include <locale.h> +#include <string.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 1; + } + return 0; +}], + [gl_cv_func_mbrtowc_nul_retval=yes], + [gl_cv_func_mbrtowc_nul_retval=no], + [:]) + fi + ]) +]) + +# Prerequisites of lib/mbrtowc.c. +AC_DEFUN([gl_PREREQ_MBRTOWC], [ + : +]) + + +dnl From Paul Eggert + +dnl This override of an autoconf macro can be removed when autoconf 2.60 or +dnl newer can be assumed everywhere. + +m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.60]),[-1],[ +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( + [[#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/m4/mbsinit.m4 b/m4/mbsinit.m4 new file mode 100644 index 0000000..46c106f --- /dev/null +++ b/m4/mbsinit.m4 @@ -0,0 +1,32 @@ +# mbsinit.m4 serial 4 +dnl Copyright (C) 2008, 2010 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_TYPE_MBSTATE_T]) + gl_MBSTATE_T_BROKEN + + AC_CHECK_FUNCS_ONCE([mbsinit]) + if test $ac_cv_func_mbsinit = no; then + HAVE_MBSINIT=0 + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBSINIT=1 + fi + fi + if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([mbsinit]) + gl_PREREQ_MBSINIT + fi +]) + +# Prerequisites of lib/mbsinit.c. +AC_DEFUN([gl_PREREQ_MBSINIT], [ + : +]) diff --git a/m4/mbslen.m4 b/m4/mbslen.m4 new file mode 100644 index 0000000..51d4e86 --- /dev/null +++ b/m4/mbslen.m4 @@ -0,0 +1,16 @@ +# mbslen.m4 serial 2 +dnl Copyright (C) 2010 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_MBSLEN], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([mbslen]) + if test $ac_cv_func_mbslen = yes; then + HAVE_MBSLEN=1 + else + HAVE_MBSLEN=0 + fi +]) diff --git a/m4/mbsrtowcs.m4 b/m4/mbsrtowcs.m4 new file mode 100644 index 0000000..f9c430f --- /dev/null +++ b/m4/mbsrtowcs.m4 @@ -0,0 +1,122 @@ +# mbsrtowcs.m4 serial 6 +dnl Copyright (C) 2008-2010 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_MBSRTOWCS], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + gl_MBSTATE_T_BROKEN + + AC_CHECK_FUNCS_ONCE([mbsrtowcs]) + if test $ac_cv_func_mbsrtowcs = no; then + HAVE_MBSRTOWCS=0 + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBSRTOWCS=1 + else + gl_MBSRTOWCS_WORKS + case "$gl_cv_func_mbsrtowcs_works" in + *yes) ;; + *) REPLACE_MBSRTOWCS=1 ;; + esac + fi + fi + if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([mbsrtowcs]) + AC_LIBOBJ([mbsrtowcs-state]) + gl_PREREQ_MBSRTOWCS + fi +]) + +dnl Test whether mbsrtowcs works. +dnl Result is gl_cv_func_mbsrtowcs_works. + +AC_DEFUN([gl_MBSRTOWCS_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + 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 mbsrtowcs works], + [gl_cv_func_mbsrtowcs_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 HP-UX and Solaris. + hpux* | solaris*) gl_cv_func_mbsrtowcs_works="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbsrtowcs_works="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then + AC_TRY_RUN([ +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + /* Test whether the function works when started with a conversion state + in non-initial state. This fails on HP-UX 11.11 and Solaris 10. */ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + const char input[] = "B\303\274\303\237er"; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2)) + if (!mbsinit (&state)) + { + const char *src = input + 2; + if (mbsrtowcs (NULL, &src, 10, &state) != 4) + return 1; + } + } + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "<\306\374\313\334\270\354>"; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (NULL, input + 3, 1, &state) == (size_t)(-2)) + if (!mbsinit (&state)) + { + const char *src = input + 4; + if (mbsrtowcs (NULL, &src, 10, &state) != 3) + return 1; + } + } + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + const char input[] = "B\250\271\201\060\211\070er"; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2)) + if (!mbsinit (&state)) + { + const char *src = input + 2; + if (mbsrtowcs (NULL, &src, 10, &state) != 4) + return 1; + } + } + return 0; +}], + [gl_cv_func_mbsrtowcs_works=yes], + [gl_cv_func_mbsrtowcs_works=no], + [:]) + fi + ]) +]) + +# Prerequisites of lib/mbsrtowcs.c. +AC_DEFUN([gl_PREREQ_MBSRTOWCS], [ + : +]) diff --git a/m4/mbstate_t.m4 b/m4/mbstate_t.m4 new file mode 100644 index 0000000..3e2df29 --- /dev/null +++ b/m4/mbstate_t.m4 @@ -0,0 +1,34 @@ +# mbstate_t.m4 serial 12 +dnl Copyright (C) 2000-2002, 2008-2010 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[ +# 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/m4/memchr.m4 b/m4/memchr.m4 new file mode 100644 index 0000000..ab773b8 --- /dev/null +++ b/m4/memchr.m4 @@ -0,0 +1,85 @@ +# memchr.m4 serial 8 +dnl Copyright (C) 2002-2004, 2009-2010 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], +[ + dnl Check for prerequisites for memory fence checks. + gl_FUNC_MMAP_ANON + AC_CHECK_HEADERS_ONCE([sys/mman.h]) + AC_CHECK_FUNCS_ONCE([mprotect]) + + dnl These days, we assume memchr is present. But just in case... + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([memchr]) + if test $ac_cv_func_memchr = yes; then + # Detect platform-specific bugs in some versions of glibc: + # memchr should not dereference anything with length 0 + # http://bugzilla.redhat.com/499689 + # memchr should not dereference overestimated length after a match + # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 + # http://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 +]], [[ + 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)) + return 1; + strcpy (fence - 9, "12345678"); + if (memchr (fence - 9, 0, 79) != fence - 1) + return 2; + } + return 0; +]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], + [dnl Be pessimistic for now. + gl_cv_func_memchr_works="guessing no"])]) + if test "$gl_cv_func_memchr_works" != yes; then + REPLACE_MEMCHR=1 + fi + else + HAVE_MEMCHR=0 + fi + if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then + AC_LIBOBJ([memchr]) + gl_PREREQ_MEMCHR + fi +]) + +# Prerequisites of lib/memchr.c. +AC_DEFUN([gl_PREREQ_MEMCHR], [ + AC_CHECK_HEADERS([bp-sym.h]) +]) diff --git a/m4/mkstemp.m4 b/m4/mkstemp.m4 new file mode 100644 index 0000000..d6430a9 --- /dev/null +++ b/m4/mkstemp.m4 @@ -0,0 +1,62 @@ +#serial 18 + +# Copyright (C) 2001, 2003-2007, 2009-2010 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 systems like the above, arrange to use the replacement function. +AC_DEFUN([gl_FUNC_MKSTEMP], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_REQUIRE([AC_SYS_LARGEFILE]) + + 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 i; + off_t large = (off_t) 4294967295u; + if (large < 0) + large = 2147483647; + for (i = 0; i < 70; i++) + { + char templ[] = "conftest.mkstemp/coXXXXXX"; + int (*mkstemp_function) (char *) = mkstemp; + int fd = mkstemp_function (templ); + if (fd < 0 || lseek (fd, large, SEEK_SET) != large) + return 1; + close (fd); + } + return 0;]])], + [gl_cv_func_working_mkstemp=yes], + [gl_cv_func_working_mkstemp=no], + [gl_cv_func_working_mkstemp=no]) + rm -rf conftest.mkstemp + ]) + if test $gl_cv_func_working_mkstemp != yes; then + REPLACE_MKSTEMP=1 + AC_LIBOBJ([mkstemp]) + gl_PREREQ_MKSTEMP + fi + else + HAVE_MKSTEMP=0 + AC_LIBOBJ([mkstemp]) + gl_PREREQ_MKSTEMP + fi +]) + +# Prerequisites of lib/mkstemp.c. +AC_DEFUN([gl_PREREQ_MKSTEMP], +[ +]) diff --git a/m4/mktime.m4 b/m4/mktime.m4 new file mode 100644 index 0000000..44b8d87 --- /dev/null +++ b/m4/mktime.m4 @@ -0,0 +1,234 @@ +# serial 15 +dnl Copyright (C) 2002-2003, 2005-2007, 2009-2010 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. + +# Redefine AC_FUNC_MKTIME, to fix a bug in Autoconf 2.61a and earlier. +# This redefinition can be removed once a new version of Autoconf is assumed. +# The redefinition is taken from +# <http://cvs.sv.gnu.org/viewcvs/*checkout*/autoconf/autoconf/lib/autoconf/functions.m4?rev=1.119>. +# AC_FUNC_MKTIME +# -------------- +AC_DEFUN([AC_FUNC_MKTIME], +[AC_CHECK_HEADERS_ONCE([unistd.h]) +AC_CHECK_FUNCS_ONCE([alarm]) +AC_REQUIRE([gl_MULTIARCH]) +if test $APPLE_UNIVERSAL_BUILD = 1; then + # A universal build on Apple MacOS 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. + ac_cv_func_working_mktime=no +fi +AC_CACHE_CHECK([for working mktime], [ac_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 + +#ifndef HAVE_ALARM +# define alarm(X) /* empty */ +#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 () +{ + time_t t, delta; + int i, j; + + /* This test makes some buggy mktime implementations loop. + Give up after 60 seconds; a mktime slower than that + isn't worth using anyway. */ + alarm (60); + + for (;;) + { + t = (time_t_max << 1) + 1; + if (t <= time_t_max) + break; + time_t_max = t; + } + time_t_min = - ((time_t) ~ (time_t) 0 == (time_t) -1) - 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; t += delta) + if (! mktime_test (t)) + return 1; + if (! (mktime_test ((time_t) 1) + && mktime_test ((time_t) (60 * 60)) + && mktime_test ((time_t) (60 * 60 * 24)))) + return 1; + + for (j = 1; ; j <<= 1) + if (! bigtime_test (j)) + return 1; + else if (INT_MAX / 2 < j) + break; + if (! bigtime_test (INT_MAX)) + return 1; + } + return ! (irix_6_4_bug () && spring_forward_gap () && year_2050_test ()); +}]])], + [ac_cv_func_working_mktime=yes], + [ac_cv_func_working_mktime=no], + [ac_cv_func_working_mktime=no])]) +if test $ac_cv_func_working_mktime = no; then + AC_LIBOBJ([mktime]) +fi +])# AC_FUNC_MKTIME + +AC_DEFUN([gl_FUNC_MKTIME], +[ + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + AC_FUNC_MKTIME + dnl Note: AC_FUNC_MKTIME does AC_LIBOBJ([mktime]). + if test $ac_cv_func_working_mktime = no; then + REPLACE_MKTIME=1 + gl_PREREQ_MKTIME + else + REPLACE_MKTIME=0 + fi +]) + +# Prerequisites of lib/mktime.c. +AC_DEFUN([gl_PREREQ_MKTIME], +[ + AC_REQUIRE([AC_C_INLINE]) +]) diff --git a/m4/mmap-anon.m4 b/m4/mmap-anon.m4 new file mode 100644 index 0000000..a6b7b9a --- /dev/null +++ b/m4/mmap-anon.m4 @@ -0,0 +1,59 @@ +# mmap-anon.m4 serial 8 +dnl Copyright (C) 2005, 2007, 2009-2010 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 MacOS 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 Work around a bug of AC_EGREP_CPP in autoconf-2.57. + AC_REQUIRE([AC_PROG_CPP]) + AC_REQUIRE([AC_PROG_EGREP]) + + 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 cant identify this map.], [ +#include <sys/mman.h> +#ifdef MAP_ANONYMOUS + I cant identify this map. +#endif +], + [gl_have_mmap_anonymous=yes]) + if test $gl_have_mmap_anonymous != yes; then + AC_EGREP_CPP([I cant identify this map.], [ +#include <sys/mman.h> +#ifdef MAP_ANON + I cant 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/m4/mode_t.m4 b/m4/mode_t.m4 new file mode 100644 index 0000000..3178dfd --- /dev/null +++ b/m4/mode_t.m4 @@ -0,0 +1,26 @@ +# mode_t.m4 serial 2 +dnl Copyright (C) 2009-2010 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/m4/multiarch.m4 b/m4/multiarch.m4 new file mode 100644 index 0000000..389bd2b --- /dev/null +++ b/m4/multiarch.m4 @@ -0,0 +1,65 @@ +# multiarch.m4 serial 5 +dnl Copyright (C) 2008, 2009, 2010 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 MacOS 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 the macro AA_APPLE_UNIVERSAL_BUILD at the +# beginning of config.h 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 + AC_DEFINE([AA_APPLE_UNIVERSAL_BUILD], [1], + [Define if the compiler is building for multiple architectures of Apple platforms at once.]) + APPLE_UNIVERSAL_BUILD=1 + else + APPLE_UNIVERSAL_BUILD=0 + fi + AC_SUBST([APPLE_UNIVERSAL_BUILD]) +]) diff --git a/m4/nl_langinfo.m4 b/m4/nl_langinfo.m4 new file mode 100644 index 0000000..ad456a2 --- /dev/null +++ b/m4/nl_langinfo.m4 @@ -0,0 +1,25 @@ +# nl_langinfo.m4 serial 3 +dnl Copyright (C) 2009, 2010 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]) + if test $ac_cv_func_nl_langinfo = yes; then + if test $HAVE_LANGINFO_CODESET = 1 && test $HAVE_LANGINFO_ERA = 1; then + : + else + REPLACE_NL_LANGINFO=1 + AC_DEFINE([REPLACE_NL_LANGINFO], [1], + [Define if nl_langinfo exists but is overridden by gnulib.]) + AC_LIBOBJ([nl_langinfo]) + fi + else + HAVE_NL_LANGINFO=0 + AC_LIBOBJ([nl_langinfo]) + fi +]) diff --git a/m4/nls.m4 b/m4/nls.m4 new file mode 100644 index 0000000..003704c --- /dev/null +++ b/m4/nls.m4 @@ -0,0 +1,32 @@ +# nls.m4 serial 5 (gettext-0.18) +dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 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 +dnl This file can 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 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/m4/onceonly.m4 b/m4/onceonly.m4 new file mode 100644 index 0000000..4a3cd84 --- /dev/null +++ b/m4/onceonly.m4 @@ -0,0 +1,91 @@ +# onceonly.m4 serial 6 +dnl Copyright (C) 2002-2003, 2005-2006, 2008-2010 Free Software Foundation, +dnl Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl This file defines some "once only" variants of standard autoconf macros. +dnl AC_CHECK_HEADERS_ONCE like AC_CHECK_HEADERS +dnl AC_CHECK_FUNCS_ONCE like AC_CHECK_FUNCS +dnl AC_CHECK_DECLS_ONCE like AC_CHECK_DECLS +dnl AC_REQUIRE([AC_FUNC_STRCOLL]) like AC_FUNC_STRCOLL +dnl The advantage is that the check for each of the headers/functions/decls +dnl will be put only once into the 'configure' file. It keeps the size of +dnl the 'configure' file down, and avoids redundant output when 'configure' +dnl is run. +dnl The drawback is that the checks cannot be conditionalized. If you write +dnl if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi +dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to +dnl empty, and the check will be inserted before the body of the AC_DEFUNed +dnl function. + +dnl The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE +dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to +dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested +dnl headers at once, thus reducing the size of 'configure'. It is known to work +dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%. + +dnl Autoconf version 2.59 plus gnulib is required; this file is not needed +dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of +dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first +dnl argument! +AC_PREREQ([2.59]) + +# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of +# AC_CHECK_HEADERS(HEADER1 HEADER2 ...). +AC_DEFUN([AC_CHECK_HEADERS_ONCE], [ + : + m4_foreach_w([gl_HEADER_NAME], [$1], [ + AC_DEFUN([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME, + [./-], [___])), [ + m4_divert_text([INIT_PREPARE], + [gl_header_list="$gl_header_list gl_HEADER_NAME"]) + gl_HEADERS_EXPANSION + AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])), + [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.]) + ]) + AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME, + [./-], [___]))) + ]) +]) +m4_define([gl_HEADERS_EXPANSION], [ + m4_divert_text([DEFAULTS], [gl_header_list=]) + AC_CHECK_HEADERS([$gl_header_list]) + m4_define([gl_HEADERS_EXPANSION], []) +]) + +# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of +# AC_CHECK_FUNCS(FUNC1 FUNC2 ...). +AC_DEFUN([AC_CHECK_FUNCS_ONCE], [ + : + m4_foreach_w([gl_FUNC_NAME], [$1], [ + AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [ + m4_divert_text([INIT_PREPARE], + [gl_func_list="$gl_func_list gl_FUNC_NAME"]) + gl_FUNCS_EXPANSION + AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])), + [Define to 1 if you have the `]m4_defn([gl_FUNC_NAME])[' function.]) + ]) + AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME])) + ]) +]) +m4_define([gl_FUNCS_EXPANSION], [ + m4_divert_text([DEFAULTS], [gl_func_list=]) + AC_CHECK_FUNCS([$gl_func_list]) + m4_define([gl_FUNCS_EXPANSION], []) +]) + +# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of +# AC_CHECK_DECLS(DECL1, DECL2, ...). +AC_DEFUN([AC_CHECK_DECLS_ONCE], [ + : + m4_foreach_w([gl_DECL_NAME], [$1], [ + AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [ + AC_CHECK_DECLS(m4_defn([gl_DECL_NAME])) + ]) + AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME])) + ]) +]) diff --git a/m4/open.m4 b/m4/open.m4 new file mode 100644 index 0000000..d705b3a --- /dev/null +++ b/m4/open.m4 @@ -0,0 +1,74 @@ +# open.m4 serial 8 +dnl Copyright (C) 2007-2010 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]) + case "$host_os" in + mingw* | pw*) + gl_REPLACE_OPEN + ;; + *) + 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]) + 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_TRY_RUN([ +#include <fcntl.h> +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +int main () +{ +#if HAVE_LSTAT + if (open ("conftest.lnk/", O_RDONLY) != -1) return 2; +#endif + return open ("conftest.sl/", O_CREAT, 0600) >= 0; +}], [gl_cv_func_open_slash=yes], [gl_cv_func_open_slash=no], + [ +changequote(,)dnl + case "$host_os" in + freebsd*) gl_cv_func_open_slash="guessing no" ;; + solaris2.[0-9]*) gl_cv_func_open_slash="guessing no" ;; + hpux*) 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.]) + gl_REPLACE_OPEN + ;; + esac + ;; + esac +]) + +AC_DEFUN([gl_REPLACE_OPEN], +[ + AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) + REPLACE_OPEN=1 + AC_LIBOBJ([open]) + gl_PREREQ_OPEN +]) + +# Prerequisites of lib/open.c. +AC_DEFUN([gl_PREREQ_OPEN], +[ + AC_REQUIRE([AC_C_INLINE]) + AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) + : +]) diff --git a/m4/pathmax.m4 b/m4/pathmax.m4 new file mode 100644 index 0000000..6a3f857 --- /dev/null +++ b/m4/pathmax.m4 @@ -0,0 +1,13 @@ +# pathmax.m4 serial 8 +dnl Copyright (C) 2002-2003, 2005-2006, 2009-2010 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_FUNCS_ONCE([pathconf]) + AC_CHECK_HEADERS_ONCE([sys/param.h]) +]) diff --git a/m4/po_gl.m4 b/m4/po_gl.m4 new file mode 100644 index 0000000..960efe1 --- /dev/null +++ b/m4/po_gl.m4 @@ -0,0 +1,449 @@ +# po.m4 serial 17 (gettext-0.18) +dnl Copyright (C) 1995-2010 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 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 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]) + +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([AM_PROG_MKDIR_P])dnl defined by automake + 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.17]) + + 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" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/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 assigment 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 assigment 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. + 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. +/^[ ]*VARIABLE[ ]*=/{ + # Seen the first line of the variable definition. + s/^[ ]*VARIABLE[ ]*=// + 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 assigment 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" + 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 + @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \ + \$(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 + @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \ + \$(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/m4/progtest.m4 b/m4/progtest.m4 new file mode 100644 index 0000000..2d804ac --- /dev/null +++ b/m4/progtest.m4 @@ -0,0 +1,92 @@ +# progtest.m4 serial 6 (gettext-0.18) +dnl Copyright (C) 1996-2003, 2005, 2008-2010 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 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 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 + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +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/m4/putenv.m4 b/m4/putenv.m4 new file mode 100644 index 0000000..dd9140c --- /dev/null +++ b/m4/putenv.m4 @@ -0,0 +1,41 @@ +# putenv.m4 serial 16 +dnl Copyright (C) 2002-2010 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 Jim Meyering. +dnl +dnl Check whether putenv ("FOO") removes FOO from the environment. +dnl The putenv in libc on at least SunOS 4.1.4 does *not* do that. + +AC_DEFUN([gl_FUNC_PUTENV], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_CACHE_CHECK([for putenv compatible with GNU and SVID], + [gl_cv_func_svid_putenv], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],[[ + /* Put it in env. */ + if (putenv ("CONFTEST_putenv=val")) + return 1; + + /* Try to remove it. */ + if (putenv ("CONFTEST_putenv")) + return 1; + + /* Make sure it was deleted. */ + if (getenv ("CONFTEST_putenv") != 0) + return 1; + + return 0; + ]])], + gl_cv_func_svid_putenv=yes, + gl_cv_func_svid_putenv=no, + dnl When crosscompiling, assume putenv is broken. + gl_cv_func_svid_putenv=no) + ]) + if test $gl_cv_func_svid_putenv = no; then + REPLACE_PUTENV=1 + AC_LIBOBJ([putenv]) + fi +]) diff --git a/m4/quote.m4 b/m4/quote.m4 new file mode 100644 index 0000000..e075542 --- /dev/null +++ b/m4/quote.m4 @@ -0,0 +1,14 @@ +# quote.m4 serial 5 +dnl Copyright (C) 2002, 2003, 2005, 2006, 2009, 2010 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], +[ + AC_LIBOBJ([quote]) + + dnl Prerequisites of lib/quote.c. + dnl (none) +]) diff --git a/m4/quotearg.m4 b/m4/quotearg.m4 new file mode 100644 index 0000000..f72fd62 --- /dev/null +++ b/m4/quotearg.m4 @@ -0,0 +1,10 @@ +# quotearg.m4 serial 8 +dnl Copyright (C) 2002, 2004-2010 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], +[ + AC_LIBOBJ([quotearg]) +]) diff --git a/m4/regex.m4 b/m4/regex.m4 new file mode 100644 index 0000000..95784e4 --- /dev/null +++ b/m4/regex.m4 @@ -0,0 +1,230 @@ +# serial 56 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010 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_CHECK_HEADERS_ONCE([locale.h]) + + 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_CACHE_CHECK([for working re_compile_pattern], + [gl_cv_func_re_compile_pattern_working], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [AC_INCLUDES_DEFAULT[ + #if HAVE_LOCALE_H + #include <locale.h> + #endif + #include <limits.h> + #include <regex.h> + ]], + [[static struct re_pattern_buffer regex; + unsigned char folded_chars[UCHAR_MAX + 1]; + int i; + const char *s; + struct re_registers regs; + + #if HAVE_LOCALE_H + /* http://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. */ + if (setlocale (LC_ALL, "en_US.UTF-8")) + { + 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) + return 1; + if (re_search (®ex, data, sizeof data - 1, + 0, sizeof data - 1, ®s) + != -1) + return 1; + if (! setlocale (LC_ALL, "C")) + return 1; + } + #endif + + /* 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) + return 1; + + /* This should fail, but succeeds for glibc-2.5. */ + if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) + return 1; + + /* 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) + return 1; + + /* 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) + return 1; + + /* 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) + return 1; + + /* 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) + return 1; + + /* This should match, but does not for glibc-2.2.1. */ + if (re_match (®ex, "an", 2, 0, ®s) != 2) + return 1; + + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("x", 1, ®ex); + if (s) + return 1; + + /* glibc-2.2.93 does not work with a negative RANGE argument. */ + if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) + return 1; + + /* 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) + return 1; + + if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) + return 1; + + /* Catch a bug reported by Vin Shelton in + http://lists.gnu.org/archive/html/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) + return 1; + + /* REG_STARTEND was added to glibc on 2004-01-15. + Reject older versions. */ + if (! REG_STARTEND) + return 1; + + /* Reject hosts whose regoff_t values are too narrow. + These include glibc 2.3.5 on hosts with 64-bit ptrdiff_t + and 32-bit int. */ + if (sizeof (regoff_t) < sizeof (ptrdiff_t) + || sizeof (regoff_t) < sizeof (ssize_t)) + return 1; + + return 0;]])], + [gl_cv_func_re_compile_pattern_working=yes], + [gl_cv_func_re_compile_pattern_working=no], + dnl When crosscompiling, assume it is not working. + [gl_cv_func_re_compile_pattern_working=no])]) + 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_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.]) + AC_LIBOBJ([regex]) + gl_PREREQ_REGEX + 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_CHECK_HEADERS([libintl.h]) + AC_CHECK_FUNCS_ONCE([isblank iswctype wcscoll]) + AC_CHECK_DECLS([isblank], [], [], [#include <ctype.h>]) +]) diff --git a/m4/setenv.m4 b/m4/setenv.m4 new file mode 100644 index 0000000..58f6d13 --- /dev/null +++ b/m4/setenv.m4 @@ -0,0 +1,111 @@ +# setenv.m4 serial 16 +dnl Copyright (C) 2001-2004, 2006-2010 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]) + if test $HAVE_SETENV$REPLACE_SETENV != 10; then + AC_LIBOBJ([setenv]) + fi +]) + +# Like gl_FUNC_SETENV, except prepare for separate compilation (no AC_LIBOBJ). +AC_DEFUN([gl_FUNC_SETENV_SEPARATE], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([setenv]) + 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> + ]], [[ + if (setenv ("", "", 0) != -1) return 1; + if (errno != EINVAL) return 2; + if (setenv ("a", "=", 1) != 0) return 3; + if (strcmp (getenv ("a"), "=") != 0) return 4; + ]])], + [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no], + [gl_cv_func_setenv_works="guessing no"])]) + if test "$gl_cv_func_setenv_works" != yes; then + REPLACE_SETENV=1 + AC_LIBOBJ([setenv]) + fi + fi + gl_PREREQ_SETENV +]) + +AC_DEFUN([gl_FUNC_UNSETENV], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_CHECK_FUNCS([unsetenv]) + if test $ac_cv_func_unsetenv = no; then + HAVE_UNSETENV=0 + AC_LIBOBJ([unsetenv]) + gl_PREREQ_UNSETENV + else + dnl Some BSDs return void, failing to do error checking. + AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret], + [AC_TRY_COMPILE([#include <stdlib.h> +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +int unsetenv (const char *name); +#else +int unsetenv(); +#endif +], , 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 + AC_LIBOBJ([unsetenv]) + fi + + dnl Solaris 10 unsetenv does not remove all copies of a name. + AC_CACHE_CHECK([whether unsetenv works on duplicates], + [gl_cv_func_unsetenv_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ + #include <stdlib.h> + ]], [[ + char entry[] = "b=2"; + if (putenv ((char *) "a=1")) return 1; + if (putenv (entry)) return 2; + entry[0] = 'a'; + unsetenv ("a"); + if (getenv ("a")) return 3; + ]])], + [gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no], + [gl_cv_func_unsetenv_works="guessing no"])]) + if test "$gl_cv_func_unsetenv_works" != yes; then + REPLACE_UNSETENV=1 + AC_LIBOBJ([unsetenv]) + fi + 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/m4/sigaction.m4 b/m4/sigaction.m4 new file mode 100644 index 0000000..8f0d450 --- /dev/null +++ b/m4/sigaction.m4 @@ -0,0 +1,45 @@ +# sigaction.m4 serial 5 +dnl Copyright (C) 2008, 2009, 2010 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 + AC_LIBOBJ([sigaction]) + gl_PREREQ_SIGACTION + 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], +[ + AC_REQUIRE([AC_C_INLINE]) +]) diff --git a/m4/signal_h.m4 b/m4/signal_h.m4 new file mode 100644 index 0000000..56e5746 --- /dev/null +++ b/m4/signal_h.m4 @@ -0,0 +1,49 @@ +# signal_h.m4 serial 11 +dnl Copyright (C) 2007-2010 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]) + gl_CHECK_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> + ]]) + AC_REQUIRE([AC_TYPE_UID_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 <signal.h> + ]], [sigaction sigaddset sigdelset sigemptyset sigfillset sigismember + sigpending sigprocmask]) +]) + +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_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_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]) +]) diff --git a/m4/signalblocking.m4 b/m4/signalblocking.m4 new file mode 100644 index 0000000..4459815 --- /dev/null +++ b/m4/signalblocking.m4 @@ -0,0 +1,42 @@ +# signalblocking.m4 serial 10 +dnl Copyright (C) 2001-2002, 2006-2010 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]) + signals_not_posix= + AC_EGREP_HEADER([sigset_t], [signal.h], , [signals_not_posix=1]) + if test -z "$signals_not_posix"; then + AC_CHECK_FUNC([sigprocmask], [gl_cv_func_sigprocmask=1]) + fi + if test -z "$gl_cv_func_sigprocmask"; then + HAVE_POSIX_SIGNALBLOCKING=0 + AC_LIBOBJ([sigprocmask]) + gl_PREREQ_SIGPROCMASK + fi +]) + +# Prerequisites of the part of lib/signal.in.h and of lib/sigprocmask.c. +AC_DEFUN([gl_PREREQ_SIGPROCMASK], +[ + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + 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 + dnl HAVE_SIGSET_T is 1 if the system lacks the sigprocmask function but has + dnl the sigset_t type. + AC_SUBST([HAVE_SIGSET_T]) +]) diff --git a/m4/sleep.m4 b/m4/sleep.m4 new file mode 100644 index 0000000..a5ec655 --- /dev/null +++ b/m4/sleep.m4 @@ -0,0 +1,49 @@ +# sleep.m4 serial 3 +dnl Copyright (C) 2007-2010 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_SLEEP], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + dnl We expect to see the declaration of sleep() in a header file. + dnl Older versions of mingw have a sleep() function that is an alias to + dnl _sleep() in MSVCRT. It has a different signature than POSIX sleep(): + dnl it takes the number of milliseconds as argument and returns void. + dnl mingw does not declare this function. + AC_CHECK_DECLS([sleep], , , [#include <unistd.h>]) + AC_CHECK_FUNCS_ONCE([sleep]) + if test $ac_cv_have_decl_sleep != yes; then + HAVE_SLEEP=0 + AC_LIBOBJ([sleep]) + else + dnl Cygwin 1.5.x has a bug where sleep can't exceed 49.7 days. + AC_CACHE_CHECK([for working sleep], [gl_cv_func_sleep_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include <errno.h> +#include <unistd.h> +#include <signal.h> +static void +handle_alarm (int sig) +{ + if (sig != SIGALRM) + _exit (2); +} +]], [[ + /* Failure to compile this test due to missing alarm is okay, + since all such platforms (mingw) also lack sleep. */ + unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ + unsigned int remaining; + signal (SIGALRM, handle_alarm); + alarm (1); + remaining = sleep (pentecost); + return !(pentecost - 10 < remaining && remaining <= pentecost);]])], + [gl_cv_func_sleep_works=yes], [gl_cv_func_sleep_works=no], + [gl_cv_func_sleep_works="guessing no"])]) + if test "$gl_cv_func_sleep_works" != yes; then + REPLACE_SLEEP=1 + AC_LIBOBJ([sleep]) + fi + fi +]) diff --git a/m4/ssize_t.m4 b/m4/ssize_t.m4 new file mode 100644 index 0000000..e0ccee3 --- /dev/null +++ b/m4/ssize_t.m4 @@ -0,0 +1,21 @@ +# ssize_t.m4 serial 4 (gettext-0.15) +dnl Copyright (C) 2001-2003, 2006, 2009-2010 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_TRY_COMPILE([#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/m4/stat-time.m4 b/m4/stat-time.m4 new file mode 100644 index 0000000..e653c43 --- /dev/null +++ b/m4/stat-time.m4 @@ -0,0 +1,85 @@ +# Checks for stat-related time functions. + +# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2010 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([AC_C_INLINE]) + 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([AC_C_INLINE]) + 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/m4/stat.m4 b/m4/stat.m4 new file mode 100644 index 0000000..acd32d8 --- /dev/null +++ b/m4/stat.m4 @@ -0,0 +1,63 @@ +# serial 4 + +# Copyright (C) 2009, 2010 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]) dnl for cross-compiles + AC_REQUIRE([gl_AC_DOS]) + AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([lstat]) + dnl mingw is the only known platform where stat(".") and stat("./") differ + AC_CACHE_CHECK([whether stat handles trailing slashes on directories], + [gl_cv_func_stat_dir_slash], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/stat.h> +]], [[struct stat st; return stat (".", &st) != stat ("./", &st);]])], + [gl_cv_func_stat_dir_slash=yes], [gl_cv_func_stat_dir_slash=no], + [case $host_os in + mingw*) gl_cv_func_stat_dir_slash="guessing no";; + *) gl_cv_func_stat_dir_slash="guessing yes";; + esac])]) + dnl Solaris 9 mistakenly succeeds on stat("file/") + 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> +]], [[struct stat st; + if (!stat ("conftest.tmp/", &st)) return 1; +#if HAVE_LSTAT + if (!stat ("conftest.lnk/", &st)) return 2; +#endif + ]])], + [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no], + [gl_cv_func_stat_file_slash="guessing no"]) + rm -f conftest.tmp conftest.lnk]) + case $gl_cv_func_stat_dir_slash in + *no) REPLACE_STAT=1 + AC_DEFINE([REPLACE_FUNC_STAT_DIR], [1], [Define to 1 if stat needs + help when passed a directory name with a trailing slash]);; + esac + 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 + if test $REPLACE_STAT = 1; then + AC_LIBOBJ([stat]) + dnl Prerequisites of lib/stat.c. + AC_REQUIRE([AC_C_INLINE]) + fi +]) diff --git a/m4/stdarg.m4 b/m4/stdarg.m4 new file mode 100644 index 0000000..5c87bd8 --- /dev/null +++ b/m4/stdarg.m4 @@ -0,0 +1,67 @@ +# stdarg.m4 serial 3 +dnl Copyright (C) 2006, 2008-2010 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=''; AC_SUBST([STDARG_H]) + NEXT_STDARG_H='<stdarg.h>'; AC_SUBST([NEXT_STDARG_H]) + AC_MSG_CHECKING([for va_copy]) + AC_CACHE_VAL([gl_cv_func_va_copy], [ + AC_TRY_COMPILE([#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])]) + AC_MSG_RESULT([$gl_cv_func_va_copy]) + 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_CHECK_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_TRY_COMPILE([#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 +]) diff --git a/m4/stdbool.m4 b/m4/stdbool.m4 new file mode 100644 index 0000000..3d672d7 --- /dev/null +++ b/m4/stdbool.m4 @@ -0,0 +1,115 @@ +# Check for stdbool.h that conforms to C99. + +dnl Copyright (C) 2002-2006, 2009-2010 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. + +# Prepare for substituting <stdbool.h> if it is not supported. + +AC_DEFUN([AM_STDBOOL_H], +[ + AC_REQUIRE([AC_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]) + + 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 macro is only needed in autoconf <= 2.59. Newer versions of autoconf +# have this macro built-in. + +AC_DEFUN([AC_HEADER_STDBOOL], + [AC_CACHE_CHECK([for stdbool.h that conforms to C99], + [ac_cv_header_stdbool_h], + [AC_TRY_COMPILE( + [ + #include <stdbool.h> + #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 + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { _Bool s: 1; _Bool t; } 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]; + bool e = &s; + 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 }; + _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]; + #if defined __xlc__ || defined __GNUC__ + /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 + reported by James Lemley on 2005-10-05; see + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + This test is not quite right, since xlc is allowed to + reject this program, as the initializer for xlcbug is + not one of the forms that C requires support for. + However, doing the test right would require a run-time + test, and that would make cross-compilation harder. + Let us hope that IBM fixes the xlc bug, and also adds + support for this kind of constant expression. In the + meantime, this test will reject xlc, which is OK, since + our stdbool.h substitute should suffice. We also test + this with GCC, where it should work, to detect more + quickly whether someone messes up the test in the + future. */ + char digs[] = "0123456789"; + int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); + #endif + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + ], + [ + *pq |= q; + *pq |= ! 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); + ], + [ac_cv_header_stdbool_h=yes], + [ac_cv_header_stdbool_h=no])]) + AC_CHECK_TYPES([_Bool]) + if test $ac_cv_header_stdbool_h = yes; then + AC_DEFINE([HAVE_STDBOOL_H], [1], [Define to 1 if stdbool.h conforms to C99.]) + fi]) diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4 new file mode 100644 index 0000000..c3ae569 --- /dev/null +++ b/m4/stddef_h.m4 @@ -0,0 +1,45 @@ +dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues. +# stddef_h.m4 serial 2 +dnl Copyright (C) 2009, 2010 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]) + 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 + if test -n "$STDDEF_H"; then + gl_CHECK_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_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) + STDDEF_H=''; AC_SUBST([STDDEF_H]) +]) diff --git a/m4/stdint.m4 b/m4/stdint.m4 new file mode 100644 index 0000000..1cc57e6 --- /dev/null +++ b/m4/stdint.m4 @@ -0,0 +1,472 @@ +# stdint.m4 serial 34 +dnl Copyright (C) 2001-2010 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_DEFUN([gl_STDINT_H], +[ + AC_PREREQ([2.59])dnl + + 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 <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 __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#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; + +#include <limits.h> /* for CHAR_BIT */ +#define TYPE_MINIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +#define TYPE_MAXIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 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 __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#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 1; + } + return 0; +]])], + [gl_cv_header_working_stdint_h=yes], + [], + [dnl When cross-compiling, assume it works. + gl_cv_header_working_stdint_h=yes + ]) + ]) + ]) + fi + if test "$gl_cv_header_working_stdint_h" = yes; then + STDINT_H= + else + 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 + else + HAVE_SYS_INTTYPES_H=0 + fi + AC_SUBST([HAVE_SYS_INTTYPES_H]) + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + else + HAVE_SYS_BITYPES_H=0 + fi + AC_SUBST([HAVE_SYS_BITYPES_H]) + + dnl Check for <wchar.h> (missing in Linux uClibc when built without wide + dnl character support). + AC_CHECK_HEADERS_ONCE([wchar.h]) + + gl_STDINT_TYPE_PROPERTIES + STDINT_H=stdint.h + fi + AC_SUBST([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_]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_]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_]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_]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(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(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 Autoconf >= 2.61 has AC_COMPUTE_INT built-in. +dnl Remove this when we can assume autoconf >= 2.61. +m4_ifdef([AC_COMPUTE_INT], [], [ + AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) +]) + +# Hey Emacs! +# Local Variables: +# indent-tabs-mode: nil +# End: diff --git a/m4/stdio-safer.m4 b/m4/stdio-safer.m4 new file mode 100644 index 0000000..cecc14a --- /dev/null +++ b/m4/stdio-safer.m4 @@ -0,0 +1,25 @@ +#serial 12 +dnl Copyright (C) 2002, 2005-2007, 2009-2010 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_FOPEN_SAFER], +[ + AC_LIBOBJ([fopen-safer]) +]) + +AC_DEFUN([gl_FREOPEN_SAFER], +[ + AC_LIBOBJ([freopen-safer]) +]) + +AC_DEFUN([gl_POPEN_SAFER], +[ + AC_LIBOBJ([popen-safer]) +]) + +AC_DEFUN([gl_TMPFILE_SAFER], +[ + AC_LIBOBJ([tmpfile-safer]) +]) diff --git a/m4/stdio_h.m4 b/m4/stdio_h.m4 new file mode 100644 index 0000000..1d1d95e --- /dev/null +++ b/m4/stdio_h.m4 @@ -0,0 +1,158 @@ +# stdio_h.m4 serial 30 +dnl Copyright (C) 2007-2010 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], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_REQUIRE([AC_C_INLINE]) + gl_CHECK_NEXT_HEADERS([stdio.h]) + 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 just an optimization, to avoid performing a configure + dnl check whose result is not used. It does not make the test of + dnl GNULIB_STDIO_H_SIGPIPE or 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 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 <stdio.h> + ]], [dprintf fpurge fseeko ftello getdelim getline 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_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH]) + 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_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN]) + 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_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_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_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) + GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) + 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_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_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_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_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_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]) +]) + +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])]) +]) diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4 new file mode 100644 index 0000000..dd84796 --- /dev/null +++ b/m4/stdlib_h.m4 @@ -0,0 +1,110 @@ +# stdlib_h.m4 serial 28 +dnl Copyright (C) 2007-2010 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_CHECK_NEXT_HEADERS([stdlib.h]) + AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT]) + if test $ac_cv_header_random_h = yes; then + HAVE_RANDOM_H=1 + else + HAVE_RANDOM_H=0 + fi + AC_SUBST([HAVE_RANDOM_H]) + AC_CHECK_TYPES([struct random_data], + [], [HAVE_STRUCT_RANDOM_DATA=0], + [[#include <stdlib.h> + #if HAVE_RANDOM_H + # include <random.h> + #endif + ]]) + + 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 +# include <sys/loadavg.h> +#endif +#if HAVE_RANDOM_H +# include <random.h> +#endif + ]], [atoll canonicalize_file_name getloadavg getsubopt grantpt mkdtemp + mkostemp mkostemps mkstemp mkstemps ptsname random_r initstat_r srandom_r + setstate_r realpath rpmatch setenv 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_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_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_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME]) + GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV]) + GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R]) + GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) + GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH]) + GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) + 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_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT]) + GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) + HAVE_CALLOC_POSIX=1; AC_SUBST([HAVE_CALLOC_POSIX]) + 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_MALLOC_POSIX=1; AC_SUBST([HAVE_MALLOC_POSIX]) + 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_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) + HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) + HAVE_REALLOC_POSIX=1; AC_SUBST([HAVE_REALLOC_POSIX]) + HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) + HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) + HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) + 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_UNSETENV=1; AC_SUBST([HAVE_UNSETENV]) + REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) + REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) + REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) + 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]) +]) diff --git a/m4/strcase.m4 b/m4/strcase.m4 new file mode 100644 index 0000000..33de423 --- /dev/null +++ b/m4/strcase.m4 @@ -0,0 +1,44 @@ +# strcase.m4 serial 10 +dnl Copyright (C) 2002, 2005-2010 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_REPLACE_FUNCS([strcasecmp]) + if test $ac_cv_func_strcasecmp = no; then + HAVE_STRCASECMP=0 + gl_PREREQ_STRCASECMP + fi +]) + +AC_DEFUN([gl_FUNC_STRNCASECMP], +[ + AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) + AC_REPLACE_FUNCS([strncasecmp]) + if test $ac_cv_func_strncasecmp = no; then + gl_PREREQ_STRNCASECMP + 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/m4/strerror.m4 b/m4/strerror.m4 new file mode 100644 index 0000000..1649b24 --- /dev/null +++ b/m4/strerror.m4 @@ -0,0 +1,68 @@ +# strerror.m4 serial 9 +dnl Copyright (C) 2002, 2007-2010 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_FUNC_STRERROR_SEPARATE]) + if test $REPLACE_STRERROR = 1; then + AC_LIBOBJ([strerror]) + AC_DEFINE_UNQUOTED([REPLACE_STRERROR], [$REPLACE_STRERROR], + [Define this to 1 if strerror is broken.]) + fi +]) + +# Like gl_FUNC_STRERROR, except prepare for separate compilation (no AC_LIBOBJ). +AC_DEFUN([gl_FUNC_STRERROR_SEPARATE], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_REQUIRE([gl_HEADER_ERRNO_H]) + if test -z "$ERRNO_H"; then + AC_CACHE_CHECK([for working strerror function], + [gl_cv_func_working_strerror], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <string.h> + ]], + [[return !*strerror (-2);]])], + [gl_cv_func_working_strerror=yes], + [gl_cv_func_working_strerror=no], + [dnl Assume crossbuild works if it compiles. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <string.h> + ]], + [[return !*strerror (-2);]])], + [gl_cv_func_working_strerror=yes], + [gl_cv_func_working_strerror=no]) + ]) + ]) + if test $gl_cv_func_working_strerror = no; then + dnl The system's strerror() fails to return a string for out-of-range + dnl integers. Replace it. + REPLACE_STRERROR=1 + fi + else + dnl The system's strerror() cannot know about the new errno values we add + dnl to <errno.h>. Replace it. + REPLACE_STRERROR=1 + fi + if test $REPLACE_STRERROR = 1; then + gl_PREREQ_STRERROR + fi +]) + +# Prerequisites of lib/strerror.c. +AC_DEFUN([gl_PREREQ_STRERROR], [ + AC_CHECK_DECLS([strerror]) + 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 +]) diff --git a/m4/strftime.m4 b/m4/strftime.m4 new file mode 100644 index 0000000..3562240 --- /dev/null +++ b/m4/strftime.m4 @@ -0,0 +1,32 @@ +# serial 32 + +# Copyright (C) 1996-1997, 1999-2007, 2009-2010 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], +[ + gl_FUNC_STRFTIME +]) + +# These are the prerequisite macros for GNU's strftime.c replacement. +AC_DEFUN([gl_FUNC_STRFTIME], +[ + AC_LIBOBJ([strftime]) + + # This defines (or not) HAVE_TZNAME and HAVE_TM_ZONE. + AC_REQUIRE([AC_STRUCT_TIMEZONE]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + AC_REQUIRE([gl_TM_GMTOFF]) + + AC_CHECK_FUNCS_ONCE([tzset]) + AC_CHECK_HEADERS_ONCE([wchar.h]) + + AC_DEFINE([my_strftime], [nstrftime], + [Define to the name of the strftime replacement function.]) +]) diff --git a/m4/string_h.m4 b/m4/string_h.m4 new file mode 100644 index 0000000..1977aec --- /dev/null +++ b/m4/string_h.m4 @@ -0,0 +1,112 @@ +# Configure a GNU-like replacement for <string.h>. + +# Copyright (C) 2007-2010 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 17 + +# 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_CHECK_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> + ]], + [memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup + strncat strndup strnlen strpbrk strsep strcasestr strtok_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_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_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_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_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_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) + REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) + REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) + REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) + REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) + REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) + REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) + REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) + REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) + UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) +]) diff --git a/m4/strings_h.m4 b/m4/strings_h.m4 new file mode 100644 index 0000000..4374c7c --- /dev/null +++ b/m4/strings_h.m4 @@ -0,0 +1,39 @@ +# Configure a replacement for <string.h>. +# serial 3 + +# Copyright (C) 2007, 2009-2010 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]) + + 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 <strings.h> + ]], [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], +[ + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_STRCASECMP=1; AC_SUBST([HAVE_STRCASECMP]) + HAVE_DECL_STRNCASECMP=1; AC_SUBST([HAVE_DECL_STRNCASECMP]) +]) diff --git a/m4/strndup.m4 b/m4/strndup.m4 new file mode 100644 index 0000000..810313c --- /dev/null +++ b/m4/strndup.m4 @@ -0,0 +1,49 @@ +# strndup.m4 serial 17 +dnl Copyright (C) 2002-2003, 2005-2010 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_STRNDUP], +[ + dnl Persuade glibc <string.h> to declare strndup(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_DECLS_ONCE([strndup]) + AC_CHECK_FUNCS_ONCE([strndup]) + if test $ac_cv_have_decl_strndup = no; then + HAVE_DECL_STRNDUP=0 + fi + + if test $ac_cv_func_strndup = yes; then + # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. + AC_CACHE_CHECK([for working strndup], [gl_cv_func_strndup_works], + [AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[#include <string.h> + #include <stdlib.h>]], [[ +#ifndef HAVE_DECL_STRNDUP + extern char *strndup (const char *, size_t); +#endif + char *s; + s = strndup ("some longer string", 15); + free (s); + s = strndup ("shorter string", 13); + return s[13] != '\0';]])], + [gl_cv_func_strndup_works=yes], + [gl_cv_func_strndup_works=no], + [case $host_os in + aix*) gl_cv_func_strndup_works="guessing no";; + *) gl_cv_func_strndup_works="guessing yes";; + esac])]) + case $gl_cv_func_strndup_works in + *no) + REPLACE_STRNDUP=1 + AC_LIBOBJ([strndup]) + ;; + esac + else + AC_LIBOBJ([strndup]) + fi +]) diff --git a/m4/strnlen.m4 b/m4/strnlen.m4 new file mode 100644 index 0000000..52bb838 --- /dev/null +++ b/m4/strnlen.m4 @@ -0,0 +1,32 @@ +# strnlen.m4 serial 12 +dnl Copyright (C) 2002-2003, 2005-2007, 2009-2010 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_STRNLEN], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + + dnl Persuade glibc <string.h> to declare strnlen(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_DECLS_ONCE([strnlen]) + if test $ac_cv_have_decl_strnlen = no; then + HAVE_DECL_STRNLEN=0 + else + AC_FUNC_STRNLEN + dnl Note: AC_FUNC_STRNLEN does AC_LIBOBJ([strnlen]). + if test $ac_cv_func_strnlen_working = no; then + REPLACE_STRNLEN=1 + fi + fi + if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then + AC_LIBOBJ([strnlen]) + gl_PREREQ_STRNLEN + fi +]) + +# Prerequisites of lib/strnlen.c. +AC_DEFUN([gl_PREREQ_STRNLEN], [:]) diff --git a/m4/strptime.m4 b/m4/strptime.m4 new file mode 100644 index 0000000..1e4e95d --- /dev/null +++ b/m4/strptime.m4 @@ -0,0 +1,24 @@ +# strptime.m4 serial 6 +dnl Copyright (C) 2007, 2009, 2010 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_STRPTIME], +[ + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + AC_REQUIRE([AC_C_RESTRICT]) + AC_CHECK_FUNCS_ONCE([strptime]) + if test $ac_cv_func_strptime != yes; then + HAVE_STRPTIME=0 + AC_LIBOBJ([strptime]) + gl_PREREQ_STRPTIME + fi +]) + +# Prerequisites of lib/strptime.c. +AC_DEFUN([gl_PREREQ_STRPTIME], +[ + AC_REQUIRE([gl_TM_GMTOFF]) + : +]) diff --git a/m4/strtoimax.m4 b/m4/strtoimax.m4 new file mode 100644 index 0000000..8d8298b --- /dev/null +++ b/m4/strtoimax.m4 @@ -0,0 +1,35 @@ +# strtoimax.m4 serial 7 +dnl Copyright (C) 2002, 2003, 2004, 2006, 2009, 2010 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_STRTOIMAX], +[ + dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57. + AC_REQUIRE([AC_PROG_CPP]) + AC_REQUIRE([AC_PROG_EGREP]) + + AC_CACHE_CHECK([whether <inttypes.h> defines strtoimax as a macro], + gl_cv_func_strtoimax_macro, + [AC_EGREP_CPP([inttypes_h_defines_strtoimax], [#include <inttypes.h> +#ifdef strtoimax + inttypes_h_defines_strtoimax +#endif], + gl_cv_func_strtoimax_macro=yes, + gl_cv_func_strtoimax_macro=no)]) + + if test "$gl_cv_func_strtoimax_macro" != yes; then + AC_REPLACE_FUNCS([strtoimax]) + if test $ac_cv_func_strtoimax = no; then + gl_PREREQ_STRTOIMAX + fi + fi +]) + +# Prerequisites of lib/strtoimax.c. +AC_DEFUN([gl_PREREQ_STRTOIMAX], [ + AC_CHECK_DECLS([strtoll]) + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) +]) diff --git a/m4/strtol.m4 b/m4/strtol.m4 new file mode 100644 index 0000000..2f27ce8 --- /dev/null +++ b/m4/strtol.m4 @@ -0,0 +1,10 @@ +# strtol.m4 serial 5 +dnl Copyright (C) 2002, 2003, 2006, 2009, 2010 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_STRTOL], +[ + AC_REPLACE_FUNCS([strtol]) +]) diff --git a/m4/strtoll.m4 b/m4/strtoll.m4 new file mode 100644 index 0000000..065047a --- /dev/null +++ b/m4/strtoll.m4 @@ -0,0 +1,26 @@ +# strtoll.m4 serial 6 +dnl Copyright (C) 2002, 2004, 2006, 2008, 2009, 2010 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_STRTOLL], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + dnl We don't need (and can't compile) the replacement strtoll + dnl unless the type 'long long int' exists. + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + if test "$ac_cv_type_long_long_int" = yes; then + AC_REPLACE_FUNCS([strtoll]) + if test $ac_cv_func_strtoll = no; then + HAVE_STRTOLL=0 + gl_PREREQ_STRTOLL + fi + fi +]) + +# Prerequisites of lib/strtoll.c. +AC_DEFUN([gl_PREREQ_STRTOLL], [ + : +]) diff --git a/m4/strtoul.m4 b/m4/strtoul.m4 new file mode 100644 index 0000000..5da011c --- /dev/null +++ b/m4/strtoul.m4 @@ -0,0 +1,10 @@ +# strtoul.m4 serial 4 +dnl Copyright (C) 2002, 2006, 2009, 2010 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_STRTOUL], +[ + AC_REPLACE_FUNCS([strtoul]) +]) diff --git a/m4/strtoull.m4 b/m4/strtoull.m4 new file mode 100644 index 0000000..e58e136 --- /dev/null +++ b/m4/strtoull.m4 @@ -0,0 +1,26 @@ +# strtoull.m4 serial 6 +dnl Copyright (C) 2002, 2004, 2006, 2008, 2009, 2010 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_STRTOULL], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + dnl We don't need (and can't compile) the replacement strtoull + dnl unless the type 'unsigned long long int' exists. + AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) + if test "$ac_cv_type_unsigned_long_long_int" = yes; then + AC_REPLACE_FUNCS([strtoull]) + if test $ac_cv_func_strtoull = no; then + HAVE_STRTOULL=0 + gl_PREREQ_STRTOULL + fi + fi +]) + +# Prerequisites of lib/strtoull.c. +AC_DEFUN([gl_PREREQ_STRTOULL], [ + : +]) diff --git a/m4/strtoumax.m4 b/m4/strtoumax.m4 new file mode 100644 index 0000000..684634f --- /dev/null +++ b/m4/strtoumax.m4 @@ -0,0 +1,35 @@ +# strtoumax.m4 serial 7 +dnl Copyright (C) 2002, 2003, 2004, 2006, 2009, 2010 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_STRTOUMAX], +[ + dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57. + AC_REQUIRE([AC_PROG_CPP]) + AC_REQUIRE([AC_PROG_EGREP]) + + AC_CACHE_CHECK([whether <inttypes.h> defines strtoumax as a macro], + gl_cv_func_strtoumax_macro, + [AC_EGREP_CPP([inttypes_h_defines_strtoumax], [#include <inttypes.h> +#ifdef strtoumax + inttypes_h_defines_strtoumax +#endif], + gl_cv_func_strtoumax_macro=yes, + gl_cv_func_strtoumax_macro=no)]) + + if test "$gl_cv_func_strtoumax_macro" != yes; then + AC_REPLACE_FUNCS([strtoumax]) + if test $ac_cv_func_strtoumax = no; then + gl_PREREQ_STRTOUMAX + fi + fi +]) + +# Prerequisites of lib/strtoumax.c. +AC_DEFUN([gl_PREREQ_STRTOUMAX], [ + AC_CHECK_DECLS([strtoull]) + AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) +]) diff --git a/m4/symlink.m4 b/m4/symlink.m4 new file mode 100644 index 0000000..3d14e69 --- /dev/null +++ b/m4/symlink.m4 @@ -0,0 +1,38 @@ +# serial 2 +# See if we need to provide symlink replacement. + +dnl Copyright (C) 2009, 2010 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. + +# Written by Eric Blake. + +AC_DEFUN([gl_FUNC_SYMLINK], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([symlink]) + dnl The best we can do on mingw is provide a dummy that always fails, so + dnl that compilation can proceed with fewer ifdefs. On Solaris 9 and + dnl FreeBSD 7.2, we want to fix a bug with trailing slash handling. + if test $ac_cv_func_symlink = no; then + HAVE_SYMLINK=0 + AC_LIBOBJ([symlink]) + else + AC_CACHE_CHECK([whether symlink handles trailing slash correctly], + [gl_cv_func_symlink_works], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <unistd.h> +]], [[if (!symlink ("a", "conftest.link/")) return 1; + if (symlink ("conftest.f", "conftest.lnk2")) return 2; + if (!symlink ("a", "conftest.lnk2/")) return 3;]])], + [gl_cv_func_symlink_works=yes], [gl_cv_func_symlink_works=no], + [gl_cv_func_symlink_works="guessing no"]) + rm -f conftest.f conftest.link conftest.lnk2]) + if test "$gl_cv_func_symlink_works" != yes; then + REPLACE_SYMLINK=1 + AC_LIBOBJ([symlink]) + fi + fi +]) diff --git a/m4/sys_stat_h.m4 b/m4/sys_stat_h.m4 new file mode 100644 index 0000000..7181c25 --- /dev/null +++ b/m4/sys_stat_h.m4 @@ -0,0 +1,82 @@ +# sys_stat_h.m4 serial 24 -*- Autoconf -*- +dnl Copyright (C) 2006-2010 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 For the mkdir substitute. + AC_REQUIRE([AC_C_INLINE]) + + dnl Check for broken stat macros. + AC_REQUIRE([AC_HEADER_STAT]) + + gl_CHECK_NEXT_HEADERS([sys/stat.h]) + + 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 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_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]) + 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/m4/sys_time_h.m4 b/m4/sys_time_h.m4 new file mode 100644 index 0000000..da57527 --- /dev/null +++ b/m4/sys_time_h.m4 @@ -0,0 +1,72 @@ +# Configure a replacement for <sys/time.h>. +# serial 6 + +# Copyright (C) 2007, 2009, 2010 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 + + 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> + ]], + [[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 + 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]) +]) diff --git a/m4/sys_wait_h.m4 b/m4/sys_wait_h.m4 new file mode 100644 index 0000000..b0d23fa --- /dev/null +++ b/m4/sys_wait_h.m4 @@ -0,0 +1,25 @@ +# sys_wait_h.m4 serial 4 +dnl Copyright (C) 2008-2010 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]) +]) + +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]) +]) + +AC_DEFUN([gl_SYS_WAIT_H_DEFAULTS], +[ + dnl Assume proper GNU behavior unless another module says otherwise. +]) diff --git a/m4/tempname.m4 b/m4/tempname.m4 new file mode 100644 index 0000000..bf83f19 --- /dev/null +++ b/m4/tempname.m4 @@ -0,0 +1,22 @@ +#serial 3 + +# Copyright (C) 2006-2007, 2009-2010 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], +[ + AC_REQUIRE([AC_SYS_LARGEFILE]) + + AC_LIBOBJ([tempname]) + gl_PREREQ_TEMPNAME +]) + +# Prerequisites of lib/tempname.c. +AC_DEFUN([gl_PREREQ_TEMPNAME], +[ + : +]) diff --git a/m4/time_h.m4 b/m4/time_h.m4 new file mode 100644 index 0000000..b88ba94 --- /dev/null +++ b/m4/time_h.m4 @@ -0,0 +1,92 @@ +# Configure a more-standard replacement for <time.h>. + +# Copyright (C) 2000-2001, 2003-2007, 2009-2010 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_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_CHECK_NEXT_HEADERS([time.h]) + AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) +]) + +dnl Define HAVE_STRUCT_TIMESPEC if `struct timespec' is declared +dnl in time.h or sys/time.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 + 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 + fi + fi + AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) + AC_SUBST([SYS_TIME_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_MKTIME=0; AC_SUBST([GNULIB_MKTIME]) + GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP]) + GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME]) + GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM]) + GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_LOCALTIME_R=1; AC_SUBST([HAVE_LOCALTIME_R]) + HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP]) + HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME]) + HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM]) + 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_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_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM]) +]) diff --git a/m4/time_r.m4 b/m4/time_r.m4 new file mode 100644 index 0000000..9e82d39 --- /dev/null +++ b/m4/time_r.m4 @@ -0,0 +1,54 @@ +dnl Reentrant time functions: localtime_r, gmtime_r. + +dnl Copyright (C) 2003, 2006-2010 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]) + + AC_CHECK_FUNCS_ONCE([localtime_r]) + if test $ac_cv_func_localtime_r = yes; then + 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 + if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then + AC_LIBOBJ([time_r]) + gl_PREREQ_TIME_R + fi +]) + +# Prerequisites of lib/time_r.c. +AC_DEFUN([gl_PREREQ_TIME_R], [ + : +]) diff --git a/m4/timegm.m4 b/m4/timegm.m4 new file mode 100644 index 0000000..bdaafbf --- /dev/null +++ b/m4/timegm.m4 @@ -0,0 +1,40 @@ +# timegm.m4 serial 8 +dnl Copyright (C) 2003, 2007, 2009, 2010 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]) + REPLACE_TIMEGM=0 + AC_CHECK_FUNCS_ONCE([timegm]) + if test $ac_cv_func_timegm = yes; then + if test $ac_cv_func_working_mktime = no; 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 + AC_LIBOBJ([timegm]) + gl_PREREQ_TIMEGM + fi +]) + +# Prerequisites of lib/timegm.c. +AC_DEFUN([gl_PREREQ_TIMEGM], [ + AC_REQUIRE([gl_TIME_R]) + AC_REQUIRE([gl_FUNC_MKTIME]) + if test $ac_cv_func_working_mktime = yes; then + AC_CHECK_FUNC([__mktime_internal], , + [# mktime works but it doesn't export __mktime_internal, + # so we need to substitute our own mktime implementation. + AC_LIBOBJ([mktime]) + AC_DEFINE([mktime], [rpl_mktime], + [Define to rpl_mktime if the replacement function should be used.]) + gl_PREREQ_MKTIME]) + fi +]) diff --git a/m4/timespec.m4 b/m4/timespec.m4 new file mode 100644 index 0000000..5dbaed7 --- /dev/null +++ b/m4/timespec.m4 @@ -0,0 +1,15 @@ +#serial 14 + +# Copyright (C) 2000-2001, 2003-2007, 2009-2010 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], +[ + dnl Prerequisites of lib/timespec.h. + AC_REQUIRE([AC_C_INLINE]) +]) diff --git a/m4/tm_gmtoff.m4 b/m4/tm_gmtoff.m4 new file mode 100644 index 0000000..43bda96 --- /dev/null +++ b/m4/tm_gmtoff.m4 @@ -0,0 +1,14 @@ +# tm_gmtoff.m4 serial 3 +dnl Copyright (C) 2002, 2009-2010 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/m4/unistd_h.m4 b/m4/unistd_h.m4 new file mode 100644 index 0000000..b26d0a9 --- /dev/null +++ b/m4/unistd_h.m4 @@ -0,0 +1,155 @@ +# unistd_h.m4 serial 46 +dnl Copyright (C) 2006-2010 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]) + AC_REQUIRE([AC_C_INLINE]) + + gl_CHECK_NEXT_HEADERS([unistd.h]) + + AC_CHECK_HEADERS_ONCE([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 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 <unistd.h> +/* Some systems declare various items in the wrong headers. */ +#ifndef __GLIBC__ +# include <fcntl.h> +# include <stdio.h> +# include <stdlib.h> +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# include <io.h> +# endif +#endif + ]], [chown dup2 dup3 environ euidaccess faccessat fchdir fchownat + fsync ftruncate getcwd getdomainname getdtablesize getgroups + gethostname getlogin getlogin_r getpagesize getusershell setusershell + endusershell lchown link linkat lseek pipe2 pread readlink readlinkat + rmdir sleep symlink symlinkat 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_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) + GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) + 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_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_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) + 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_PIPE2=0; AC_SUBST([GNULIB_PIPE2]) + GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD]) + GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) + GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT]) + GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR]) + GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) + GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK]) + GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT]) + GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R]) + GNULIB_UNISTD_H_GETOPT=0; AC_SUBST([GNULIB_UNISTD_H_GETOPT]) + 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_FSYNC=1; AC_SUBST([HAVE_FSYNC]) + HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) + HAVE_GETDOMAINNAME=1; AC_SUBST([HAVE_GETDOMAINNAME]) + 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_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) + HAVE_LINK=1; AC_SUBST([HAVE_LINK]) + HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) + HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) + HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) + HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) + HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) + HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) + HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) + HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) + HAVE_TTYNAME_R=1; AC_SUBST([HAVE_TTYNAME_R]) + 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_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_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_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) + REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) + REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) + REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) + 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_READLINK=0; AC_SUBST([REPLACE_READLINK]) + REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) + REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) + REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) + 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/m4/unlocked-io.m4 b/m4/unlocked-io.m4 new file mode 100644 index 0000000..bddec0d --- /dev/null +++ b/m4/unlocked-io.m4 @@ -0,0 +1,41 @@ +# unlocked-io.m4 serial 15 + +# Copyright (C) 1998-2006, 2009-2010 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/m4/usleep.m4 b/m4/usleep.m4 new file mode 100644 index 0000000..420512e --- /dev/null +++ b/m4/usleep.m4 @@ -0,0 +1,37 @@ +# usleep.m4 serial 1 +dnl Copyright (C) 2009, 2010 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 macro intentionally does not check for select or nanosleep; +dnl both of those modules can require external libraries. +AC_DEFUN([gl_FUNC_USLEEP], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + dnl usleep was required in POSIX 2001, but dropped as obsolete in + dnl POSIX 2008; therefore, it is not always exposed in headers. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_CHECK_FUNCS_ONCE([usleep]) + AC_CHECK_TYPE([useconds_t], [], + [AC_DEFINE([useconds_t], [unsigned int], [Define to an unsigned 32-bit + type if <sys/types.h> lacks this type.])]) + if test $ac_cv_func_usleep = no; then + HAVE_USLEEP=0 + AC_LIBOBJ([usleep]) + else + dnl POSIX allows implementations to reject arguments larger than + dnl 999999, but GNU guarantees it will work. + AC_CACHE_CHECK([whether usleep allows large arguments], + [gl_cv_func_usleep_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include <unistd.h> +]], [[return !!usleep (1000000);]])], + [gl_cv_func_usleep_works=yes], [gl_cv_func_usleep_works=no], + [gl_cv_func_usleep_works="guessing no"])]) + if test "$gl_cv_func_usleep_works" != yes; then + REPLACE_USLEEP=1 + AC_LIBOBJ([usleep]) + fi + fi +]) diff --git a/m4/vararrays.m4 b/m4/vararrays.m4 new file mode 100644 index 0000000..786bf33 --- /dev/null +++ b/m4/vararrays.m4 @@ -0,0 +1,35 @@ +# Check for variable-length arrays. + +#serial 2 + +# From Paul Eggert + +# Copyright (C) 2001, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +AC_DEFUN([AC_C_VARARRAYS], +[ + AC_CACHE_CHECK([for variable-length arrays], + ac_cv_c_vararrays, + [AC_TRY_COMPILE( + [], + [static int x; char a[++x]; a[sizeof a - 1] = 0; return a[0];], + ac_cv_c_vararrays=yes, + ac_cv_c_vararrays=no)]) + if test $ac_cv_c_vararrays = yes; then + AC_DEFINE([HAVE_C_VARARRAYS], [1], + [Define to 1 if C supports variable-length arrays.]) + fi +]) diff --git a/m4/version-etc.m4 b/m4/version-etc.m4 new file mode 100644 index 0000000..2c572b4 --- /dev/null +++ b/m4/version-etc.m4 @@ -0,0 +1,33 @@ +# version-etc.m4 serial 1 +# Copyright (C) 2009-2010 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/m4/warn-on-use.m4 b/m4/warn-on-use.m4 new file mode 100644 index 0000000..42daae8 --- /dev/null +++ b/m4/warn-on-use.m4 @@ -0,0 +1,45 @@ +# warn-on-use.m4 serial 2 +dnl Copyright (C) 2010 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) +# --------------------------------------- +# 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. +# +# If you assume C89, then it is generally safe to assume declarations +# for functions declared in that standard (such as gets) without +# needing gl_WARN_ON_USE_PREPARE. +AC_DEFUN([gl_WARN_ON_USE_PREPARE], +[ + 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 + 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/m4/warnings.m4 b/m4/warnings.m4 new file mode 100644 index 0000000..dad5c1f --- /dev/null +++ b/m4/warnings.m4 @@ -0,0 +1,36 @@ +# warnings.m4 serial 2 +dnl Copyright (C) 2008, 2009, 2010 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 + +# gl_AS_VAR_APPEND(VAR, VALUE) +# ---------------------------- +# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it. +m4_ifdef([AS_VAR_APPEND], +[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])], +[m4_define([gl_AS_VAR_APPEND], +[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])]) + +# gl_WARN_ADD(PARAMETER, [VARIABLE = WARN_CFLAGS]) +# ------------------------------------------------ +# Adds parameter to WARN_CFLAGS if the compiler supports it. For example, +# gl_WARN_ADD([-Wparentheses]). +AC_DEFUN([gl_WARN_ADD], +[AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_$1])dnl +AC_CACHE_CHECK([whether compiler handles $1], [gl_Warn], [ + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="${CPPFLAGS} $1" + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([])], + [AS_VAR_SET([gl_Warn], [yes])], + [AS_VAR_SET([gl_Warn], [no])]) + CPPFLAGS="$save_CPPFLAGS" +]) +AS_VAR_PUSHDEF([gl_Flags], m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]))dnl +AS_VAR_IF([gl_Warn], [yes], [gl_AS_VAR_APPEND([gl_Flags], [" $1"])]) +AS_VAR_POPDEF([gl_Flags])dnl +AS_VAR_POPDEF([gl_Warn])dnl +m4_ifval([$2], [AS_LITERAL_IF([$2], [AC_SUBST([$2])], [])])dnl +]) diff --git a/m4/wchar_h.m4 b/m4/wchar_h.m4 new file mode 100644 index 0000000..8cae82d --- /dev/null +++ b/m4/wchar_h.m4 @@ -0,0 +1,152 @@ +dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues. + +dnl Copyright (C) 2007-2010 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 33 + +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. + AC_CHECK_HEADERS_ONCE([wchar.h]) + 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([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]) + + 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 additional headers. */ +#ifndef __GLIBC__ +# include <stddef.h> +# include <stdio.h> +# include <time.h> +#endif +#include <wchar.h> + ]], [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb + wcsrtombs wcsnrtombs wcwidth]) +]) + +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 <http://sourceware.org/bugzilla/show_bug.cgi?id=4022> + dnl and <http://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 +#include <wchar.h> +extern int zero (void); +int main () { return zero(); } +]])]) + if AC_TRY_EVAL([ac_compile]); then + mv conftest.$ac_objext conftest1.$ac_objext + AC_LANG_CONFTEST([ + AC_LANG_SOURCE([[#define wcstod renamed_wcstod +#include <wchar.h> +int zero (void) { return 0; } +]])]) + if AC_TRY_EVAL([ac_compile]); then + mv conftest.$ac_objext conftest2.$ac_objext + 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 + rm -f conftest1.$ac_objext conftest2.$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 + <http://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 +]) + +dnl Unconditionally enables the replacement of <wchar.h>. +AC_DEFUN([gl_REPLACE_WCHAR_H], +[ + dnl This is a no-op, because <wchar.h> is always overridden. + : +]) + +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]) + 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_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]) +]) diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4 new file mode 100644 index 0000000..ed804e6 --- /dev/null +++ b/m4/wchar_t.m4 @@ -0,0 +1,20 @@ +# wchar_t.m4 serial 3 (gettext-0.18) +dnl Copyright (C) 2002-2003, 2008-2010 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_TRY_COMPILE([#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/m4/wcrtomb.m4 b/m4/wcrtomb.m4 new file mode 100644 index 0000000..6a2d772 --- /dev/null +++ b/m4/wcrtomb.m4 @@ -0,0 +1,93 @@ +# wcrtomb.m4 serial 5 +dnl Copyright (C) 2008-2010 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 + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_WCRTOMB=1 + else + dnl On AIX 4.3, OSF/1 5.1 and Solaris 10, wcrtomb (NULL, 0, NULL) sometimes + dnl 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 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_TRY_RUN([ +#include <locale.h> +#include <stdio.h> +#include <string.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + return 0; +}], + [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 + if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([wcrtomb]) + gl_PREREQ_WCRTOMB + fi +]) + +# Prerequisites of lib/wcrtomb.c. +AC_DEFUN([gl_PREREQ_WCRTOMB], [ + : +]) diff --git a/m4/wctob.m4 b/m4/wctob.m4 new file mode 100644 index 0000000..3af3cc7 --- /dev/null +++ b/m4/wctob.m4 @@ -0,0 +1,114 @@ +# wctob.m4 serial 5 +dnl Copyright (C) 2008-2010 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_DECL_WCTOB=0 + gl_REPLACE_WCHAR_H + AC_LIBOBJ([wctob]) + gl_PREREQ_WCTOB + else + + 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 <http://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 yes otherwise. + *) gl_cv_func_wctob_works="guessing yes" ;; + esac +changequote([,])dnl + case "$host_os" in + cygwin*) + AC_TRY_RUN([ +#include <locale.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_TRY_RUN([ +#include <locale.h> +#include <string.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 = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([wctob]) + gl_PREREQ_WCTOB + else + + 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 + gl_REPLACE_WCHAR_H + fi + fi + fi +]) + +# Prerequisites of lib/wctob.c. +AC_DEFUN([gl_PREREQ_WCTOB], [ + : +]) diff --git a/m4/wctype_h.m4 b/m4/wctype_h.m4 new file mode 100644 index 0000000..3292451 --- /dev/null +++ b/m4/wctype_h.m4 @@ -0,0 +1,76 @@ +# wctype_h.m4 serial 6 + +dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it. + +dnl Copyright (C) 2006-2010 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([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_CHECK_FUNCS_ONCE([iswblank]) + if test $ac_cv_func_iswblank = yes; then + HAVE_ISWBLANK=1 + else + HAVE_ISWBLANK=0 + fi + AC_SUBST([HAVE_ISWBLANK]) + AC_CHECK_HEADERS_ONCE([wctype.h]) + AC_REQUIRE([AC_C_INLINE]) + + 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]) + + 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([[ + #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], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h> + #if __GNU_LIBRARY__ == 1 + Linux libc5 i18n is broken. + #endif]], [])], + [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no]) + ]) + ]) + fi + gl_CHECK_NEXT_HEADERS([wctype.h]) + HAVE_WCTYPE_H=1 + else + HAVE_WCTYPE_H=0 + fi + AC_SUBST([HAVE_WCTYPE_H]) + + if test "$gl_cv_func_iswcntrl_works" = no; then + REPLACE_ISWCNTRL=1 + else + REPLACE_ISWCNTRL=0 + fi + AC_SUBST([REPLACE_ISWCNTRL]) +]) diff --git a/m4/wcwidth.m4 b/m4/wcwidth.m4 new file mode 100644 index 0000000..acceba5 --- /dev/null +++ b/m4/wcwidth.m4 @@ -0,0 +1,94 @@ +# wcwidth.m4 serial 16 +dnl Copyright (C) 2006-2010 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_WCWIDTH], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + dnl Persuade glibc <wchar.h> to declare wcwidth(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) + + AC_CHECK_HEADERS_ONCE([wchar.h]) + AC_CHECK_FUNCS_ONCE([wcwidth]) + + AC_CHECK_DECLS([wcwidth], [], [], [ +/* AIX 3.2.5 declares wcwidth in <string.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> +]) + if test $ac_cv_have_decl_wcwidth != yes; then + HAVE_DECL_WCWIDTH=0 + fi + + if test $ac_cv_func_wcwidth = yes; then + dnl On MacOS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1. + dnl On OSF/1 5.1, wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1. + dnl This leads to bugs in 'ls' (coreutils). + AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales], + [gl_cv_func_wcwidth_works], + [ + AC_TRY_RUN([ +#include <locale.h> +/* AIX 3.2.5 declares wcwidth in <string.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> +#if !HAVE_DECL_WCWIDTH +extern +# ifdef __cplusplus +"C" +# endif +int wcwidth (int); +#endif +int main () +{ + if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL) + if (wcwidth (0x0301) > 0 || wcwidth (0x200B) > 0) + return 1; + return 0; +}], [gl_cv_func_wcwidth_works=yes], [gl_cv_func_wcwidth_works=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_wcwidth_works="guessing yes";; + *) gl_cv_func_wcwidth_works="guessing no";; + esac +changequote([,])dnl + ]) + ]) + case "$gl_cv_func_wcwidth_works" in + *yes) ;; + *no) REPLACE_WCWIDTH=1 ;; + esac + fi + if test $ac_cv_func_wcwidth != yes || test $REPLACE_WCWIDTH = 1; then + AC_LIBOBJ([wcwidth]) + fi + if test $ac_cv_func_wcwidth != yes || test $REPLACE_WCWIDTH = 1 \ + || test $HAVE_DECL_WCWIDTH = 0; then + gl_REPLACE_WCHAR_H + fi + dnl We don't substitute HAVE_WCWIDTH. We assume that if the system does not + dnl have the wcwidth function, then it does not declare it. +]) diff --git a/m4/wint_t.m4 b/m4/wint_t.m4 new file mode 100644 index 0000000..a6c7d15 --- /dev/null +++ b/m4/wint_t.m4 @@ -0,0 +1,28 @@ +# wint_t.m4 serial 4 (gettext-0.18) +dnl Copyright (C) 2003, 2007-2010 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. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WINT_T], +[ + AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], + [AC_TRY_COMPILE([ +/* 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.]) + fi +]) diff --git a/m4/xalloc.m4 b/m4/xalloc.m4 new file mode 100644 index 0000000..83247fe --- /dev/null +++ b/m4/xalloc.m4 @@ -0,0 +1,25 @@ +# xalloc.m4 serial 16 +dnl Copyright (C) 2002, 2003, 2004, 2005, 2006, 2009, 2010 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. + +AC_DEFUN([gl_XALLOC], +[ + AC_LIBOBJ([xmalloc]) + + gl_PREREQ_XALLOC + gl_PREREQ_XMALLOC +]) + +# Prerequisites of lib/xalloc.h. +AC_DEFUN([gl_PREREQ_XALLOC], [ + AC_REQUIRE([gl_INLINE]) + : +]) + +# Prerequisites of lib/xmalloc.c. +AC_DEFUN([gl_PREREQ_XMALLOC], [ + : +]) diff --git a/m4/xstrndup.m4 b/m4/xstrndup.m4 new file mode 100644 index 0000000..74302cc --- /dev/null +++ b/m4/xstrndup.m4 @@ -0,0 +1,15 @@ +# xstrndup.m4 serial 2 +dnl Copyright (C) 2003, 2009, 2010 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_XSTRNDUP], +[ + gl_PREREQ_XSTRNDUP +]) + +# Prerequisites of lib/xstrndup.c. +AC_DEFUN([gl_PREREQ_XSTRNDUP], [ + : +]) diff --git a/m4/xstrtol.m4 b/m4/xstrtol.m4 new file mode 100644 index 0000000..25ab9b3 --- /dev/null +++ b/m4/xstrtol.m4 @@ -0,0 +1,12 @@ +#serial 10 +dnl Copyright (C) 2002-2007, 2009-2010 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_XSTRTOL], +[ + AC_LIBOBJ([xstrtol]) + AC_LIBOBJ([xstrtoul]) + AC_LIBOBJ([xstrtol-error]) +]) diff --git a/maint.mk b/maint.mk new file mode 100644 index 0000000..9bca202 --- /dev/null +++ b/maint.mk @@ -0,0 +1,1149 @@ +# -*-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-2010 Free Software Foundation, Inc. +## +## This program is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General 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/>. + +# This is reported not to work with make-3.79.1 +# ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +ME := maint.mk + +# Override this in cfg.mk if you use a non-standard build-aux directory. +build_aux ?= $(srcdir)/build-aux + +# 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 && echo --rsyncable) +GZIP_ENV = '--no-name --best $(gzip_rsyncable)' + +GIT = git +VC = $(GIT) +VC-tag = git tag -s -m '$(VERSION)' -u '$(gpg_key_ID)' + +VC_LIST = $(build_aux)/vc-list-files -C $(srcdir) + +# 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. +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)' \ + $(_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 + +# 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)) + +ifeq ($(gnu_rel_host),ftp.gnu.org) +url_dir_list ?= http://ftpmirror.gnu.org/$(PACKAGE) +else +url_dir_list ?= ftp://$(gnu_rel_host)/gnu/$(PACKAGE) +endif + +# Override this in cfg.mk if you are using a different format in your +# NEWS file. +today = $(shell date +%Y-%m-%d) +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. ## +## --------------- ## + +_cfg_mk := $(shell test -f $(srcdir)/cfg.mk && echo '$(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) + +local-checks-available = \ + $(syntax-check-rules) +.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) + +# _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. +# +# in_vc_files | in_files +# +# grep-E-style regexp denoting the files to check. If no files +# are specified the default are all the 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. + +# By default, _sc_search_regexp does not ignore case. +export ignore_case = +_ignore_case = $$(test -n "$$ignore_case" && echo -i || :) + +define _sc_say_and_exit + dummy=; : so we do not need a semicolon before each use; \ + { echo -e "$(ME): $$msg" 1>&2; exit 1; }; +endef + +# _sc_search_regexp used to be named _prohibit_regexp. However, +# upgrading to the new definition and leaving the old name undefined +# would usually convert each custom rule using $(_prohibit_regexp) +# (usually defined in cfg.mk) into a no-op. This definition ensures +# that people know right away if they're still using the old name. +# FIXME: remove in 2012. +_prohibit_regexp = \ + $(error '*** you need to s/_prohibit_regexp/_sc_search_regexp/, and adapt') + +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 -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"); \ + 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=$$(grep -l "$$containing" $$files); } || :; \ + test -n "$$files" && test -n "$$non_containing" \ + && { files=$$(grep -vl "$$non_containing" $$files); } || :; \ + \ + : Check for the construct; \ + if test -n "$$files"; then \ + if test -n "$$prohibit"; then \ + grep $$with_grep_options $(_ignore_case) -nE "$$prohibit" $$files \ + && { msg="$$halt" $(_sc_say_and_exit) } || :; \ + else \ + grep $$with_grep_options $(_ignore_case) -LE "$$require" $$files \ + | grep . \ + && { msg="$$halt" $(_sc_say_and_exit) } || :; \ + fi \ + else :; \ + fi || :; +endef + +sc_avoid_if_before_free: + @$(build_aux)/useless-if-before-free \ + $(useless_free_options) \ + $$($(VC_LIST_EXCEPT) | grep -v useless-if-before-free) && \ + { echo '$(ME): found useless "if" before "free" above' 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. +sc_prohibit_strcmp: + @grep -nE '! *str''cmp *\(|\<str''cmp *\([^)]+\) *==' \ + $$($(VC_LIST_EXCEPT)) \ + | grep -vE ':# *define STREQ\(' && \ + { echo '$(ME): use STREQ in place of the above uses of str''cmp' \ + 1>&2; exit 1; } || : + +# 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) ?\([0-9]|\<error ?\([1-9][0-9]*,' \ + 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: + @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \ + | 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: + @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \ + | 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: + @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \ + | grep -E '[^."]\."' && \ + { echo '$(ME): found error message ending in period' 1>&2; \ + exit 1; } || : + +sc_file_system: + @prohibit=file''system \ + 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) + +# 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 -l '\.c$$' > /dev/null; then \ + fail=0; \ + for i in $$($(VC_LIST_EXCEPT) | grep '\.c$$'); do \ + grep '^# *include\>' $$i | sed 1q \ + | grep -E '^# *include $(config_h_header)' > /dev/null \ + || { echo $$i; fail=1; }; \ + done; \ + test $$fail = 1 && \ + { 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, enclosed in <> 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 -l '\.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)? *\(' $(_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_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))\>|\<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)' \ + $(_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)\>' \ + $(_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) + +_empty = +_sp = $(_empty) $(_empty) +# 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) + +# 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) + +# Get the list of symbol names with this: +# perl -lne '/^# *define (\w+)\(/ and print $1' lib/intprops.h|grep -v '^s'|fmt +_intprops_names = \ + TYPE_IS_INTEGER TYPE_TWOS_COMPLEMENT TYPE_ONES_COMPLEMENT \ + TYPE_SIGNED_MAGNITUDE TYPE_SIGNED TYPE_MINIMUM TYPE_MAXIMUM \ + INT_STRLEN_BOUND INT_BUFSIZE_BOUND +_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) + +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 set_program_name. +sc_program_name: + @require='set_program_name *\(m?argv\[0\]\);' \ + in_vc_files='\.c$$' \ + containing='^main *(' \ + halt='the above files do not call set_program_name' \ + $(_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_the_the: + @prohibit='\<the ''the\>' \ + ignore_case=1 \ + halt='found use of "the ''the";' \ + $(_sc_search_regexp) + +sc_trailing_blank: + @prohibit='[ ]$$' \ + halt='found trailing blank(s)' \ + $(_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) + +# 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: + @grep -nE \ + '\<error *\([^"]*"[^"]*[a-z]{3}' $$($(VC_LIST_EXCEPT)) \ + | grep -v '_''(' && \ + { echo '$(ME): found unmarked diagnostic(s)' 1>&2; \ + exit 1; } || : + +# 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='do not test the above HAVE_<header>_H symbol(s);\n'\ +' with the corresponding gnulib module, they are always true' \ + $(_sc_search_regexp) + +# 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 @acronym{} as it is not a good idea. +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. +# +# 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 ends in two or more newline bytes. +# 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... +# +detect_empty_lines_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" and (print $$f), $$fail=1; \ + } \ + END { exit defined $$fail } +sc_prohibit_empty_lines_at_EOF: + @perl -le '$(detect_empty_lines_at_EOF_)' $$($(VC_LIST_EXCEPT)) \ + || { echo '$(ME): the above files end with empty line(s)' \ + 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) + +_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) + +# 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=$$(grep -l 'proper_name_utf8 ''("' $$($(VC_LIST_EXCEPT)));\ + 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: + @grep '^ *static.*struct option ' $$($(VC_LIST_EXCEPT)) \ + | grep -Ev 'const struct option|struct option const' && { \ + echo 1>&2 '$(ME): add "const" to the above declarations'; \ + exit 1; } || : + +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. +# We use perl rather than "grep -nE ..." to exempt a single +# use of an @...@-delimited variable name in src/Makefile.am. +# 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 '/\@[A-Z_0-9]+\@/'$(_makefile_at_at_check_exceptions) \ + -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}' \ + $$($(VC_LIST_EXCEPT) | grep -E '(^|/)Makefile\.am$$') \ + && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || : + +news-check: NEWS + if head $(srcdir)/NEWS | 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' + +# Verify that all source files using _() are listed in po/POTFILES.in. +po_file = po/POTFILES.in +sc_po_check: + @if test -f $(po_file); then \ + grep -E -v '^(#|$$)' $(po_file) \ + | grep -v '^src/false\.c$$' | sort > $@-1; \ + files=; \ + for file in $$($(VC_LIST_EXCEPT)) lib/*.[ch]; do \ + test -r $$file || continue; \ + case $$file in \ + *.m4|*.mk) continue ;; \ + *.?|*.??) ;; \ + *) continue;; \ + esac; \ + case $$file in \ + *.[ch]) \ + base=`expr " $$file" : ' \(.*\)\..'`; \ + { test -f $$base.l || test -f $$base.y; } && continue;; \ + esac; \ + files="$$files $$file"; \ + done; \ + grep -E -l '\b(N?_|gettext *)\([^)"]*("|$$)' $$files \ + | 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 = '$(ME): 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. +writable-files: + if test -d $(release_archive_dir); then :; else \ + for file in $(distdir).tar.gz \ + $(release_archive_dir)/$(distdir).tar.gz; do \ + test -e $$file || continue; \ + test -w $$file \ + || { echo ERROR: $$file is not writable; fail=1; }; \ + done; \ + test "$$fail" && exit 1 || : ; \ + fi + +v_etc_file = 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)' Free' \ + 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 ?= ^ *\. [^ ]*/init\.sh +sc_cross_check_PATH_usage_in_tests: + @if test -f $(_hv_file); then \ + if grep -l 'VERSION mismatch' $(_hv_file) >/dev/null \ + && grep -lE '$(_hv_regex)' $(_hv_file) >/dev/null; then \ + good=$$(grep -E '$(_hv_regex)' < $(_hv_file)); \ + grep -LFx "$$good" \ + $$(grep -lE '$(_hv_regex)' $$($(VC_LIST_EXCEPT))) \ + | grep . && \ + { echo "$(ME): the above files use path_prepend_ inconsistently" \ + 1>&2; exit 1; } || :; \ + fi; \ + else \ + echo "$@: skipped: no such file: $(_hv_file)"; \ + fi + +# #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) + +sc_vulnerable_makefile_CVE-2009-4029: + @prohibit='perm -777 -exec chmod a\+rwx|chmod 777 \$$\(distdir\)' \ + in_files=$$(find $(srcdir) -name Makefile.in) \ + halt='the above files are vulnerable; beware of running\n'\ +'"make dist*" rules, and upgrade to fixed automake\n'\ +'see http://bugzilla.redhat.com/542609 for details' \ + $(_sc_search_regexp) + +vc-diff-check: + (unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || : + 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_dir ?= $(srcdir)/gnulib +gnulib-version = $$(cd $(gnulib_dir) && git describe) +bootstrap-tools ?= autoconf,automake,gnulib + +# 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 ?= \ + $$(git cat-file tag v$(VERSION) > .ann-sig \ + && gpgv .ann-sig - < /dev/null 2>&1 \ + | sed -n '/.*key ID \([0-9A-F]*\)/s//\1/p'; rm -f .ann-sig) + +announcement: NEWS ChangeLog $(rel-files) + @$(build_aux)/announce-gen \ + --release-type=$(RELEASE_TYPE) \ + --package=$(PACKAGE) \ + --prev=$(PREV_VERSION) \ + --curr=$(VERSION) \ + --gpg-key-id=$(gpg_key_ID) \ + --news=$(srcdir)/NEWS \ + --bootstrap-tools=$(bootstrap-tools) \ + --gnulib-version=$(gnulib-version) \ + --no-print-checksums \ + $(addprefix --url-dir=, $(url_dir_list)) + +## ---------------- ## +## Updating files. ## +## ---------------- ## + +ftp-gnu = ftp://ftp.gnu.org/gnu +www-gnu = http://www.gnu.org + +upload_dest_dir_ ?= $(PACKAGE) +emit_upload_commands: + @echo ===================================== + @echo ===================================== + @echo "$(build_aux)/gnupload $(GNUPLOADFLAGS) \\" + @echo " --to $(gnu_rel_host):$(upload_dest_dir_) \\" + @echo " $(rel-files)" + @echo '# send the ~/announce-$(my_distdir) e-mail' + @echo ===================================== + @echo ===================================== + +noteworthy = * Noteworthy changes in release ?.? (????-??-??) [?] +define emit-commit-log + printf '%s\n' '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: + if test -d $(srcdir)/.git; 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 + +.PHONY: alpha beta stable +ALL_RECURSIVE_TARGETS += alpha beta stable +alpha beta stable: $(local-check) writable-files no-submodule-changes + test $@ = stable \ + && { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$' \ + || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\ + || : + $(MAKE) vc-diff-check + $(MAKE) news-check + $(MAKE) distcheck + $(MAKE) dist XZ_OPT=-9ev + $(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ + $(MAKE) -s emit_upload_commands RELEASE_TYPE=$@ + +# Override this in cfg.mk if you follow different procedures. +release-prep-hook ?= release-prep + +.PHONY: release-prep +release-prep: + case $$RELEASE_TYPE in alpha|beta|stable) ;; \ + *) echo "invalid RELEASE_TYPE: $$RELEASE_TYPE" 1>&2; exit 1;; esac + $(MAKE) -s announcement > ~/announce-$(my_distdir) + if test -d $(release_archive_dir); then \ + ln $(rel-files) $(release_archive_dir); \ + chmod a-w $(rel-files); \ + fi + echo $(VERSION) > $(prev_version_file) + $(MAKE) update-NEWS-hash + perl -pi -e '$$. == 3 and print "$(noteworthy)\n\n\n"' NEWS + $(emit-commit-log) > .ci-msg + $(VC) commit -F .ci-msg -a + rm .ci-msg + +.PHONY: web-manual +web-manual: + @test -z "$(manual_title)" \ + && { echo define manual_title in cfg.mk 1>&2; exit 1; } || : + @cd '$(srcdir)/doc'; \ + $(SHELL) ../build-aux/gendocs.sh -o '$(abs_builddir)/doc/manual' \ + --email $(PACKAGE_BUGREPORT) $(PACKAGE) \ + "$(PACKAGE_NAME) - $(manual_title)" + @echo " *** Upload the doc/manual directory to web-cvs." + +# 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: init-coverage build-coverage gen-coverage + +# Update gettext files. +PACKAGE ?= $(shell basename $(PWD)) +PO_DOMAIN ?= $(PACKAGE) +POURL = http://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//' | sed '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: + grep -l -w Copyright \ + $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \ + | $(update-copyright-env) xargs $(build_aux)/$@ diff --git a/man/Makefile.am b/man/Makefile.am new file mode 100644 index 0000000..a2dc7af --- /dev/null +++ b/man/Makefile.am @@ -0,0 +1,32 @@ +# Automakefile for GNU diffutils man pages + +# Copyright (C) 2002, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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_man1_MANS = cmp.1 diff.1 diff3.1 sdiff.1 +MAINTAINERCLEANFILES = $(dist_man1_MANS) + +S = $(top_srcdir)/src +cmp.1: $S/cmp.c +diff.1: $S/diff.c +diff3.1: $S/diff3.c +sdiff.1: $S/sdiff.c + +# Depend on configure.ac to get version number changes. +$(dist_man1_MANS): $(top_srcdir)/configure.ac + $(AM_V_GEN)base=`expr $@ : '\(.*\).1'` && \ + (echo '[NAME]' && sed 's@/\* *@@; s/-/\\-/; q' $S/$$base.c) | \ + $(HELP2MAN) -i - -S '$(PACKAGE) $(VERSION)' ../src/$$base | \ + sed 's/^\.B info .*/.B info diff/' >$@ diff --git a/man/Makefile.in b/man/Makefile.in new file mode 100644 index 0000000..8988f09 --- /dev/null +++ b/man/Makefile.in @@ -0,0 +1,1086 @@ +# Makefile.in generated by automake 1.11a from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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@ + +# Automakefile for GNU diffutils man pages + +# Copyright (C) 2002, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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@ +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 = man +DIST_COMMON = $(dist_man1_MANS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/c-stack.m4 \ + $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.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/exclude.m4 \ + $(top_srcdir)/m4/extensions.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/file-type.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/freopen.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21_gl.m4 $(top_srcdir)/m4/gnu-make.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \ + $(top_srcdir)/m4/iconv_open.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lib-ld_gl.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix_gl.m4 \ + $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-tr.m4 \ + $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/longlong_gl.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/manywarnings.m4 \ + $(top_srcdir)/m4/mbchar.m4 $(top_srcdir)/m4/mbiter.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbslen.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/memchr.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/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/onceonly.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po_gl.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/putenv.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.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/stdio-safer.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/strftime.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strptime.m4 \ + $(top_srcdir)/m4/strtoimax.m4 $(top_srcdir)/m4/strtol.m4 \ + $(top_srcdir)/m4/strtoll.m4 $(top_srcdir)/m4/strtoul.m4 \ + $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/strtoumax.m4 \ + $(top_srcdir)/m4/symlink.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/time_h.m4 \ + $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/vararrays.m4 \ + $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.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/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \ + $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xstrtol.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +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' +man1dir = $(mandir)/man1 +am__installdirs = "$(DESTDIR)$(man1dir)" +NROFF = nroff +MANS = $(dist_man1_MANS) +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@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +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@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +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@ +FNMATCH_H = @FNMATCH_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +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_FFLUSH = @GNULIB_FFLUSH@ +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_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +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_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_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +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_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_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STAT = @GNULIB_STAT@ +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_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_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ +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_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WARN_CFLAGS = @GNULIB_WARN_CFLAGS@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +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_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +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_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_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +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_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +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_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LIBSIGSEGV = @HAVE_LIBSIGSEGV@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOCALTIME_R = @HAVE_LOCALTIME_R@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +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_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +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_SLEEP = @HAVE_SLEEP@ +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_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_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_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_TIMEGM = @HAVE_TIMEGM@ +HAVE_TTYNAME_R = @HAVE_TTYNAME_R@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +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_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HELP2MAN = @HELP2MAN@ +ICONV_H = @ICONV_H@ +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@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBDIFFUTILS_LIBDEPS = @LIBDIFFUTILS_LIBDEPS@ +LIBDIFFUTILS_LTLIBDEPS = @LIBDIFFUTILS_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSIGSEGV = @LIBSIGSEGV@ +LIBSIGSEGV_PREFIX = @LIBSIGSEGV_PREFIX@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +MAKEINFO = @MAKEINFO@ +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_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_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_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_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_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_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_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_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_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_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@ +OBJEXT = @OBJEXT@ +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@ +POSUB = @POSUB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PR_PROGRAM = @PR_PROGRAM@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +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_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +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_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_NANOSLEEP = @REPLACE_NANOSLEEP@ +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_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +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_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +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_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +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_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_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_aux_dir = @abs_aux_dir@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +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@ +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@ +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@ +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_man1_MANS = cmp.1 diff.1 diff3.1 sdiff.1 +MAINTAINERCLEANFILES = $(dist_man1_MANS) +S = $(top_srcdir)/src +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 +.PRECIOUS: 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-man1: $(dist_man1_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list='$(dist_man1_MANS)'; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + } | 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='$(dist_man1_MANS)'; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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 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 + +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 distclean \ + distclean-generic 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 pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-man uninstall-man1 + +cmp.1: $S/cmp.c +diff.1: $S/diff.c +diff3.1: $S/diff3.c +sdiff.1: $S/sdiff.c + +# Depend on configure.ac to get version number changes. +$(dist_man1_MANS): $(top_srcdir)/configure.ac + $(AM_V_GEN)base=`expr $@ : '\(.*\).1'` && \ + (echo '[NAME]' && sed 's@/\* *@@; s/-/\\-/; q' $S/$$base.c) | \ + $(HELP2MAN) -i - -S '$(PACKAGE) $(VERSION)' ../src/$$base | \ + sed 's/^\.B info .*/.B info diff/' >$@ + +# 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/man/cmp.1 b/man/cmp.1 new file mode 100644 index 0000000..390fb32 --- /dev/null +++ b/man/cmp.1 @@ -0,0 +1,66 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. +.TH CMP "1" "April 2010" "diffutils 2.9.19-4065" "User Commands" +.SH NAME +cmp \- compare two files byte by byte +.SH SYNOPSIS +.B cmp +[\fIOPTION\fR]... \fIFILE1 \fR[\fIFILE2 \fR[\fISKIP1 \fR[\fISKIP2\fR]]] +.SH DESCRIPTION +Compare two files byte by byte. +.TP +\fB\-b\fR \fB\-\-print\-bytes\fR +Print differing bytes. +.TP +\fB\-i\fR SKIP \fB\-\-ignore\-initial\fR=\fISKIP\fR +Skip the first SKIP bytes of input. +.HP +\fB\-i\fR SKIP1:SKIP2 \fB\-\-ignore\-initial\fR=\fISKIP1\fR:SKIP2 +.IP +Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2. +.TP +\fB\-l\fR \fB\-\-verbose\fR +Output byte numbers and values of all differing bytes. +.TP +\fB\-n\fR LIMIT \fB\-\-bytes\fR=\fILIMIT\fR +Compare at most LIMIT bytes. +.TP +\fB\-s\fR \fB\-\-quiet\fR \fB\-\-silent\fR +Output nothing; yield exit status only. +.TP +\fB\-v\fR \fB\-\-version\fR +Output version info. +.TP +\fB\-\-help\fR +Output this help. +.PP +SKIP1 and SKIP2 are the number of bytes to skip in each file. +SKIP values may be followed by the following multiplicative suffixes: +kB 1000, K 1024, MB 1,000,000, M 1,048,576, +GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y. +.PP +If a FILE is `\-' or missing, read standard input. +Exit status is 0 if inputs are the same, 1 if different, 2 if trouble. +.SH AUTHOR +Written by Torbjorn Granlund and David MacKenzie. +.SH "REPORTING BUGS" +Report bugs to: bug\-diffutils@gnu.org +GNU diffutils home page: <http://www.gnu.org/software/diffutils/> +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010 Free Software Foundation, Inc. +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 cmp +is maintained as a Texinfo manual. If the +.B info +and +.B cmp +programs are properly installed at your site, the command +.IP +.B info diff +.PP +should give you access to the complete manual. diff --git a/man/diff.1 b/man/diff.1 new file mode 100644 index 0000000..718b891 --- /dev/null +++ b/man/diff.1 @@ -0,0 +1,233 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. +.TH DIFF "1" "April 2010" "diffutils 2.9.19-4065" "User Commands" +.SH NAME +diff \- compare files line by line +.SH SYNOPSIS +.B diff +[\fIOPTION\fR]... \fIFILES\fR +.SH DESCRIPTION +Compare files line by line. +.TP +\fB\-i\fR \fB\-\-ignore\-case\fR +Ignore case differences in file contents. +.TP +\fB\-\-ignore\-file\-name\-case\fR +Ignore case when comparing file names. +.TP +\fB\-\-no\-ignore\-file\-name\-case\fR +Consider case when comparing file names. +.TP +\fB\-E\fR \fB\-\-ignore\-tab\-expansion\fR +Ignore changes due to tab expansion. +.TP +\fB\-b\fR \fB\-\-ignore\-space\-change\fR +Ignore changes in the amount of white space. +.TP +\fB\-w\fR \fB\-\-ignore\-all\-space\fR +Ignore all white space. +.TP +\fB\-B\fR \fB\-\-ignore\-blank\-lines\fR +Ignore changes whose lines are all blank. +.TP +\fB\-I\fR RE \fB\-\-ignore\-matching\-lines\fR=\fIRE\fR +Ignore changes whose lines all match RE. +.TP +\fB\-\-strip\-trailing\-cr\fR +Strip trailing carriage return on input. +.TP +\fB\-a\fR \fB\-\-text\fR +Treat all files as text. +.TP +\fB\-c\fR \fB\-C\fR NUM \fB\-\-context\fR[=\fINUM\fR] +Output NUM (default 3) lines of copied context. +.TP +\fB\-u\fR \fB\-U\fR NUM \fB\-\-unified\fR[=\fINUM\fR] +Output NUM (default 3) lines of unified context. +.TP +\fB\-\-label\fR LABEL +Use LABEL instead of file name. +.TP +\fB\-p\fR \fB\-\-show\-c\-function\fR +Show which C function each change is in. +.TP +\fB\-F\fR RE \fB\-\-show\-function\-line\fR=\fIRE\fR +Show the most recent line matching RE. +.TP +\fB\-q\fR \fB\-\-brief\fR +Output only whether files differ. +.TP +\fB\-e\fR \fB\-\-ed\fR +Output an ed script. +.TP +\fB\-\-normal\fR +Output a normal diff. +.TP +\fB\-n\fR \fB\-\-rcs\fR +Output an RCS format diff. +.TP +\fB\-y\fR \fB\-\-side\-by\-side\fR +Output in two columns. +.TP +\fB\-W\fR NUM \fB\-\-width\fR=\fINUM\fR +Output at most NUM (default 130) print columns. +.TP +\fB\-\-left\-column\fR +Output only the left column of common lines. +.TP +\fB\-\-suppress\-common\-lines\fR +Do not output common lines. +.TP +\fB\-D\fR NAME \fB\-\-ifdef\fR=\fINAME\fR +Output merged file to show `#ifdef NAME' diffs. +.TP +\fB\-\-GTYPE\-group\-format\fR=\fIGFMT\fR +Similar, but format GTYPE input groups with GFMT. +.TP +\fB\-\-line\-format\fR=\fILFMT\fR +Similar, but format all input lines with LFMT. +.TP +\fB\-\-LTYPE\-line\-format\fR=\fILFMT\fR +Similar, but format LTYPE input lines with LFMT. +.TP +LTYPE is `old', `new', or `unchanged'. +GTYPE is LTYPE or `changed'. +.IP +GFMT may contain: +.TP +%< +lines from FILE1 +.TP +%> +lines from FILE2 +.TP +%= +lines common to FILE1 and FILE2 +.TP +%[\-][WIDTH][.[PREC]]{doxX}LETTER +printf\-style spec for LETTER +.IP +LETTERs are as follows for new group, lower case for old group: +.TP +F +first line number +.TP +L +last line number +.TP +N +number of lines = L\-F+1 +.TP +E +F\-1 +.TP +M +L+1 +.IP +LFMT may contain: +.TP +%L +contents of line +.TP +%l +contents of line, excluding any trailing newline +.TP +%[\-][WIDTH][.[PREC]]{doxX}n +printf\-style spec for input line number +.IP +Either GFMT or LFMT may contain: +.TP +%% +% +.TP +%c'C' +the single character C +.TP +%c'\eOOO' +the character with octal code OOO +.TP +\fB\-l\fR \fB\-\-paginate\fR +Pass the output through `pr' to paginate it. +.TP +\fB\-t\fR \fB\-\-expand\-tabs\fR +Expand tabs to spaces in output. +.TP +\fB\-T\fR \fB\-\-initial\-tab\fR +Make tabs line up by prepending a tab. +.TP +\fB\-\-tabsize\fR=\fINUM\fR +Tab stops are every NUM (default 8) print columns. +.TP +\fB\-\-suppress\-blank\-empty\fR +Suppress space or tab before empty output lines. +.TP +\fB\-r\fR \fB\-\-recursive\fR +Recursively compare any subdirectories found. +.TP +\fB\-N\fR \fB\-\-new\-file\fR +Treat absent files as empty. +.TP +\fB\-\-unidirectional\-new\-file\fR +Treat absent first files as empty. +.TP +\fB\-s\fR \fB\-\-report\-identical\-files\fR +Report when two files are the same. +.TP +\fB\-x\fR PAT \fB\-\-exclude\fR=\fIPAT\fR +Exclude files that match PAT. +.TP +\fB\-X\fR FILE \fB\-\-exclude\-from\fR=\fIFILE\fR +Exclude files that match any pattern in FILE. +.TP +\fB\-S\fR FILE \fB\-\-starting\-file\fR=\fIFILE\fR +Start with FILE when comparing directories. +.TP +\fB\-\-from\-file\fR=\fIFILE1\fR +Compare FILE1 to all operands. FILE1 can be a directory. +.TP +\fB\-\-to\-file\fR=\fIFILE2\fR +Compare all operands to FILE2. FILE2 can be a directory. +.TP +\fB\-\-horizon\-lines\fR=\fINUM\fR +Keep NUM lines of the common prefix and suffix. +.TP +\fB\-d\fR \fB\-\-minimal\fR +Try hard to find a smaller set of changes. +.TP +\fB\-\-speed\-large\-files\fR +Assume large files and many scattered small changes. +.TP +\fB\-v\fR \fB\-\-version\fR +Output version info. +.TP +\fB\-\-help\fR +Output this help. +.PP +FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'. +If \fB\-\-from\-file\fR or \fB\-\-to\-file\fR is given, there are no restrictions on FILES. +If a FILE is `\-', read standard input. +Exit status is 0 if inputs are the same, 1 if different, 2 if trouble. +.SH AUTHOR +Written by Paul Eggert, Mike Haertel, David Hayes, +Richard Stallman, and Len Tower. +.SH "REPORTING BUGS" +Report bugs to: bug\-diffutils@gnu.org +GNU diffutils home page: <http://www.gnu.org/software/diffutils/> +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010 Free Software Foundation, Inc. +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 diff +is maintained as a Texinfo manual. If the +.B info +and +.B diff +programs are properly installed at your site, the command +.IP +.B info diff +.PP +should give you access to the complete manual. diff --git a/man/diff3.1 b/man/diff3.1 new file mode 100644 index 0000000..270020f --- /dev/null +++ b/man/diff3.1 @@ -0,0 +1,81 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. +.TH DIFF3 "1" "April 2010" "diffutils 2.9.19-4065" "User Commands" +.SH NAME +diff3 \- compare three files line by line +.SH SYNOPSIS +.B diff3 +[\fIOPTION\fR]... \fIMYFILE OLDFILE YOURFILE\fR +.SH DESCRIPTION +Compare three files line by line. +.TP +\fB\-e\fR \fB\-\-ed\fR +Output unmerged changes from OLDFILE to YOURFILE into MYFILE. +.TP +\fB\-E\fR \fB\-\-show\-overlap\fR +Output unmerged changes, bracketing conflicts. +.TP +\fB\-A\fR \fB\-\-show\-all\fR +Output all changes, bracketing conflicts. +.TP +\fB\-x\fR \fB\-\-overlap\-only\fR +Output overlapping changes. +.TP +\fB\-X\fR +Output overlapping changes, bracketing them. +.TP +\fB\-3\fR \fB\-\-easy\-only\fR +Output unmerged nonoverlapping changes. +.TP +\fB\-m\fR \fB\-\-merge\fR +Output merged file instead of ed script (default \fB\-A\fR). +.TP +\fB\-L\fR LABEL \fB\-\-label\fR=\fILABEL\fR +Use LABEL instead of file name. +.TP +\fB\-i\fR +Append `w' and `q' commands to ed scripts. +.TP +\fB\-a\fR \fB\-\-text\fR +Treat all files as text. +.TP +\fB\-\-strip\-trailing\-cr\fR +Strip trailing carriage return on input. +.TP +\fB\-T\fR \fB\-\-initial\-tab\fR +Make tabs line up by prepending a tab. +.TP +\fB\-\-diff\-program\fR=\fIPROGRAM\fR +Use PROGRAM to compare files. +.TP +\fB\-v\fR \fB\-\-version\fR +Output version info. +.TP +\fB\-\-help\fR +Output this help. +.PP +If a FILE is `\-', read standard input. +Exit status is 0 if successful, 1 if conflicts, 2 if trouble. +.SH AUTHOR +Written by Randy Smith. +.SH "REPORTING BUGS" +Report bugs to: bug\-diffutils@gnu.org +GNU diffutils home page: <http://www.gnu.org/software/diffutils/> +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010 Free Software Foundation, Inc. +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 diff3 +is maintained as a Texinfo manual. If the +.B info +and +.B diff3 +programs are properly installed at your site, the command +.IP +.B info diff +.PP +should give you access to the complete manual. diff --git a/man/sdiff.1 b/man/sdiff.1 new file mode 100644 index 0000000..3af194f --- /dev/null +++ b/man/sdiff.1 @@ -0,0 +1,93 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. +.TH SDIFF "1" "April 2010" "diffutils 2.9.19-4065" "User Commands" +.SH NAME +sdiff \- side-by-side merge of file differences +.SH SYNOPSIS +.B sdiff +[\fIOPTION\fR]... \fIFILE1 FILE2\fR +.SH DESCRIPTION +Side\-by\-side merge of file differences. +.TP +\fB\-o\fR FILE \fB\-\-output\fR=\fIFILE\fR +Operate interactively, sending output to FILE. +.TP +\fB\-i\fR \fB\-\-ignore\-case\fR +Consider upper\- and lower\-case to be the same. +.TP +\fB\-E\fR \fB\-\-ignore\-tab\-expansion\fR +Ignore changes due to tab expansion. +.TP +\fB\-b\fR \fB\-\-ignore\-space\-change\fR +Ignore changes in the amount of white space. +.TP +\fB\-W\fR \fB\-\-ignore\-all\-space\fR +Ignore all white space. +.TP +\fB\-B\fR \fB\-\-ignore\-blank\-lines\fR +Ignore changes whose lines are all blank. +.TP +\fB\-I\fR RE \fB\-\-ignore\-matching\-lines\fR=\fIRE\fR +Ignore changes whose lines all match RE. +.TP +\fB\-\-strip\-trailing\-cr\fR +Strip trailing carriage return on input. +.TP +\fB\-a\fR \fB\-\-text\fR +Treat all files as text. +.TP +\fB\-w\fR NUM \fB\-\-width\fR=\fINUM\fR +Output at most NUM (default 130) print columns. +.TP +\fB\-l\fR \fB\-\-left\-column\fR +Output only the left column of common lines. +.TP +\fB\-s\fR \fB\-\-suppress\-common\-lines\fR +Do not output common lines. +.TP +\fB\-t\fR \fB\-\-expand\-tabs\fR +Expand tabs to spaces in output. +.TP +\fB\-\-tabsize\fR=\fINUM\fR +Tab stops are every NUM (default 8) print columns. +.TP +\fB\-d\fR \fB\-\-minimal\fR +Try hard to find a smaller set of changes. +.TP +\fB\-H\fR \fB\-\-speed\-large\-files\fR +Assume large files and many scattered small changes. +.TP +\fB\-\-diff\-program\fR=\fIPROGRAM\fR +Use PROGRAM to compare files. +.TP +\fB\-v\fR \fB\-\-version\fR +Output version info. +.TP +\fB\-\-help\fR +Output this help. +.PP +If a FILE is `\-', read standard input. +Exit status is 0 if inputs are the same, 1 if different, 2 if trouble. +.SH AUTHOR +Written by Thomas Lord. +.SH "REPORTING BUGS" +Report bugs to: bug\-diffutils@gnu.org +GNU diffutils home page: <http://www.gnu.org/software/diffutils/> +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010 Free Software Foundation, Inc. +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 sdiff +is maintained as a Texinfo manual. If the +.B info +and +.B sdiff +programs are properly installed at your site, the command +.IP +.B info diff +.PP +should give you access to the complete manual. diff --git a/ms/Makefile.am b/ms/Makefile.am new file mode 100644 index 0000000..1929215 --- /dev/null +++ b/ms/Makefile.am @@ -0,0 +1,18 @@ +# Makefile for GNU diffutils sources used on Microsoft operating systems. + +# Copyright (C) 2001-2002, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +EXTRA_DIST = config.bat config.sed config.site diff --git a/ms/Makefile.in b/ms/Makefile.in new file mode 100644 index 0000000..45be1e3 --- /dev/null +++ b/ms/Makefile.in @@ -0,0 +1,993 @@ +# Makefile.in generated by automake 1.11a from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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 GNU diffutils sources used on Microsoft operating systems. + +# Copyright (C) 2001-2002, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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@ +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 = ms +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/c-stack.m4 \ + $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.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/exclude.m4 \ + $(top_srcdir)/m4/extensions.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/file-type.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/freopen.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21_gl.m4 $(top_srcdir)/m4/gnu-make.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \ + $(top_srcdir)/m4/iconv_open.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lib-ld_gl.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix_gl.m4 \ + $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-tr.m4 \ + $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/longlong_gl.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/manywarnings.m4 \ + $(top_srcdir)/m4/mbchar.m4 $(top_srcdir)/m4/mbiter.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbslen.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/memchr.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/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/onceonly.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po_gl.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/putenv.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.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/stdio-safer.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/strftime.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strptime.m4 \ + $(top_srcdir)/m4/strtoimax.m4 $(top_srcdir)/m4/strtol.m4 \ + $(top_srcdir)/m4/strtoll.m4 $(top_srcdir)/m4/strtoul.m4 \ + $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/strtoumax.m4 \ + $(top_srcdir)/m4/symlink.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/time_h.m4 \ + $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/vararrays.m4 \ + $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.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/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \ + $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xstrtol.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +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@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +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@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +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@ +FNMATCH_H = @FNMATCH_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +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_FFLUSH = @GNULIB_FFLUSH@ +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_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +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_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_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +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_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_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STAT = @GNULIB_STAT@ +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_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_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ +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_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WARN_CFLAGS = @GNULIB_WARN_CFLAGS@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +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_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +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_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_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +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_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +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_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LIBSIGSEGV = @HAVE_LIBSIGSEGV@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOCALTIME_R = @HAVE_LOCALTIME_R@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +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_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +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_SLEEP = @HAVE_SLEEP@ +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_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_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_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_TIMEGM = @HAVE_TIMEGM@ +HAVE_TTYNAME_R = @HAVE_TTYNAME_R@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +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_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HELP2MAN = @HELP2MAN@ +ICONV_H = @ICONV_H@ +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@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBDIFFUTILS_LIBDEPS = @LIBDIFFUTILS_LIBDEPS@ +LIBDIFFUTILS_LTLIBDEPS = @LIBDIFFUTILS_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSIGSEGV = @LIBSIGSEGV@ +LIBSIGSEGV_PREFIX = @LIBSIGSEGV_PREFIX@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +MAKEINFO = @MAKEINFO@ +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_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_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_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_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_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_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_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_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_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_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@ +OBJEXT = @OBJEXT@ +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@ +POSUB = @POSUB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PR_PROGRAM = @PR_PROGRAM@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +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_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +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_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_NANOSLEEP = @REPLACE_NANOSLEEP@ +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_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +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_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +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_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +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_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_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_aux_dir = @abs_aux_dir@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +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@ +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@ +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@ +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@ +EXTRA_DIST = config.bat config.sed config.site +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 ms/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu ms/Makefile +.PRECIOUS: 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): +tags: TAGS +TAGS: + +ctags: 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 +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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 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 + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic 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 pdf pdf-am ps ps-am uninstall uninstall-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/ms/README b/ms/README new file mode 100644 index 0000000..e30846b --- /dev/null +++ b/ms/README @@ -0,0 +1,64 @@ +This directory contains files required to build GNU Diffutils on +MS_DOS and MS-Windows using the DJGPP tools. + +To build Diffutils, you will need the following packages: + + . the basic DJGPP development kit: GCC, Binutils, and djdevNNN.zip + . a DJGPP port of Bash (bsh204b.zip) + . GNU Fileutils (fil40b.zip) + . GNU Textutils (txt20b.zip) + . GNU Sh-utils (shl112b.zip) + . GNU Grep (grep24b.zip) + . GNU Awk (gwk306b.zip) + . GNU Sed (sed302b.zip) + . GNU Make (mak3791b.zip) + +The package names in parentheses indicate the oldest version which +should work; newer versions are okay. All those packages can be found +on the usual DJGPP sites, in the v2gnu directory. Please see +<http://www.delorie.com/djgpp/getting.html> for a list of DJGPP sites. + +The source distribution of Diffutils you find on DJGPP sites comes +preconfigured for the latest officially released version of the DJGPP +library, and without NLS support. If that is what you have installed, +and if you don't need NLS support in Diffutils, you don't need to run +the configure script; proceed directly to the "make" step below. + +If you are building the official GNU distribution, or your library is +not the latest official release, or if you modified your headers or +installed optional libraries, or if you want to have NLS support in +Diffutils, you will have to reconfigure the package. To this end, +after unpacking the sources, chdir to the top-level directory created +by unpacking, and type this command: + + ms\config [nls] + +The "nls" option, if given, will configure the package for NLS +support. + +This will run for a while and create the Makefile's and the config.h +header file. + +Next type "make"; this will build the programs. + +To install the package, type "make install". + +That's it! + +----- +Copyright (C) 2001, 2009-2010 Free Software Foundation, Inc. + +This file is part of GNU DIFF. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General 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/>. diff --git a/ms/config.bat b/ms/config.bat new file mode 100644 index 0000000..7f057a0 --- /dev/null +++ b/ms/config.bat @@ -0,0 +1,259 @@ +@echo off + +echo Configuring GNU Diffutils for DJGPP v2.x... + +Rem Copyright (C) 2001, 2009-2010 Free Software Foundation, Inc. + +Rem This program is free software: you can redistribute it and/or modify +Rem it under the terms of the GNU General Public License as published by +Rem the Free Software Foundation, either version 3 of the License, or +Rem (at your option) any later version. + +Rem This program is distributed in the hope that it will be useful, +Rem but WITHOUT ANY WARRANTY; without even the implied warranty of +Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +Rem GNU General Public License for more details. + +Rem You should have received a copy of the GNU General Public License +Rem along with this program. If not, see <http://www.gnu.org/licenses/>. + +Rem Written by Eli Zaretskii. + + +Rem The small_env tests protect against fixed and too small size +Rem of the environment in stock DOS shell. + +Rem Find out if NLS is wanted or not, +Rem if dependency-tracking is wanted or not, +Rem if cache is wanted or not +Rem and where the sources are. +set ARGS= +set NLS=disabled +if not "%NLS%" == "disabled" goto small_env +set CACHE=enabled +if not "%CACHE%" == "enabled" goto small_env +set DEPENDENCY_TRACKING=disabled +if not "%DEPENDENCY_TRACKING%" == "disabled" goto small_env +set XSRC=. +if not "%XSRC%" == "." goto small_env + +Rem Loop over all arguments. +Rem Special arguments are: NLS, XSRC CACHE and DEPS. +Rem All other arguments are stored into ARGS. +:arg_loop +set SPECIAL_ARG_SEEN=0 +if not "%SPECIAL_ARG_SEEN%" == "0" goto small_env +if "%1" == "NLS" goto nls_on +if not "%1" == "nls" goto CacheOpt +:nls_on +if "%1" == "nls" set NLS=enabled +if "%1" == "NLS" set NLS=enabled +if not "%NLS%" == "enabled" goto small_env +set SPECIAL_ARG_SEEN=1 +if not "%SPECIAL_ARG_SEEN%" == "1" goto small_env +shift +:CacheOpt +set SPECIAL_ARG_SEEN=0 +if not "%SPECIAL_ARG_SEEN%" == "0" goto small_env +if "%1" == "no-cache" goto cache_off +if "%1" == "no-CACHE" goto cache_off +if not "%1" == "NO-CACHE" goto dependency_opt +:cache_off +if "%1" == "no-cache" set CACHE=disabled +if "%1" == "no-CACHE" set CACHE=disabled +if "%1" == "NO-CACHE" set CACHE=disabled +if not "%CACHE%" == "disabled" goto small_env +set SPECIAL_ARG_SEEN=1 +if not "%SPECIAL_ARG_SEEN%" == "1" goto small_env +shift +:dependency_opt +set SPECIAL_ARG_SEEN=0 +if not "%SPECIAL_ARG_SEEN%" == "0" goto small_env +if "%1" == "dep" goto dep_off +if not "%1" == "DEP" goto src_dir_opt +:dep_off +if "%1" == "dep" set DEPENDENCY_TRACKING=enabled +if "%1" == "DEP" set DEPENDENCY_TRACKING=enabled +if not "%DEPENDENCY_TRACKING%" == "enabled" goto small_env +set SPECIAL_ARG_SEEN=1 +if not "%SPECIAL_ARG_SEEN%" == "1" goto small_env +shift +:src_dir_opt +set SPECIAL_ARG_SEEN=0 +if not "%SPECIAL_ARG_SEEN%" == "0" goto small_env +echo %1 | grep -q "/" +if errorlevel 1 goto collect_arg +set XSRC=%1 +if not "%XSRC%" == "%1" goto small_env +set SPECIAL_ARG_SEEN=1 +if not "%SPECIAL_ARG_SEEN%" == "1" goto small_env +:collect_arg +if "%SPECIAL_ARG_SEEN%" == "0" set _ARGS=%ARGS% %1 +if "%SPECIAL_ARG_SEEN%" == "0" if not "%_ARGS%" == "%ARGS% %1" goto small_env +echo %_ARGS% | grep -q "[^ ]" +if not errorlevel 0 set ARGS=%_ARGS% +set _ARGS= +shift +if not "%1" == "" goto arg_loop +set SPECIAL_ARG_SEEN= + +Rem Create a response file for the configure script. +echo --srcdir=%XSRC% > arguments +if "%CACHE%" == "enabled" echo --config-cache >> arguments +if "%DEPENDENCY_TRACKING%" == "enabled" echo --enable-dependency-tracking >> arguments +if "%DEPENDENCY_TRACKING%" == "disabled" echo --disable-dependency-tracking >> arguments +if not "%ARGS%" == "" echo %ARGS% >> arguments +set ARGS= +set CACHE= +set DEPENDENCY_TRACKING= + +if "%XSRC%" == "." goto in_place + +:not_in_place +redir -e /dev/null update %XSRC%/configure.orig ./configure +test -f ./configure +if errorlevel 1 update %XSRC%/configure ./configure + +:in_place +Rem Update configuration files +echo Updating configuration scripts... +test -f ./configure.orig +if errorlevel 1 update configure configure.orig +sed -f %XSRC%/ms/config.sed configure.orig > configure +if errorlevel 1 goto sed_error + +Rem Make sure they have a config.site file +set CONFIG_SITE=%XSRC%/ms/config.site +if not "%CONFIG_SITE%" == "%XSRC%/ms/config.site" goto small_env + +Rem Make sure crucial file names are not munged by unpacking +test -f %XSRC%/po/Makefile.in.in +if not errorlevel 1 mv -f %XSRC%/po/Makefile.in.in %XSRC%/po/Makefile.in-in +test -f %XSRC%/m4/Makefile.am.in +if not errorlevel 1 mv -f %XSRC%/m4/Makefile.am.in %XSRC%/m4/Makefile.am-in + +Rem This is required because DOS/Windows are case-insensitive +Rem to file names, and "make install" will do nothing if Make +Rem finds a file called `install'. +if exist INSTALL ren INSTALL INSTALL.txt + +Rem Set HOME to a sane default so configure stops complaining. +if not "%HOME%" == "" goto HostName +set HOME=%XSRC%/ms +if not "%HOME%" == "%XSRC%/ms" goto small_env +echo No HOME found in the environment, using default value + +:HostName +Rem Set HOSTNAME so it shows in config.status +if not "%HOSTNAME%" == "" goto hostdone +if "%windir%" == "" goto msdos +set OS=MS-Windows +if not "%OS%" == "MS-Windows" goto small_env +goto haveos +:msdos +set OS=MS-DOS +if not "%OS%" == "MS-DOS" goto small_env +:haveos +if not "%USERNAME%" == "" goto haveuname +if not "%USER%" == "" goto haveuser +echo No USERNAME and no USER found in the environment, using default values +set HOSTNAME=Unknown PC +if not "%HOSTNAME%" == "Unknown PC" goto small_env +goto userdone +:haveuser +set HOSTNAME=%USER%'s PC +if not "%HOSTNAME%" == "%USER%'s PC" goto small_env +goto userdone +:haveuname +set HOSTNAME=%USERNAME%'s PC +if not "%HOSTNAME%" == "%USERNAME%'s PC" goto small_env +:userdone +set _HOSTNAME=%HOSTNAME%, %OS% +if not "%_HOSTNAME%" == "%HOSTNAME%, %OS%" goto small_env +set HOSTNAME=%_HOSTNAME% +:hostdone +set _HOSTNAME= +set OS= + +Rem install-sh is required by the configure script but clashes with the +Rem various Makefile install-foo targets, so we MUST have it before the +Rem script runs and rename it afterwards +test -f %XSRC%/install-sh +if not errorlevel 1 goto no_ren0 +test -f %XSRC%/install-sh.sh +if not errorlevel 1 mv -f %XSRC%/install-sh.sh %XSRC%/install-sh +:no_ren0 + +if "%NLS%" == "disabled" goto without_NLS + +:with_NLS +Rem Check for the needed libraries and binaries. +test -x /dev/env/DJDIR/bin/msgfmt.exe +if not errorlevel 0 goto missing_NLS_tools +test -x /dev/env/DJDIR/bin/xgettext.exe +if not errorlevel 0 goto missing_NLS_tools +test -f /dev/env/DJDIR/include/libcharset.h +if not errorlevel 0 goto missing_NLS_tools +test -f /dev/env/DJDIR/lib/libcharset.a +if not errorlevel 0 goto missing_NLS_tools +test -f /dev/env/DJDIR/include/iconv.h +if not errorlevel 0 goto missing_NLS_tools +test -f /dev/env/DJDIR/lib/libiconv.a +if not errorlevel 0 goto missing_NLS_tools +test -f /dev/env/DJDIR/include/libintl.h +if not errorlevel 0 goto missing_NLS_tools +test -f /dev/env/DJDIR/lib/libintl.a +if not errorlevel 0 goto missing_NLS_tools + +Rem Recreate the files in the %XSRC%/po subdir with our ported tools. +redir -e /dev/null rm %XSRC%/po/*.gmo +redir -e /dev/null rm %XSRC%/po/diffutil*.pot +redir -e /dev/null rm %XSRC%/po/cat-id-tbl.c +redir -e /dev/null rm %XSRC%/po/stamp-cat-id + +Rem Update the arguments file for the configure script. +Rem We prefer without-included-gettext because libintl.a from gettext package +Rem is the only one that is guaranteed to have been ported to DJGPP. +echo --enable-nls --without-included-gettext >> arguments +goto configure_package + +:missing_NLS_tools +echo Needed libs/tools for NLS not found. Configuring without NLS. +:without_NLS +Rem Update the arguments file for the configure script. +echo --disable-nls >> arguments + +:configure_package +echo Running the ./configure script... +sh ./configure @arguments +if errorlevel 1 goto cfg_error +rm arguments +echo Done. +goto End + +:sed_error +echo ./configure script editing failed! +goto End + +:cfg_error +echo ./configure script exited abnormally! +goto End + +:small_env +echo Your environment size is too small. Enlarge it and run me again. +echo Configuration NOT done! + +:End +test -f %XSRC%/install-sh.sh +if not errorlevel 1 goto no_ren1 +test -f %XSRC%/install-sh +if not errorlevel 1 mv -f %XSRC%/install-sh %XSRC%/install-sh.sh +:no_ren1 +if "%HOME%" == "%XSRC%/ms" set HOME= +set ARGS= +set CONFIG_SITE= +set HOSTNAME= +set NLS= +set CACHE= +set DEPENDENCY_TRACKING= +set XSRC= diff --git a/ms/config.sed b/ms/config.sed new file mode 100644 index 0000000..e017691 --- /dev/null +++ b/ms/config.sed @@ -0,0 +1,85 @@ +# Additional editing of Makefiles and of config.status + +# Copyright (C) 2001-2002, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +# Written by Eli Zaretskii. + + +/(echo[ ]*':t/ a\ +# DJGPP specific Makefile changes.\ + /^aliaspath * *=/s,:,";",g;t t\ + /TEXINPUTS=/s,:,";",g;t t\ + /PATH=/s,:,";",g;t t\ + s,\\.deps,_deps,g;t t\ + s,\\.new\\.,_new.,g;t t\ + s,\\.old\\.,_old.,g;t t\ + s,\\.tab\\.,_tab.,g;t t\ + s,Makefile\\.in\\.in,Makefile.in-in,g;t t\ + s,Makefile\\.am\\.in,Makefile.am-in,g;t t\ + /^install-info-am:/,/^$/ {\ + /@list=.\\\$(INFO_DEPS)\[^ \]/s,DEPS),& diff.i,\ + s,\\(\\\$\\\$d/\\\$\\\$file-\\[0-9\\]\\[0-9\\]\\)\\(\[^ \]\\),\\1 \\$\\$d/\\$\\$file[0-9] \\$\\$d/\\$\\$file[0-9][0-9]\\2,\ + s,\\( \\\$\\\$file-\\[0-9\\]\\[0-9\\]\\)\\(\[^ \]\\),\\1 \\$\\$file[0-9] \\$\\$file[0-9][0-9]\\2,\ + }\ + /^uninstall-info-am:/,/^$/ {\ + /@list=.\\\$(INFO_DEPS)\[^ \]/s,DEPS),& diff.i,\ + s,\\(file-\\[0-9\\]\\[0-9\\]\\)\\(\[^ \]\\),\\1 \\$\\$file[0-9] \\$\\$file[0-9][0-9]\\2,\ + } + +# Makefile.in.in is renamed to Makefile.in-in. +/^ac_config_files=/,/_ACEOF/ { + s|po/Makefile\.in|&:po/Makefile.in-in| +} +/CONFIG_FILES=/ s|po/Makefile\.in|&:po/Makefile.in-in|2 + +# We always use _deps instead of .deps, because the latter is an +# invalid name on 8+3 MS-DOS file system. This makes the generated +# Makefiles good for every DJGPP installation, not only the one +# where the package was configured (which could happen to be a +# Windows box, where leading dots in file names are allowed). +s,\.deps,_deps,g + +# The following two items are changes needed for configuring +# and compiling across partitions. +# The given srcdir value is always translated from the +# "x:" syntax into "/dev/x" syntax while we run configure. +/^[ ]*-srcdir=\*.*$/ a\ + ac_optarg=`echo "$ac_optarg" | sed "s,^\\([A-Za-z]\\):,/dev/\\1,"` +/set X `ls -Lt \$srcdir/ i\ + if `echo $srcdir | grep "^/dev/" - > /dev/null`; then\ + srcdir=`echo "$srcdir" | sed -e "s%^/dev/%%" -e "s%/%:/%"`\ + fi + +# Autoconf 2.52e generated configure scripts write absolute paths into +# Makefiles, making them useless for DJGPP installations other than the +# one for which the package has been configured. +/MISSING=/,/^$/ { + /^fi$/ a\ +am_missing_run=`echo "$am_missing_run" | sed 's%/dev.*/diffutil.*[-.]2.*[7-9].*[0-9]%${top_srcdir}%'` +} +/^install_sh=/a\ +install_sh=`echo "$install_sh" | sed 's%/dev.*/diffutil.*[-.]2.*[7-9].*[0-9]%${top_srcdir}%'` + + +# The following makes sure we are not going to remove a directory +# which is the cwd on its drive (DOS doesn't allow to remove such +# a directory). The trick is to chdir to the root directory on +# temp directory's drive. +/^ *trap 'exit_status=\$\?; rm -rf/s%rm -rf%cd $tmp; cd /; &% + +# AC_CONFIG_LINKS fails if the source and destination are on +# different file systems and symlinks don't work. +/^ ln \$srcdir/s%||%|| cp -pf $srcdir/$ac_source $ac_dest ||% diff --git a/ms/config.site b/ms/config.site new file mode 100644 index 0000000..c89b062 --- /dev/null +++ b/ms/config.site @@ -0,0 +1,79 @@ +#! /bin/sh +# Site defaults for the DJGPP configuration + +# Copyright (C) 2001, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +# Written by Eli Zaretskii. + + +# These two variables are required, otherwise looking for +# programs along the PATH will not work. +PATH_SEPARATOR=: +PATH_EXPAND=y + +# This is required in for "test -f foo" to find foo.exe. +export TEST_FINDS_EXE=y + +# The root of the DJGPP tree serves as the default prefix +# for all paths that are hardcoded in the binaries. +# When installing the installation prefix must be supplied. +test "x$prefix" = xNONE && prefix='/dev/env/DJDIR' + +# This is required for config.status script to be run, since +# ./configure runs it by invoking ${CONFIG_SHELL-/bin/sh} +# CONFIG_SHELL=${CONFIG_SHELL='sh'} + +# These are set here so the generated Makefile's will be good +# for every DJGPP installation, not only the one where the +# package was configured. +# $INSTALL must be an absolute path name, otherwise config.status +# will try to prepend ./ and ../ to it when it goes into subdirs. +INSTALL=${INSTALL='/dev/env/DJDIR/bin/ginstall -c'} +RANLIB=${RANLIB='ranlib'} +GMSGFMT=${GMSGFMT='/dev/env/DJDIR/bin/msgfmt'} +MSGFMT=${MSGFMT='/dev/env/DJDIR/bin/msgfmt'} +XGETTEXT=${XGETTEXT='/dev/env/DJDIR/bin/xgettext'} + +# Sane defaults for standard programs compiled into the package that +# we are about to build. Use .exe extension so that library functions +# invoking these programs will provide a better diagnostics when a +# program is not found: the library won't need to call the stock DOS +# shell, which always returns a zero status, even if it doesn't find +# the program. +ac_cv_path_PR_PROGRAM=${PR_PROGRAM='/dev/env/DJDIR/bin/pr.exe'} + +# Sane defaults for standard programs used by the build process. +# We force the values of these variables so that the resultant +# Makefile's will work on any DJGPP platform, not only on the +# machine where the package was configured. +ac_cv_prog_AWK=${AWK='gawk'} +ac_cv_prog_INTLBISON=${INTLBISON='bison'} +ac_cv_prog_CC=${CC='gcc'} + +# These are set here so the generated libtool/Makefile's will +# be good for every DJGPP installation, not only the one where +# the package was configured. +NM=${NM='nm'} +LD=${LD='ld'} +MAKEINFO=${MAKEINFO='makeinfo'} + +# Force the test for 'ln -s' to report 'cp -pf'. +ac_cv_prog_LN_S='cp -pf' + +# We have `fork', but it always fails. Don't trust Autoconf to be +# smart enough to detect that... +ac_cv_func_fork=no +ac_cv_func_vfork=no diff --git a/packaging/diffutils-cmp-s-empty.patch b/packaging/diffutils-cmp-s-empty.patch new file mode 100644 index 0000000..87925b7 --- /dev/null +++ b/packaging/diffutils-cmp-s-empty.patch @@ -0,0 +1,19 @@ +--- diffutils/src/cmp.c.orig 2012-06-05 17:06:34.104942215 +0800 ++++ diffutils/src/cmp.c 2012-06-05 17:07:08.801945433 +0800 +@@ -324,12 +324,15 @@ + + /* If only a return code is needed, + and if both input descriptors are associated with plain files, ++ and if both files are larger than 0 bytes (procfs files are always 0), + conclude that the files differ if they have different sizes + and if more bytes will be compared than are in the smaller file. */ + + if (comparison_type == type_status + && S_ISREG (stat_buf[0].st_mode) +- && S_ISREG (stat_buf[1].st_mode)) ++ && S_ISREG (stat_buf[1].st_mode) ++ && stat_buf[0].st_size > 0 ++ && stat_buf[1].st_size > 0) + { + off_t s0 = stat_buf[0].st_size - file_position (0); + off_t s1 = stat_buf[1].st_size - file_position (1); diff --git a/packaging/diffutils.changes b/packaging/diffutils.changes new file mode 100644 index 0000000..1c8738b --- /dev/null +++ b/packaging/diffutils.changes @@ -0,0 +1,2 @@ +* Fri Jul 29 2011 Junfeng Dong <junfeng.dong@intel.com> - 3.0 +- Import 3.0 for SLP. diff --git a/packaging/diffutils.manifest b/packaging/diffutils.manifest new file mode 100644 index 0000000..75b0fa5 --- /dev/null +++ b/packaging/diffutils.manifest @@ -0,0 +1,5 @@ +<manifest> + <request> + <domain name="_"/> + </request> +</manifest> diff --git a/packaging/diffutils.spec b/packaging/diffutils.spec new file mode 100755 index 0000000..67ed0c9 --- /dev/null +++ b/packaging/diffutils.spec @@ -0,0 +1,59 @@ +Name: diffutils +Version: 3.0 +Release: 3 +License: GPLv2+ +Summary: A GNU collection of diff utilities +Url: http://www.gnu.org/software/diffutils/diffutils.html +Group: Applications/Text +Source: ftp://ftp.gnu.org/gnu/diffutils/diffutils-%{version}.tar.xz +Source1001: %{name}.manifest +Patch0: diffutils-cmp-s-empty.patch + +%description +Diffutils includes four utilities: diff, cmp, diff3 and sdiff. Diff +compares two files and shows the differences, line by line. The cmp +command shows the offset and line numbers where two files differ, or +cmp can show the characters that differ between the two files. The +diff3 command shows the differences between three files. Diff3 can be +used when two people have made independent changes to a common +original; diff3 can produce a merged file that contains both sets of +changes and warnings about conflicts. The sdiff command can be used +to merge two files interactively. + +Install diffutils if you need to compare text files. + +%prep +%setup -q +%patch0 -p1 + +%build +cp %{SOURCE1001} . +%configure --disable-nls +make PR_PROGRAM=%{_bindir}/pr + +%install +%make_install + +mkdir -p $RPM_BUILD_ROOT%{_datadir}/license +for keyword in LICENSE COPYING COPYRIGHT; +do + for file in `find %{_builddir} -name $keyword`; + do + cat $file >> $RPM_BUILD_ROOT%{_datadir}/license/%{name}; + echo ""; + done; +done + +%clean +rm -rf %{buildroot} + +%docs_package + +%files +%defattr(-,root,root,-) +%manifest %{name}.manifest +%doc NEWS README COPYING +%{_datadir}/license/%{name} +%{_bindir}/* +%{_mandir}/*/* +%{_infodir}/diff.info*gz diff --git a/po/LINGUAS b/po/LINGUAS new file mode 100644 index 0000000..e6132b5 --- /dev/null +++ b/po/LINGUAS @@ -0,0 +1,30 @@ +ca +cs +da +de +el +eo +es +fi +fr +ga +gl +he +hu +id +it +ja +lv +ms +nl +pl +pt_BR +ro +ru +sr +sv +tr +uk +vi +zh_CN +zh_TW diff --git a/po/Makefile.in.in b/po/Makefile.in.in new file mode 100644 index 0000000..be0ca59 --- /dev/null +++ b/po/Makefile.in.in @@ -0,0 +1,431 @@ +# -*- buffer-read-only: t -*- vi: set ro: +# DO NOT EDIT! GENERATED AUTOMATICALLY! +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2007 by Ulrich Drepper <drepper@gnu.ai.mit.edu> +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License but which still want to provide support for the GNU gettext +# functionality. +# Please note that the actual code of GNU gettext is covered by the GNU +# General Public License and is *not* in the public domain. +# +# Origin: gettext-0.17 +GETTEXT_MACRO_VERSION = 0.17 + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ + +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@ + +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@ + +# 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 -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: check-macro-version 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 + 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. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \ + package_gnu='GNU '; \ + else \ + package_gnu=''; \ + 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_gnu}@PACKAGE@" \ + --package-version='@VERSION@' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + esac + test ! -f $(DOMAIN).po || { \ + 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): $(srcdir)/$(DOMAIN).pot + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ + 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 + $(mkdir_p) $(DESTDIR)$(datadir) + @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: + $(mkdir_p) $(DESTDIR)$(datadir) + @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: + $(MAKE) update-po + @$(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"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$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 "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) + @: + +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/po/Makevars b/po/Makevars new file mode 100644 index 0000000..3a6203f --- /dev/null +++ b/po/Makevars @@ -0,0 +1,54 @@ +# -*- buffer-read-only: t -*- vi: set ro: +# DO NOT EDIT! GENERATED AUTOMATICALLY! +# 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=message:1:c-format --flag=message5:1:c-format\ + --flag=try_help:1: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 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-diffutils@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 = diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..6ffcf61 --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,35 @@ +# List of files that contain translatable strings. + +# Copyright (C) 2001-2002, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/c-stack.c +lib/error.c +lib/file-type.c +lib/getopt.c +lib/quotearg.c +lib/regcomp.c +lib/xalloc-die.c +lib/xfreopen.c +lib/xstrtol-error.c +lib/version-etc.c + +src/analyze.c +src/cmp.c +src/diff.c +src/diff3.c +src/dir.c +src/sdiff.c +src/util.c diff --git a/po/Rules-quot b/po/Rules-quot new file mode 100644 index 0000000..9c2a995 --- /dev/null +++ b/po/Rules-quot @@ -0,0 +1,47 @@ +# 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"; 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) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 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/po/boldquot.sed b/po/boldquot.sed new file mode 100644 index 0000000..4b937aa --- /dev/null +++ b/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/po/ca.gmo b/po/ca.gmo new file mode 100644 index 0000000000000000000000000000000000000000..c1c4192e8651c90a96e0bca17631f95cf4bc8608 GIT binary patch literal 22706 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 a-t-w0{{xnlXK)e~L__|efm<S0^#1^wHbF4} literal 0 HcmV?d00001 diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..a276a69 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,1242 @@ +# Catalan messages for diffutils. +# Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils package. +# Ernest Adrogué Calveras <eadrogue@gmx.net>, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2004-04-21 13:33+0200\n" +"Last-Translator: Ernest Adrogué Calveras <eadrogue@gmx.net>\n" +"Language-Team: Catalan <ca@dodds.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "error del programa" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "desbordament de pila" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Error no identificat del sistema" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "fitxer ordinari buit" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "fitxer ordinari" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "directori" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "fitxer especial de blocs" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "fitxer especial de caràcters" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "cua FIFO" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "enllaç simbòlic" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "connector" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "cua de missatges" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semàfor" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "objecte de memòria compartida" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "objecte de memòria tipificada" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "fitxer estrambòtic" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: l'opció «%s» és ambigua\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: l'opció «--%s» no admet arguments\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: l'opció «%c%s» no admet arguments\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: l'opció «%s» requereix arguments\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opció no reconeguda «--%s»\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opció no reconeguda «%c%s»\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opció no vàlida -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: l'opció requereix arguments -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: l'opció «-W %s» és ambigua\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: l'opció «-W %s» no admet arguments\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: l'opció «%s» requereix arguments\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Succés" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Cap resultat" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "L'expressió regular no és vàlida" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "El caràcter de col·lació no és vàlid" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "El nom de la classe de caràcter no és vàlid" + +# al final o al principi? eac +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Hi ha una barra invertida al final" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Hi ha una referència cap enrera no vàlida" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Hi ha un signe [ o ^[ desaparellat" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Hi ha un signe ( o \\( desaparellat" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Hi ha un signe \\{ desaparellat" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "El contingut de \\{\\} no és vàlid" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "El límit superior de l'interval no vàlid" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Memòria exhaurida" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "L'expressió regular precedent no és vàlida" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Final prematur de l'expressió regular" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "L'expressió regular és massa gran" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Hi ha un signe ) o \\) desaparellat" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "No hi ha cap expressió regular prèvia" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "memòria exhaurida" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Error no identificat del sistema" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "el valor «%s» per l'opció --bytes no és vàlid" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "el nombre de línies d'horitzó «%s» no és vàlid" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Escrit per %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Escrit per %s i %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Escrit per %s, %s i %s.\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 "" +"Escrit per %s, %s, %s,\n" +"i %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Escrit per %s, %s, %s,\n" +"%s, i %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Escrit per %s, %s, %s,\n" +"%s, %s, i %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Escrit per %s, %s, %s,\n" +"%s, %s, %s, i %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Escrit per %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"i %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Escrit per %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, i %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Excrit per %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, i altres.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Els fitxers %s i %s difereixen\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Els fitxers %s i %s difereixen\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "No hi ha cap caràcter de salt de línia al final del fitxer" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Proveu «%s --help» per obtenir més informació." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "el valor «%s» per l'opció --ignore-initial no és vàlid" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "les opcions -l i -s són incompatibles" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "error d'escriptura" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "sortida estàndard" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Mostra els octets que difereixen." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i SALT --ignore-initial=SALT Ignora els primers SALT octets." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SALT1:SALT2 --ignore-initial=SALT1:SALT2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Ignora els primers SALT1 octets de FITXER1 i els primers SALT2 de FITXER2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose Mostra la posició i valor dels octets que difereixen." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LÍMIT --bytes=LÍMIT Compara com a màxim LÍMIT octets." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent No mostra res; torna l'estat de sortida i prou." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Mostra la versió del programa." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Mostra aquesta ajuda." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Mode d'ús: %s [OPCIÓ]... FITXER1 [FITXER2 [SALT1 [SALT2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Compara dos fitxers octet a octet." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "" +"SALT1 i SALT2 són el nombre d'octets que es passen per alt de cada fitxer." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Els valors de SALT poden tenir els següents sufixs multiplicadors:\n" +"kB per 1000, K per 1024, MB per 1.000.000, M per 1.048.576, GB per\n" +"1.000.000.000, G per 1.073.741.824, i així amb T, P, E, Z i Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Si un FITXER és «-» o falta, llegeix l'entrada estàndard." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"L'estat de sortida és 0 si les entrades són iguals, 1 si són diferents\n" +"i 2 en cas d'error." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "el valor «%s» per l'opció --bytes no és vàlid" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "falta un operand després de «%s»" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "sobra l'operand «%s»" + +# mirar el comentari del codi font +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s i %s difereixen: octet %s, línia %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s i %s difereixen: l'octet %s, línia %s, és %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: final de fitxer a %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "el nombre de línies de context «%s» no és vàlid" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "aquest sistema no suporta paginació" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "massa opcions d'etiqueta de fitxer" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "l'amplada «%s» no és vàlida" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "opcions d'amplada incompatibles" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "el nombre de línies d'horitzó «%s» no és vàlid" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "la distància de tabulació «%s» no és vàlida" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "opcions de distància de tabulació incompatibles" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "heu especificat les opcions --from-file i --to-file al mateix temps" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Compara fitxers línia per línia." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case Ignora diferències entre majúscules i minúscules." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Ignora diferències entre majúscules i minúscules " +"en\n" +" els noms dels fitxers." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Té en compte diferències entre majúscules i\n" +" minúscules en comparar noms de fitxers." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Ignora canvis provocats per la distància de\n" +" tabulació." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "" +"-b --ignore-space-change Ignora canvis en la quantitat d'espai en blanc." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Ignora tot l'espai en blanc." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines Ignora canvis en línies que estan en blanc." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I ER --ignore-matching-lines=ER Ignora canvis en línies que continguin ER." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "" +"--strip-trailing-cr Treu els caràcters finals de retorn de carro de " +"l'entrada." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Escriu i llegeix dades en mode binari." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Tracta tots els fitxers com a text." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C NÚM --context[=NÚM] Escriu NÚM (3 per omissió) línies de context.\n" +"-u -U NÚM --unified[=NÚM] Escriu NÚM (3 per omissió) línies de context\n" +" unificat.\n" +" --label ETIQUETA Usa ETIQUETA en lloc del nom del fitxer.\n" +" -p --show-c-function Mostra en quina funció C es troba cada canvi.\n" +" -F ER --show-function-line=ER Mostra la línia més recent que contingui " +"ER." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Indica només si els fitxers difereixen o no." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Genera un script ed." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Genera un diff normal." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Genera un diff en format RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Disposa el resultat en dues columnes.\n" +" -W NÚM --width=NÚM No més de NÚM (130 per omissió) caràcters per línia.\n" +" --left-column Només mostra les línies en comú a la columna esquerra.\n" +" --suppress-common-lines No mostra les línies en comú." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NOM --ifdef=NOM Genera un fitxer combinat amb diferències expressades\n" +" amb directives `#ifdef NOM'." + +# `grups' o `grups de línies' (no queda prou clar) +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--TIPUSG-group-format=FMTG Similar, però formata els grups TIPUSG amb FMTG." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "--line-format=FMTL Similar, però formata totes les línies amb FMTL." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--TIPUSL-line-format=FMTL Similar, però formata les línies TIPUSL amb FMTL." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" TIPUSL pot ser «old» (velles), «new» (noves), o «unchanged» (inalterades).\n" +" TIPUSG pot ser qualsevol TIPUSL o bé «changed» (alterades)." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" FMTG pot contenir:\n" +" %< línies de FITXER1\n" +" %> línies de FITXER2\n" +" %= línies comunes de FITXER1 i FITXER2\n" +" %[-][AMPLADA][.[PRECISIÓ]]{doxX}LLETRA espec. estil printf per a " +"LLETRA\n" +" LLETRA és una de les següents pels grups nous (en minúscules pels " +"vells):\n" +" F nombre de la primera línia\n" +" L nombre de l'última línia\n" +" N nombre de línies del grup = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" FMTL pot contenir:\n" +" %L contingut de la línia\n" +" %l contingut de la línia sense el salt de línia final\n" +" %[-][AMPLADA][.[PRECISIÓ]]{doxX}n espec. estil printf pel nombre de " +"línia" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Tant FMTG com FMTL poden contenir:\n" +" %% %\n" +" %c'C' el caràcter C\n" +" %c'\\OOO' el caràcter de codi octal OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Pagina la sortida amb el programa «pr»." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Expandeix les tabulacions de la sortida a espais." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Alinea el text de cada línia amb un caràcter de tabulació." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=NÚM Estableix la distància de tabulació en NÚM (8 per omissió)\n" +" caràcters." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "" +"-r --recursive Compara recursivament qualsevol subdirectori existent." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Considera els fitxers inexistents com si fóssin buits." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Tracta els fitxers primers inexistents com si\n" +" fóssin buits." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Avisa quan dos fitxers són idèntics." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x PAT --exclude=PAT Exclou fitxers que coincideixen amb PAT." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FITXER --exclude-from=FITXER Exclou fitxers que coincideixen amb\n" +" qualsevol patró de FITXER." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S FITXER --starting-file=FITXER Comença per FITXER quan es comparen\n" +" directoris." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FITXER1 Compara FITXER1 amb tots els operands. FITXER1 pot ser\n" +" un directori." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FITXER1 Compara tots els operands amb FITXER2. FITXER2 pot ser\n" +" un directori." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "--horizon-lines=NÚM No descarta NÚM línies amb prefix i sufix comú." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Intenta trobar canvis mínims." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Assumeix fitxers grans i molts canvis petits dispersos." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"FITXERS és «FITXER1 FITXER2» o «DIR1 DIR2» o «DIR FITXER...» o «FITXER... DIR»." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Amb les opcions --from-file o --to-file no hi ha restriccions de FITXERS." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Si FITXER és «-», llegeix l'entrada estàndard." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Mode d'ús: %s [OPCIÓ]... FITXERS\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "el valor «%s» per l'opció %s és conflictiu" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "opcions d'estil de sortida conflictives" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Només a %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "no es pot comparar «-» amb un directori" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "l'opció -D no funciona amb directoris" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Subdirectoris comuns: %s i %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "El fitxer %s és un %s mentre que el fitxer %s és un %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Els fitxers %s i %s són idèntics\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "opcions incompatibles" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "heu especificat «-» per més d'un fitxer d'entrada" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "lectura fallida" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Mostra els canvis no comuns de FITXER-VELL a FITXER2 en FITXER1." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Mostra els canvis no comuns, senyalant els conflictes " +"amb\n" +" separadors." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "" +"-A --show-all Mostra tots els canvis, senyalant els conflictes amb " +"separadors." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Mostra els canvis solapats." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Mostra els canvis solapats, amb separadors." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Mostra els canvis no comuns i no solapats." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Produeix un fitxer de canvis combinat en lloc d'un script ed\n" +" (usant l'opció -A per omissió)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "" +"-L ETIQUETA --label=ETIQUETA Usa ETIQUETA en lloc del nom del fitxer." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Afegeix les instruccions «w» i «q» a l'script ed." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAMA Usa PROGRAMA per comparar fitxers." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Mode d'ús: %s [OPCIÓ]... FITXER1 FITXER-VELL FITXER2\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Compara tres fitxers línia per línia." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"L'estat de sortida és 0 si s'acaba amb èxit, 1 si hi ha conflictes\n" +"i 2 en cas d'error." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "error intern: format dels blocs diff desmanegat" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff ha fallat: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "error intern: tipus de diff invàlid en process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "el format diff no és vàlid: el separador de canvis no és vàlid" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "el format diff no és vàlid: l'última línia està incompleta" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "no s'ha pogut invocar el programa subsidiari «%s»" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "el format diff no és vàlid: caràcters invàlids al principi de línia" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "error intern: tipus de diff no vàlid passat a la sortida" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "el fitxer d'entrada s'ha encongit" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "no es poden comparar els noms de fitxer «%s» i «%s»" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o FITXER --output=FITXER Opera interactivament, i envia la sortida a " +"FITXER." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case No distingeix entre majúscules i minúscules." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Ignora tot l'espai en blanc." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w NÚM --width=NÚM No més de NÚM (130 per omissió) caràcters per línia." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "" +"-l --left-column Només escriu les línies en comú a la columna esquerra." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines No mostra les línies en comú." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Assumeix fitxers grans i molts canvis petits " +"dispersos." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Mode d'ús: %s [OPCIÓ]... FITXER1 FITXER2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Combina diferències entre fitxers en dues columnes" + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "no es pot combinar interactivament l'entrada estàndard" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "ambdós fitxers són directoris" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tEdita i usa les dues versions, amb un encapçalament afegit.\n" +"eb:\tEdita i usa les dues versions.\n" +"el:\tEdita i usa la versió de l'esquerra.\n" +"er:\tEdita i usa la versió de la dreta.\n" +"e:\tEdita una nova versió.\n" +"l:\tUsa la versió de l'esquerra.\n" +"r:\tUsa la versió de la dreta.\n" +"s:\tInclou les línies comunes silenciosament\n" +"v:\tInclou les línies comunes i informa amb loquacitat\n" +"q:\tSurt.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: opció il·legal -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Això és programari lliure; vegeu el codi font per les condicions de " +#~ "còpia. No\n" +#~ "hi ha CAP garantia, ni tan sols de COMERCIABILITAT o ADEQUACIÓ A UN " +#~ "PROPÒSIT.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Comuniqueu errors a <bug-gnu-utils@gnu.org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "l'opció «-%ld» és obsoleta; useu «-%c %ld»" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "l'opció «-%ld» és obsoleta; eviteu-la" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "no s'ha trobat el programa subsidiari «%s»" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "el programa subsidiari «%s» ha fallat" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "el programa subsidiari «%s» Ha fallat (estat de sortida %d)" diff --git a/po/cs.gmo b/po/cs.gmo new file mode 100644 index 0000000000000000000000000000000000000000..270a085a7e0c6de0d8ab8704fe2e7b9026654b5c GIT binary patch literal 26905 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 literal 0 HcmV?d00001 diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..22a1fbd --- /dev/null +++ b/po/cs.po @@ -0,0 +1,1204 @@ +# Czech translations for the GNU diffutils messages. +# Copyright (C) 1998, 2002, 2004, 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils package. +# Petr Kočvara <petr.kocvara@nemfm.cz>, 1998, 2002, 2004, 2010 +# +msgid "" +msgstr "" +"Project-Id-Version: GNU diffutils 2.9\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2010-02-18 10:39+0100\n" +"Last-Translator: Petr Kočvara <petr.kocvara@nemfm.cz>\n" +"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "chyba programu" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "přetečení zásobníku" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Neznámá chyba systému" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "obyčejný prázdný soubor" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "obyčejný soubor" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "adresář" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "speciální blokový soubor" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "speciální znakový soubor" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "roura" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "symbolický odkaz" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "soket" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "fronta zpráv" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semafor" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "objekt sdílené paměti" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "objekt typové paměti" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "soubor neznámého typu" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: přepínač '%s' není jednoznačný\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: přepínač '--%s' musí být zadán bez argumentu\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: přepínač '%c%s' musí být zadán bez argumentu\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: přepínač '%s' vyžaduje argument\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: neznámý přepínač '--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: neznámý přepínač '%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: neznámý přepínač -- '%c'\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: přepínač vyžaduje argument -- '%c'\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: přepínač '-W %s' není jednoznačný\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: přepínač '-W %s' musí být zadán bez argumentu\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: přepínač '%s' vyžaduje argument\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "„" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "“" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Hotovo" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Žádná shoda" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Neplatný regulární výraz" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Neplatný znak porovnání" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Neplatné jméno třídy znaků" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Koncové zpětné lomítko" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Neplatný zpětný odkaz" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Nepárová [ nebo ]^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Nepárová ( nebo \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Nepárová \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Neplatný obsah \\{\\}" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Neplatný konec rozsahu" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Paměť vyčerpána" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Neplatný předchozí regulární výraz" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Předčasný konec regulárního výrazu" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Regulární výraz je příliÅ¡ dlouhý" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Nepárová ) nebo \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Předchozí regulární výraz neexistuje" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "paměť vyčerpána" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "stdin" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "stdout" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "stderr" + +#: lib/xfreopen.c:38 +msgid "unknown stream" +msgstr "neznámý proud" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "nelze znovuotevřít %s v módu %s" + +#: lib/xstrtol-error.c:63 +#, c-format +msgid "invalid %s%s argument `%s'" +msgstr "neplatná hodnota %s%s přepínače `%s'" + +#: lib/xstrtol-error.c:68 +#, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "neplatná přípona v hodnotě %s%s přepínače `%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "hodnota %s%s přepínače `%s' je příliÅ¡ velká" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "Balíček připravil %s (%s)\n" + +#: lib/version-etc.c:77 +#, c-format +msgid "Packaged by %s\n" +msgstr "Balíček připravil %s\n" + +#. 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:84 +msgid "(C)" +msgstr "©" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" +"\n" +"Licence GPLv3+: GNU GPL verze 3 nebo novější <http://gnu.org/licenses/gpl." +"html>.\n" +"Toto je svobodné programové vybavení: máte právo měnit jej a dále šířit.\n" +"Není poskytována ŽÁDNÁ ZÁRUKA, jak jen zákon dovoluje.\n" +"\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Autor: %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Autoři: %s a %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Autoři: %s, %s a %s.\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 "" +"Autoři: %s, %s, %s\n" +"a %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Autoři: %s, %s, %s,\n" +"%s a %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Autoři: %s, %s, %s,\n" +"%s, %s a %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Autoři: %s, %s, %s,\n" +"%s, %s, %s a %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Autoři: %s, %s, %s,\n" +"%s, %s, %s, %s\n" +"a %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Autoři: %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s a %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Autoři: %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s a další.\n" + +#. 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 "" +"\n" +"Chyby v programu oznamujte na adrese %s (anglicky),\n" +"připomínky k překladu na adrese <translation-team-cs@lists.sourceforge.net>\n" +"(česky).\n" + +#: lib/version-etc.c:247 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" +"Chyby v programu %s oznamujte (anglicky) na: %s\n" +"Připomínky k překladu (česky) na: <translation-team-cs@lists.sourceforge." +"net>\n" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Domovská stránka %s: <%s>\n" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "Domovská stránka programu %s: <http://www.gnu.org/software/%s/>\n" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Obecná pomoc při používání softwaru GNU:: <http://www.gnu.org/gethelp/>\n" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Soubory %s a %s jsou různé\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Soubory %s a %s jsou různé\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Chybí znak konce řádku na konci souboru" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "David MacKenzie" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Více informací získáte příkazem `%s --help'." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "neplatná hodnota --ignore-inital `%s'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "přepínače -l a -s nejsou kompatibilní" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "zápis selhal" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "standardní výstup" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Vypíše rozdílné bajty." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i N --ignore-initial=N Ignoruje prvních N bajtů na vstupu." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i N1:N2 --ignore-initial=N1:N2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Přeskočí prvních N1 bajtů souboru SOUBOR1 a prvních N2 bajtů souboru " +"SOUBOR2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose Vypíše pozice a hodnoty vÅ¡ech rozdílných bajtů." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LIMIT --bytes=LIMIT Porovná maximálně LIMIT bajtů." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent Žádný výstup; vrátí pouze status." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Informace o verzi." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Vypíše tuto nápovědu." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Použití: %s [PŘEPÍNAČ]... SOUBOR1 [SOUBOR2 [SKIP1 [SKIP2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Porovnání dvou soborů bajt po bajtu." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "N1 a N2 udávají počet bajtů, které budou ignorovány v každém souboru." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Hodnoty SKIP mohou být doplněny následujícími příponami:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, a stejně tak i pro T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "" +"Pokud SOUBOR bude `-' nebo nebude existovat, bude čten standardní vstup." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"Návratový kód je roven 0 pokud jsou vstupy shodné, 1 pokud se liší a 2 při " +"chybě." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "neplatná hodnota přepínače --bytes `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "po `%s' je nesprávný operand" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "operand `%s' je nadbytečný" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s se liší: bajt %s, řádek %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s se liší: bajt %s, řádek %s je %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF v %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "Paul Eggert" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "Mike Haertel" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "David Hayes" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "Richard Stallman" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "Len Tower" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "neplatná délka kontextu `%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "přestránkování není na tomto počítači podporováno" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "příliÅ¡ mnoho přepínačů popisu souboru" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "nesprávná délka `%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "konfliktní volby šířky výstupu" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "neplatná délka obzoru `%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "nesprávná hodnota tabsize `%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "konfliktní přepínače tabsize" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "parametry --from-file i to-file použity najednou" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Porovnání souborů řádek po řádku." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case Ignoruje velikost písmen v obsahu souboru." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "--ignore-file-name-case Ignoruje velikost písmen v názvech souborů." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Bere v potaz velikost písmen v názvech souborů." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "-E --ignore-tab-expansion Ignoruje změny v odsazení tabelátorem." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Ignoruje změny v počtu mezer." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Ignoruje vÅ¡echny mezery." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines Ignoruje změny v případě prázdných řádků." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RV --ignore-matching-lines=RV Ignoruje změny na vÅ¡ech řádcích\n" +" odpovídajících RV." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Odstraní ukončovací znak CR na vstupu." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Čte a zapisuje data v binárním režimu." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Pokládá vÅ¡echny soubory za text." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C POČ --context[=POČ] Vypíše POČ (implicitně 3) řádky kopírovaného\n" +" kontextu.\n" +"-u -U POČ --unified[=POČ] Vypíše POČ (implicitně 3) řádky sjednoceného\n" +" kontextu.\n" +" -L POPIS --label POPIS Použije POPIS místo jména souboru.\n" +" -p --show-c-function U každé změny vypíše jméno C funkce, ve které se\n" +" tato změna nachází.\n" +" -F RV --show-function-line=RV Vypíše nejnovější řádky odpovídající RV." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Výstup pouze při rozdílných souborech." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Vytvoří skript pro ed." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Výstup bude v normálním diff formátu." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Výstup bude ve formátu RCS diff." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Výstup ve dvou sloupcích.\n" +" -W POČ --width=POČ Vypíše maximálně POČ (implicitně 130) znaků na " +"řádek.\n" +" --left-column Vypíše pouze levý sloupec společných řádků.\n" +" --suppress-common-lines Nevypíše společné řádky." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D JMENO --ifdef=JMENO Vypíše sloučený soubor s rozdíly `#ifdef JMENO'." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=FMTS Podobné, ale formátuje vstupní skupiny GTYPE\n" +" podle FMTS." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=FMTR Podobně, ale formátuje vÅ¡echny vstupní řádky podle FMTR." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=FMTR Podobné, ale formátuje vstupní řádky LTYPE podle " +"FMTR." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE je `starý', `nový' nebo `nezměněn'. GTYPE je LTYPE nebo `změněn'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT může obsahovat:\n" +" %< řádky ze SOUBOR1\n" +" %> řádky ze SOUBOR2\n" +" %= řádky společné pro SOUBOR1 i SOUBOR2\n" +" %[-][DELKA][.[PRES]]{doxX}ZNAK formát stylu printf pro ZNAK\n" +" ZNAKy dále jsou pro novou skupinu, malými písmeny pro starou skupinu:\n" +" F číslo prvního řádku\n" +" L číslo posledního řádku\n" +" N počet řádků = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT může obsahovat:\n" +" %L obsah řádku\n" +" %l obsah řádku, s vyjímkou znaku konce řádku\n" +" %[-][ŠÍŘKA][.[PŘES]]{doxX}c formát stylu printf pro číslo vstupního " +"řádku" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Jeden z GFMT nebo LFMT může obsahovat:\n" +" %% %\n" +" %c'C' jeden znak C\n" +" %c'\\000' znak s osmičkovým kódem 000" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Výstup projde přes `pr' pro přestránkování." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Ve výstupu převede tabulátory na mezery." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "-T --initial-tab Na začátek řádků se vloží tabulátor." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=POČ Tab zastavuje každých POČ (implicitně 8) tiskových sloupců." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" +"--suppress-blank-empty Potlačí mezeru nebo tabulátor před prázdnými\n" +"  řádky výstupu." + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Rekurzívní porovnání vÅ¡ech nalezených podadresářů." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Neexistující soubory považuje za prázdné." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Při porovnávání adresářů považuje neexistující\n" +" soubory v prvém adresáři za prázdné." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Uvede pouze shodné soubory." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x VZOR --exclude=VZOR Vynechá soubory odpovídající VZORu." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X SOUBOR --exclude-from=SOUBOR Vynechá soubory, které odpovídají\n" +" libovolnému vzorku ze SOUBORu." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S SOUBOR --starting-file=SOUBOR Při porovnávání adresářů začne souborem\n" +" SOUBOR." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=SOUBOR1 Porovná SOUBOR1 se vÅ¡emi operandy. SOUBOR1 může být\n" +" adresář." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=SOUBOR2 Porovná vÅ¡echny operandy se SOUBOR2. SOUBOR2 může být\n" +" adresář." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=POČET Ponechá POČET shodných řádků předpony a přípony." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Pokusí se nalézt nejmenší sadu změn." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Předpokládá velké soubory a mnoho rozptýlených\n" +" drobných změn." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"SOUBORY jsou `SOUBOR1 SOUBOR2' nebo `ADRESAR1 ADRESAR2' nebo\n" +"`ADRESAR SOUBOR...' nebo `SOUBOR... ADRESAR'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Pokud je uveden --from-file nebo --to-file, pak nejsou u SOUBORů žádná " +"omezení." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Pokud SOUBOR bude `-', bude čten standardní vstup." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Použití: %s [PŘEPÍNAČ]... SOUBORY\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "pro přepínač %s konfliktní hodnota `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "konfliktní přepínače pro styl výstupu" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Pouze v %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "`-' s adresářem nelze porovnat" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "-D přepínač nepodporuje práci s adresáři" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Společné podadresáře: %s a %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Soubor %s je %s pokud soubor %s je %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Soubory %s a %s jsou identické\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "Randy Smith" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "nekompatibilní přepínače" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "`-' zadáno pro více než jeden vstupní soubor" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "čtení selhalo" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Vypíše nespojené změny ze STARYSOUBOR k VASSOUBOR do MUJSOUBOR." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "-E --show-overlap Vypíše nesloučené změny, konflikty v závorkách." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Vypíše vÅ¡echny rozdíly, konflikty v závorkách." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Vypíše překrývající se změny." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Vypíše překrývající se změny, uzavřené v závorkách." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Vypíše nesloučené nepřekrývající se změny." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "-m --merge Vypíše spojený soubor místo ed skriptu (implicitně -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L POPIS --label=POPIS Použije POPIS místo jména souboru." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Přidá příkazy `w' a `q' do skriptů pro ed." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAM Použij PROGRAM k porovnání souborů." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Použití: %s [PŘEPÍNAČ]... MUJSOUBOR STARYSOUBOR VASSOUBOR\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Porovnání tří souborů řádek po řádku." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "Návratová hodnota je 0 při úspěchu, 1 při konfliktu a 2 při chybě." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "vnitřní chyba: chyba ve formátu diff bloků" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff selhal: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "vnitřní chyba: nesprávný typ diffu v process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "neplatný formát diff souboru; neplatný oddělovač změny" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "neplatný formát diff souboru; nekompletní poslední řádek" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "pomocný program `%s' nelze spustit" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "neplatný formát diff souboru; nesprávné úvodní znaky na řádku" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "vnitřní chyba: nesprávný typ diffu pro výstup" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "vstupní soubor se zmenÅ¡il" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "nemohu porovnat jména souborů `%s' a `%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "%s: smyčka v rekurzi adresářů" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "Thomas Lord" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o SOUBOR --output=SOUBOR Interaktivní práce, výstup půjde do SOUBORu." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case NerozliÅ¡uje velká a malá písmena." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Ignoruje vÅ¡echny mezery." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w POČ --width=POČ Vypíše maximálně POČ (implicitně 130) znaků na řádek." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Vypíše pouze levý sloupec společných řádků." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Nevypisuje shodné řádky." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Předpokládá velké soubory a mnoho rozptýlených\n" +" drobných změn." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Použití: %s [PŘEPÍNAČ]... SOUBOR1 SOUBOR2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Aplikace změn v souboru v módu `vedle sebe`." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "interaktivně nelze standardní vstup sloučit" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "oba soubory k porovnání jsou adresáři" + +#: src/sdiff.c:868 +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tEditace - použije obě verze, každou obdaří hlavičkou.\n" +"eb:\tEditace - použije obě verze.\n" +"el nebo e1:\tEditace - použije levou verzi.\n" +"er nebo e2:\tEditace - použije pravou verzi.\n" +"e:\tZahození obou verzí a editace nové verze.\n" +"l nebo 1:\tPoužije levou verzi.\n" +"r nebo 2:\tPoužije pravou verzi.\n" +"s:\tV tichosti vloží společné řádky.\n" +"v:\tUpozorní na vložení společných řádků.\n" +"q:\tUkončení.\n" diff --git a/po/da.gmo b/po/da.gmo new file mode 100644 index 0000000000000000000000000000000000000000..20f14ab5d70eb7388c238c973bcd6d1b64d25384 GIT binary patch literal 19556 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 literal 0 HcmV?d00001 diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..a3e0564 --- /dev/null +++ b/po/da.po @@ -0,0 +1,1217 @@ +# Danish diffutils translation po-file +# Copyright (C) 2000 Free Software Foundation, Inc. +# Claus Hindsgaul <claus_h@image.dk>, 2000-2002. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.7.10\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2002-03-12 14:51GMT\n" +"Last-Translator: Claus Hindsgaul <claus_h@image.dk>\n" +"Language-Team: Danish <dansk@klid.dk>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.5\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "programfejl" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "stakoverløb" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Ukendt systemfejl" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "almindelig tom fil" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "almindelig fil" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "katalog" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "blok-specialfil" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "tegn-specialfil" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "stik" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "meddelelseskø" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "signal" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "delt hukommelses-objekt" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "typeangivet hukommelses-objekt" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "mystisk fil" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: tilvalg '%s' er flertydigt\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: tilvalg '--%s' tillader ikke et parameter\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: tilvalg '%c%s' tillader ikke et parameter\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: tilvalg '--%s' tillader ikke et parameter\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: ukendt tilvalg '--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: ukendt tilvalg '%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ugyldigt tilvalg -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: tilvalg kræver et parameter -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: tilvalget '-W %s' er flertydigt\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: tilvalget '-W %s' tillader ikke et parameter\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: tilvalg '--%s' tillader ikke et parameter\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Succes" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Ingen match" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Ugyldigt regulært udtryk" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Ugyldig sammenlignings-tegn" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Ugyldigt navn på tegn-klasse" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Efterstillet backslash" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Ugyldig bagud-reference" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Uparret [ eller [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Uparret ( eller \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Uparret \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Ugyldigt indhold af \\{\\}" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Ugyldig område-afslutning" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Hukommelse opbrugt" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Ugyldigt foranstillet regulært udtryk" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "For tidlig afslutning på regulært udtryk" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "For stort regulært udtryk" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Uparret ) eller \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Intet foranstillet regulært udtryk" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "hukommelse opbrugt" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Ukendt systemfejl" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "ugyldig '--bytes'-værdi `%s'" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "ugyldig horisont-længde '%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, fuzzy, c-format +msgid "Written by %s.\n" +msgstr "Skrevet af Thomas Lord." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "Skrevet af Randy Smith." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Skrevet af Randy Smith." + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Filerne %s og %s er forskellige\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Binære filer %s og %s er forskellige\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Intet linjeskift ved filafslutning" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Prøv '%s --help' for mere information." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "ugyldig '--ignore-initial'-værdi `%s'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "tilvalgene -l og -s er inkompatible" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "skrivning mislykkedes" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "standard-ud" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-byte Vis afvigende byte." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i SPRING --ignore-initial=SPRING Overspring de første SPRING byte i " +"inddata." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SPRING1:SPRING2 --ignore-initial=SPRING1:SPRING2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Overspring de første SPRING1 byte i FIL1 og de første SPRING2 byte i FIL2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose Vis antal byte og værdierne for alle afvigende byte." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n GRÆNSE --bytes=GRÆNSE Sammenlign højst GRÆNSE byte." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "" +"-s --quiet --silent Ingen udlæsning; sæt kun en afslutnings-slut-kode." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Vis versions-info." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Vis denne hjælp." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Brug: %s [TILVALG]... FIL1 [FIL2 [SPRING1 [SPRING2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Sammenlign to filer byte for byte." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "" +"SPRING1 og SPRING2 er antallet af byte, der skal overspringes i hver fil." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"SPRING-værdier kan efterfølges af følgende enheder:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, og så videre for T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Såfremt en FIL er '_' eller mangler, læses fra standard inddata." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "ugyldig '--bytes'-værdi `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "manglende operant efter '%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "ekstra operant '%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s afviger: byte %s, linje %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s afviger: tegn %s, linje %s er %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: filafslutning på %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "ugyldig indholdslængde '%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "paginering understøttes ikke af denne vært" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "for mange fil-mærke tilvalg" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "ugyldig bredde '%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "modstridende breddeangivelser" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "ugyldig horisont-længde '%s'" + +#: src/diff.c:588 +#, fuzzy, c-format +msgid "invalid tabsize `%s'" +msgstr "ugyldig bredde '%s'" + +#: src/diff.c:592 +#, fuzzy +msgid "conflicting tabsize options" +msgstr "modstridende breddeangivelser" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "både --from-file og --to-file er angivet" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Sammenlign filer linje for linje" + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case Ignorér versalforskelle i filindholdet" + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Ignorér versalforskelle ved sammenligning af " +"filnavne." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Bemærk versalforskelle, når filnavne " +"sammenlignes." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Ignore ændringer, der skyldes tabulatoromsætning." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "" +"-b --ignore-space-change Ignorér ændringer i antallet af mellemrumstegn." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Ignorér alle mellemrums-tegn." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B --ignore-blank-lines Ignorér ændringer med udelukkende tomme linjer." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I MØNSTER --ignore-matching-lines=MØNSTER Ignorér ændringer, hvis linjer " +"alle matcher MØNSTER." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "" +"--strip-trailing-cr Fjern afsluttende vognretur (carriage return) i inddata." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Læs og skriv data binært." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Behandl alle filer som tekst." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C ANTAL --context[=ANTAL] Udlæs ANTAL (standard 3) linjer af kopieret " +"kontekst.\n" +"-u -U ANTAL --unified[=ANTAL] Udlæs ANTAL (standard 3) linjer af unified " +"kontekst.\n" +" -L MÆRKE --label MÆRKE Brug MÆRKE i stedet for filnavn.\n" +" -p --show-c-function Vis hvilken C funktion hver ændring er i.\n" +" -F MØNSTER --show-function-line=MØNSTER Vis den sidste foregående linje, " +"der matcher MØNSTER." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Undersøg kun om filerne er ens eller ej." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Udlæs et ed skript." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Udlæs en almindelig diff." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Udlæs en diff i RCS-format." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Udlæs i to kolonner.\n" +" -W ANTAL --width=ANTAL Udlæs højst ANTAL (standard 130) skriftsøjler.\n" +" --left-column Vis kun venstre kolonne af identiske linjer.\n" +" --suppress-common-lines Udlæs ikke sammenfaldende linjer." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NAVN --ifdef=NAVN Udlæs flettet fil for at vise '#ifdef NAVN' ændringer." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT Det samme, men formatér GTYPE inddata grupper med " +"GFMT" + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LFMT Det samme, men formatér alle indlæste linjer med LFMT." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT Det samme, men formatér LTYPE inddata med LFMT" + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE er 'gammel', 'ny' eller 'uændret'. GTYPE er LTYPE eller 'ændret'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT må indeholde:\n" +" %< linjer fra FIL1\n" +" %> linjer fra FIL2\n" +" %= linjer, der er fælles mellem FIL1 og FIL2\n" +" %[-][BREDDE][.[PRÆC]]{doxX}BOGSTAV printf-type specifikation for " +"BOGSTAV\n" +" BOGSAV er som nedenfor for en ny gruppe, små bogstaver for gammel " +"gruppe:\n" +" F første linjenummer\n" +" L sidste linjenummer\n" +" N antal linjer = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT må indeholde:\n" +" %L indhold af linje\n" +" %l indhold af linje, undtagen eventuel følgende linjeskift\n" +" %[-][BREDDE][.[PRÆC]]{doxX}n printf-stil angivelse af inddata " +"linjenummer" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Enten kan GFMT eller LFMT indeholde:\n" +" %% %\n" +" %c'T' tegnet T alene\n" +" %c'\\000' tegnet med oktal kode 000" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Led uddata gennem 'pr' for at sideinddele det." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Lav tabulatorer om til mellemrum i output." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Få tabulatorer på linje ved at forudstille en tabulator." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Sammenlign alle fundne underkataloger rekursivt." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Behandl manglende filer som var de tomme." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Behandl første manglende filer som var de tomme." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Rapportér hvis to filer er ens." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x MØNSTER --exclude=MØNSTER Udelad filer, det matcher MØNSTER." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FIL --exclude-from=FIL Udelad filer, der matcher ethvert mønster i FIL." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "-S FIL --starting-file=FIL Star med FIL, når kataloger sammenlignes." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FIL1 Sammenlign FIL1 med alle operanter. FIL1 må godt være et " +"katalog." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FIL1 Sammenlign alle operanter med FIL2. FIL2 må godt være et " +"katalog." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=ANTAL Behold ANTAL linjer af fælles præfix og suffiks." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Grundigt forsøg på at finde et mindre antal ændringer." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Antag store filer og mange spredte, små ændringer." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"FILER er 'FIL1 FIL2' eller 'KATALOG1 KATALOG2' eller 'KATALOG FIL...' eller " +"'FIL... KATALOG'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"hvis --from-file eller --to-file er angivet, er der ingen restriktioner på " +"FILER." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Såfremt en FIL er '-', læses fra standard-ind." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Brug: %s [TILVALG]... FILER\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "modstridende værdi for %s-tilvalget: '%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "modstridende valg af uddata-stil" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Kun i %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "kan ikke sammenligne '-' med et katalog" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "-D tilvalg understøttes ikke for kataloger" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Identiske underkataloger: %s og %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Filen %s er en %s mens filen %s er en %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Filerne %s og %s er identiske\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +#, fuzzy +msgid "Randy Smith" +msgstr "Skrevet af Randy Smith." + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "inkompatible tilvalg" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "'-' angiver mere en én ind-fil" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "læsning mislykkedes" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Udlæs uflettede ændringer mellem GAMMELFIL og DINFIL til MINFIL." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "-E --show-overlap Udlæs uflettede ændringer, konflikter i paranteser" + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Udlæs alle ændringer, konflikter i paranteser." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Vis kun overlappende ændringer." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Udlæs overlappende ændringer, i paranteser." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Udlæs ikke-flettede, ikke-overlappende ændringer." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "-m --merge Udlæs flettet fil i stedet for ed skript (standard -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L MÆRKE --label=MÆRKE Brug MÆRKE i stedet for filnavn." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Tilføj 'w' og 'q'-kommandoer til ed skripter." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAM Brug PROGRAM til at sammenligne filerne." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Brug: %s [TILVALG]... MINFIL GAMMELFIL DINFIL\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Sammenlign tre filer linje for linje." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "intern fejl: rod i formatet på diff blokke" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff fejlede: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "intern fejl: ugyldig diff type i process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "ugyldigt diff format; ugyldig ændrings-separator" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "ugyldigt diff format; uafsluttet sidste linje" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, fuzzy, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "hjælpeprogram '%s' blev ikke fundet" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "ugyldigt diff format; forkerte linje-begyndelses-tegn" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "intern fejl: ugyldig diff type sendt til uddata" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "ind-fil formindskedes" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "kan ikke sammenligne filnavnene '%s' og '%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +#, fuzzy +msgid "Thomas Lord" +msgstr "Skrevet af Thomas Lord." + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "-o FIL --output=FIL Arbejd interaktivt, send uddata til FIL." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-e --ignore-case Anse store og små bogstaver for at være ens." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Ignorer alle mellemrumskarakterer." + +#: src/sdiff.c:204 +#, fuzzy +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w ANTAL --width=ANTAL Udlæs højst ANTAL (standard 130) søjler per linje." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Vis kun venstre kolonne af identiske linjer." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Udlæs ingen identiske linjer." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Antag store filer og mange spredte, små ændringer." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Brug: %s [TILVALG]... FIL1 FIL2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Ved-siden-af-hinanden-sammenfletning af filforskelle." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "kan ikke indflette standard input interaktivt" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "begge filer der sammenlignes er kataloger" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tRedigér og brug så begge udgaver, hver udstyret med et hoved.\n" +"eb:\tRedigér og brug så begge udgaver.\n" +"el:\tRedigér og brug så venstre udgave.\n" +"er:\tRedigér og brug så højre udgave.\n" +"e:\tRedigér en ny udgave.\n" +"l:\tBrug venstre udgave.\n" +"r:\tBrug højre udgave.\n" +"s:\tMedtag tavst fælles linjer.\n" +"v:\tMedtag og vis fælles linjer.\n" +"q:\tAfslut.\n" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the file named COPYING." +#~ msgstr "" +#~ "Dette program kommer HELT UDEN GARANTI i den udstrækning, loven tillader " +#~ "det.\n" +#~ "Du må videredistribuere kopier af dette program\n" +#~ "under betingelserne i GNU General Public License (GPL).\n" +#~ "Se filen COPYING for flere oplysninger om dette." + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: ugyldigt tilvalg -- %c\n" + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr "Skrevet af Torbjorn Granlund og David MacKenzie." + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Raportér programfejl på engelsk til <bug-gnu-utils@gnu.org>." + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ "Skrevet af Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman og Len Tower." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "Tilvalget '-%ld' er forældet; benyt '-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "Tilvalget '-%ld' er forældet; udelad det" + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "hjælpeprogram '%s' er ikke eksekverbart" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "hjælpeprogram '%s' fejlede" diff --git a/po/de.gmo b/po/de.gmo new file mode 100644 index 0000000000000000000000000000000000000000..fecc2b2a5d3db4585789750bc44ba8aa454f1661 GIT binary patch literal 20511 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 literal 0 HcmV?d00001 diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..91e82d3 --- /dev/null +++ b/po/de.po @@ -0,0 +1,1243 @@ +# German messages for GNU diffutils. +# Copyright (C) 1996, 2001, 2002 Free Software Foundation, Inc. +# Karl Eichwalder <keichwa@gmx.net>, 1996 +# Martin von Löwis <martin@v.loewis.de>, 1997, 2001, 2002 +# +msgid "" +msgstr "" +"Project-Id-Version: GNU diffutils 2.8.2\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2002-06-13 19:39+0200\n" +"Last-Translator: Martin von Löwis <martin@v.loewis.de>\n" +"Language-Team: German <de@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "Programmfehler" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "Stacküberlauf" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Unbekannter Systemfehler." + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "" + +#: lib/file-type.c:38 +#, fuzzy +msgid "regular file" +msgstr "Lesefehler." + +#: lib/file-type.c:41 +msgid "directory" +msgstr "" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "" + +#: lib/file-type.c:70 +#, fuzzy +msgid "weird file" +msgstr "Lesefehler." + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: Option »%s« ist mehrdeutig.\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: Option »--%s« verlangt kein Argument.\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: Option »%c%s« erlaubt kein Argument.\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: Option »%s« verlangt ein Argument.\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: Unbekannte Option »--%s«.\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: Unbekannte Option »%c%s«.\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ungültige Option -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: Option verlangt ein Argument -- %c.\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: Option »-W %s« ist mehrdeutig.\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: Option »-W %s« erlaubt kein Argument.\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: Option »%s« verlangt ein Argument.\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Erfolg." + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Keine Übereinstimmung." + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Ungültiger regulärer Ausdruck." + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Ungültiges Sortierzeichen." + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Ungültiger Name für Zeichenklasse." + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Extra Backslash." + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Ungültige Rückreferenz." + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Öffnende [ oder [^ ohne schließende." + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Öffnende ( oder \\( ohne schließende." + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Öffnende \\{ ohne schließende." + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Ungültiger Inhalt von \\{\\}." + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Ungültiges Bereichsende." + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Speicher verbraucht." + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Ungüliger vorhergehender regulärer Ausdruck." + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Vorzeitiges Ende des regulären Ausdrucks." + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Regulärer Ausdruck zu groß." + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Schließende ) oder \\) ohne öffnende." + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Kein vorhergehender regulärer Ausdruck." + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "Speicher verbraucht." + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Unbekannter Systemfehler." + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "ungültiger --bytes-Wert »%s«." + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "ungültige Horizontlänge '%s'." + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "©" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, fuzzy, c-format +msgid "Written by %s.\n" +msgstr "Geschrieben von Thomas Lord." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "Geschrieben von Randy Smith." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Geschrieben von Randy Smith." + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Dateien %s und %s sind verschieden.\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Binärdateien %s and %s sind verschieden.\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Kein Zeilenumbruch am Dateiende." + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "»%s --help« gibt Ihnen mehr Informationen." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "ungültiger --ignore-initial-Wert »%s«." + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "Die Optionen -l und -s sind inkompatibel." + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "Schreibfehler." + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "Standardausgabe" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Verschiedene Bytes ausgeben." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i SKIP --ignore-initial=SKIP Die ersten SKIP Bytes der Eingabe " +"überspringen." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Die ersten SKIP1 Bytes von DATEI1 und die ersten SKIP2 Bytes von DATEI2\n" +" überspringen." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose Bytenummern und Werte aller unterschiedlichen Bytes ausgeben." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LIMIT --bytes=LIMIT Höchstens LIMIT Bytes vergleichen." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s -quiet --silent Keine Ausgabe; nur den Exit-Status setzen." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v -version Versionsinformation ausgeben." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Nur diese Hilfe zeigen." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Aufruf: %s [OPTION]... DATEI1 [DATEI2 [SKIP1 [SKIP2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Zwei Dateien Byte für Byte vergleichen." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "" +"SKIP1 und SKIP2 ist die Zahl der Bytes, die in jeder Datei übersprungen " +"werden." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"SKIP-Werte dürfen die folgenden multiplikativen Anhänge haben:\n" +"kB 1000, K 1024, MB 1.000.000, M 1.048.576,\n" +"GB 1.000.000.000, G 1.073.741.824, und so weiter für T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Wenn DATEI »-« ist oder fehlt, von der Standardeingabe lesen." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "ungültiger --bytes-Wert »%s«." + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "Fehlender Operand nach »%s«." + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "extra Argument »%s«." + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s differieren: Byte %s, Zeile %s.\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s differieren: Zeichen %s, Zeile %s ist %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF auf %s.\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "Ungültige Kontextlänge »%s«." + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "Seitenumbruch ist auf diesem System nicht unterstützt." + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "Zu viele Datei-Label-Optionen." + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "Ungültig mit »%s«." + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "Widersprüchliche Breitenoptionen" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "ungültige Horizontlänge '%s'." + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "Ungültige Tabulatorbreite »%s«." + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "Widersprüchliche Tabulatorbreitenoptionen." + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "--from-file und --to-file sind beide angegeben." + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Vergleichen Sie Dateien Zeile für Zeile." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" +"-i --ignore-case Unterschiede der Groß/Kleinschreibung im Dateiinhalt \n" +" ignorieren." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Unterschiede der Groß/Kleinschreibung von " +"Dateinamen\n" +" ignorieren." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Unterschiede der Groß/Kleinschreibung von \n" +" Dateinamen beachten." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Änderungen aufgrund von Tabausdehnungen " +"ignorieren." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Ignoriere Änderungen im Leerraum." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Freiraum ignorieren." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B, --ignore-blank-lines Die Änderungen übergehen, wo die Zeilen leer sind." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RE --ignore-matching-lines=RE Änderungen ignorieren, deren Zeilen \n" +" auf das Muster RE passen." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "" +"--strip-trailing-cr Wagenrücklauf (CR) am Zeilenende beim Einlesen " +"entfernen." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Daten im Binärmodus lesen und schreiben." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Betrachte alle Dateien als Text." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +" -c, -C ZAHL, --context[=ZAHL] ZAHL Zeilen des kopierten Kontextes " +"ausgeben\n" +" (Vorgabe: 3).\n" +" -u, -U ZAHL, --unified[=ZAHL] ZAHL Zeilen des \"unifizierten\" " +"Kontextes ausgeben\n" +" (Vorgabe: 3).\n" +" --label LABEL LABEL statt Dateiname verwenden.\n" +" -p, --show-c-function Anzeigen, in welcher C-Funktion die " +"Veränderung\n" +" vorkommt.\n" +" -F RE, --show-function-line=RE Die nächste Zeile anzeigen, auf die RE " +"zutrifft." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Nur ausgeben ob die Dateien verschieden sind." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Ein ed-Skript ausgeben." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Ein normales Diff ausgeben." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Ausgabe im Diff-Format von RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y -side-by-side In zwei Spalten ausgeben.\n" +" -W ZAHL --width=ZAHL Maximal ZAHL Zeichen pro Zeile ausgeben(Vorgabe: " +"130).\n" +" --left-column Nur linke Spalte gemeinsamer Zeilen ausgeben.\n" +" ---suppress-common-lines Keine gemeinsamen Zeilen ausgeben." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "-D NAME --ifdef=NAME Datei mit »#ifdef NAME« in die Ausgabe mischen." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT Ähnlich, GTYPE-Eingabe jedoch mit GFMT " +"formatieren." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LFMT Ähnlich, aber alle Eingabe-Zeilen mit LFMT formatieren." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT Ähnlich, LTYPE-Eingabe jedoch mit LFMT formatieren." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE kann »old«, »new« oder »unchanged« sein. GTYPE ist LTYPE oder »changed«." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT kann enthalten:\n" +" %< Zeilen von DATEI1.\n" +" %> Zeilen von DATEI2.\n" +" %= Zeilen, die sowohl zu DATEI1 als auc zu DATEI2 gehören.\n" +" %[-][BREITE][.[PRÄZ]]{doxX}BUCHST Ausgabe nach printf-Regeln für " +"BUCHST.\n" +" Folgende BUCHTSTaben gelten für neue Gruppen, Kleinschreibung für " +"alte:\n" +" F Erste Zeilennummer.\n" +" L Letzte Zeilennummer.\n" +" N Zahl der Zeilen = L-F+1.\n" +" E F-1." + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT kann enthalten:\n" +" %L Inhalt der Zeile.\n" +" %l Inhalt der Zeile, ohne Newline am Ende.\n" +" %[-][BREITE][.[PRÄZ]]{doxX}n Zeilennummer im printf-Stil." + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Sowohl GFMT als auch LFMT können folgendes enthalten:\n" +" %% %\n" +" %c'C' das einzelne Zeichen C\n" +" %c'\\000' das Zeichen mit dem Oktalcode 000" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Ausgabe an »pr« zum Seitenumbruch übergeben." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t -expand-tabs Tabulatoren zu Leerzeichen in der Ausgabe ausdehnen." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Einrückungen durch vorangestellte Tabulatoren erzeugen." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=ZAHL Tabulatorstopps sind alle ZAHL Spalten (Vorgabe: 8)." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Rekursiv alle Unterverzeichnisse vergleichen." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Fehlende Dateien als leer betrachten." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Die ersten fehlenden Dateien als leer betrachten." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Meldung, wenn zwei Dateien gleich sind." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "" +"-x MUSTER --exclude=MUSTER Dateien, die auf MUSTER passen, ausschließen." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X DATEI --exclude-from=DATEI Dateien überspringen, die auf eines der " +"Muster in DATEI passen." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S DATEI --starting-file=DATEI Beim Verzeichnisvergleich mit DATEI " +"beginnen." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=DATEI1 DATEI1 mit allen Operanden vergleichen.\n" +" DATEI1 kann ein Verzeichnis sein." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=DATEI2 Alle Operanden mit DATEI2 vergleichen.\n" +" DATEI2 kann ein Verzeichnis sein." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=ZAHL Behalte ZAHL Zeilen mit gemeinsamen Pre- und Suffix." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "" +"-d --minimal Aufwendig nach einem kleineren Satz von Änderungen suchen." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Es werden große Dateien und viele Änderungen vermutet." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"DATEIEN sind 'DATEI1 DATEI2' oder 'VERZ1 VERZ2' oder \"VERZ DATEI...\" \n" +"oder \"DATEI... VERZ;" + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Wenn --from-file oder --to-file angegeben werden, gibt es keine \n" +"Einschränkungen für DATEIEN." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Wenn DATEI »-« ist, von der Standardeingabe lesen." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Aufruf: %s [OPTION]... DATEIEN\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "Widersprüchlicher Optionswert %s für »%s«." + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "Widersprüchliche Optionenen für den Ausgabestil." + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Nur in %s: %s.\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "»-« kann nicht mit Verzeichnis verglichen werden." + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "Option -D nicht unterstützt bei Verzeichnissen" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Gemeinsame Unterverzeichnisse: %s und %s.\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Datei %s ist ein %s während Datei %s ein %s ist.\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Dateien %s und %s sind identisch.\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +#, fuzzy +msgid "Randy Smith" +msgstr "Geschrieben von Randy Smith." + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "Inkompatible Optionen." + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "»-« für mehr als eine Eingabedatei angegeben." + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "Lesefehler." + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Nicht in DEINEDATEI übernommene Änderungen aus ALTEDATEI in " +"MEINEDATEI abspeichern." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Ungemische Änderungen anzeigen, Konflikte in Klammern." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Alle Änderungen ausgeben, Konflikte in Klammern." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Überlappende Änderungen ausgeben." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Überlappende Änderungen geklammert ausgeben." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "" +"-3, --easy-only Nicht-zusammengeführte (`unmerged') nichtüberlappende " +"Änderungen ausgeben." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Zusammengeführte Datei anstelle von ed-Skript ausgeben (Vorgabe " +"-A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L LABEL --label=LABEL LABEL anstelle des Dateinamens verwenden." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i An ed-Skripte »w«- und »q«-Kommandos anhängen." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" +"--diff-program=PROGRAMM PROGRAMM zum Vergleichen von Dateien verwenden." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Benutzung: %s [OPTION]... MEINEDATEI ALTEDATEI DEINEDATEI\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Drei Dateien Zeile für Zeile vergleichen." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "Interner Fehler: Format für diff-Blöcke ist durcheinander." + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: »diff« ist gescheitert: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "Interner Fehler: Ungültiger diff-Typ in process_diff." + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "Ungültiges Diff-Format; ungültiger Änderungstrenner." + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "Ungültiges Diff-Format; felende letzte Zeile." + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, fuzzy, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "Unterprogramm »%s« nicht gefunden." + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "Ungültiges Diff-Format; inkorrektes Zeichen in führender Zeile" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "Interner Fehler: Ungültiger diff-Typ an Ausgabe übergeben." + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "Eingabedatei schrumpfte." + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "Die Dateinamen »%s« und »%s« können nicht verglichen werden." + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +#, fuzzy +msgid "Thomas Lord" +msgstr "Geschrieben von Thomas Lord." + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o DATEI --output=DATEI Interaktiv arbeiten, Ausgabe in DATEI speichern." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "" +"-i --ignore-case Nicht zwischen Groß- und Kleinschreibung unterscheiden." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W -ignore-all-space Leerraum ignorieren." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w ZAHL --width=ZAHL Maximal ZAHL Druckspalten pro Zeile (Vorgabe: 130)." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Nur linke Spalte der gemeinsamen Zeilen ausgeben." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Keine gemeinsamen Zeilen ausgeben." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Es werden große Dateien und viele Änderungen " +"vermutet." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Aufruf: %s [OPTION]... DATEI1 DATEI2\n" + +# XXX Was ist das? +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "" +"Nebeneinanderstehenden Zusammenbringen (side-by-side merge) der " +"Dateiunterschiede." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "Kann nicht die Standardeingabe interaktiv mischen." + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "Beide zu vergleichenden Dateien sind Verzeichnisse." + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\\tEdieren, dann beide Versionen benutzen, jede mit einem Kopf " +"dekoriert.\n" +"eb:\\tEdieren, dann beide Versionen benutzen.\n" +"el:\\tEdieren, dann linke Version benutzen.\n" +"er:\\tEdieren, dann rechte Version benutzen.\n" +"e:\\t Neue Version edieren.\n" +"l:\\tLinke Version benutzen.\n" +"r:\\tRechte Version benutzen.\n" +"s:\\tSchweigend gemeinsame Zeilen übernehmen.\n" +"v:\\tLauthals gemeinsame Zeilen übernehmen.\n" +"q:\\tBeenden.\n" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the file named COPYING." +#~ msgstr "" +#~ "Dieses Programm wird ohne Gewährleistung geliefert, soweit dies\n" +#~ "gesetzlich zulässig ist. Sie können es unter den Bedingungen der GNU\n" +#~ "General Public License weitergeben. \n" +#~ "Details dazu enthält die Datei COPYING." + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: ungültige Option -- %c.\n" + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr "Geschrieben von Torbjorn Granlund und David MacKenzie." + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Fehlerberichte bitte an <bug-gnu-utils@gnu.org>." + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ "Geschrieben von Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman und Len Tower." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "Die Option »-%ld« ist veraltet; verwenden Sie »-%c %ld«." + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "Die Option »-%ld« ist veraltet; lassen Sie sie weg." + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "Unterprogramm »%s« schlug fehl." + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "Unterprogramm »%s« ist nicht ausführbar." diff --git a/po/diffutils.pot b/po/diffutils.pot new file mode 100644 index 0000000..644d964 --- /dev/null +++ b/po/diffutils.pot @@ -0,0 +1,1088 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: GNU diffutils 3.0\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\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" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, c-format +msgid "%s: option '-W %s' requires an argument\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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +msgid "unknown stream" +msgstr "" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, c-format +msgid "invalid %s%s argument `%s'" +msgstr "" + +#: lib/xstrtol-error.c:68 +#, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "" + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "" + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "" + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "" + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "" + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "" + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "" + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "" + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "" + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "" + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "" + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "" + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "" + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "" + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "" + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "" + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "" + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "" + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "" + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "" + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "" + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "" + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "" + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "" + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "" + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "" + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "" + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "" + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "" + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "" + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "" + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "" + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "" + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "" + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "" + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "" + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "" + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "" + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "" + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "" + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "" + +#: src/sdiff.c:868 +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" diff --git a/po/el.gmo b/po/el.gmo new file mode 100644 index 0000000000000000000000000000000000000000..f4a7dcad3b2e60955b9ca416f503423ca7c9b387 GIT binary patch literal 29085 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 literal 0 HcmV?d00001 diff --git a/po/el.po b/po/el.po new file mode 100644 index 0000000..1793262 --- /dev/null +++ b/po/el.po @@ -0,0 +1,1245 @@ +# translation of diffutils-2.8.7.po to Greek +# Copyright (C) 2004 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils-2.8.7 package. +# Lefteris Dimitroulakis <edimitro@tee.gr>, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils-2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2004-12-28 15:50+0000\n" +"Last-Translator: Lefteris Dimitroulakis <edimitro@tee.gr>\n" +"Language-Team: Greek <nls@tux.hellug.gr>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.3.1\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "σφάλμα προγράμματος" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "υπερχείλιση στοίβας" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Άγνωστο σφάλμα συστήματος" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "τυπικό κενό αρχείο" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "τυπικό αρχείο" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "κατάλογος" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "ειδικό αρχείο μπλοκ" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "ειδικό αρχείο χαρακτήρων" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "συμβολικός σύνδεσμος" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "socket" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "ουρά μηνύματος" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "σηματοφορέας" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "αντικείμενο κοινόχρηστης μνήμης" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "typed memory object" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "αλλόκοτο αρχείο" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: η επιλογή «%s» είναι ασαφής\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: η επιλογή «--%s» δεν επιτρέπει όρισμα\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: η επιλογή «%c%s» δεν επιτρέπει όρισμα\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: η επιλογή «%s» απαιτεί όρισμα\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: η επιλογή «--%s» δεν αναγνωρίζεται\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: η επιλογή «%c%s» δεν αναγνωρίζεται\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: η επιλογή -- %c είναι άκυρη\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: η επιλογή απαιτεί όρισμα -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: η επιλογή «-W %s» είναι ασαφής\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: η επιλογή «-W %s» δεν επιτρέπει όρισμα\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: η επιλογή «%s» απαιτεί όρισμα\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Επιτυχία" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Δεν υπάρχει ταίριασμα" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Άκυρη κανονική έκφραση" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Άκυρος χαρακτήρας διαταξινόμησης" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Άκυρο όνομα κλάσεως χαρακτήρων" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Αντιπλαγία στο τέλος" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Άκυρη πίσω παραπομπή" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Δε βρέθηκε [ ή [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Δε βρέθηκε ( ή \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Δε βρέθηκε \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Το περιεχόμενο του \\{\\} είναι άκυρο" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Άκυρο πέρας διαστήματος" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Η μνήμη εξαντλήθηκε" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Η προηγούμενη κανονική έκφραση είναι άκυρη" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Πρόωρο τέλος κανονικής έκφρασης" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Πολύ μεγάλη κανονική έκφραση" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Δε βρέθηκε ) ή \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Δεν προηγήθηκε κανονική έκφραση" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "η μνήμη εξαντλήθηκε" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Άγνωστο σφάλμα συστήματος" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "άκυρη τιμή «%s» για την επιλογή --bytes " + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "άκυρο μήκος ορίζοντα «%s»" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Γράφτηκε από %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Γράφτηκε από %s και %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Γράφτηκε από %s, %s,και %s.\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 "" +"Γράφτηκε από τους %s, %s, %s,\n" +"και %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Γράφτηκε από τους %s, %s, %s,\n" +"%s, και %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Γράφτηκε από τους %s, %s, %s,\n" +"%s, %s, και %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Γράφτηκε από τους %s, %s, %s,\n" +"%s, %s, %s, και %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Γράφτηκε από τους %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"και %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Γράφτηκε από τους %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, και %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Γράφτηκε από τους %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, και άλλους.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Τα αρχεία %s και %s διαφέρουν\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Τα αρχεία %s και %s διαφέρουν\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Δεν υπάρχει χαρακτήρας νέας γραμμής στο τέλος του αρχείου" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Δοκιμάστε `%s --help' για περισσότερες πληροφορίες." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "άκυρη τιμή --ignore-initial `%s'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "οι επιλογές -l και -s είναι ασύμβατες" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "η εγγραφή απέτυχε" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "κανονική έξοδος" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Εμφανίζει ψηφιολέξεις που διαφέρουν." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i SKIP --ignore-initial=SKIP Παράβλεψη των πρώτων SKIP ψηφιολέξεων της " +"εισόδου." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +"Παράβλεψη των πρώτων SKIP1 ψηφιολέξεων του ΑΡΧΕΙΟ1 και των πρώτων SKIP2 " +"ψηφιολέξεων του ΑΡΧΕΙΟ2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose Έξοδος αριθμού και τιμής όλων των bytes που διαφέρουν." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n ΟΡΙΟ --bytes=ΟΡΙΟ Σύγκριση αριθμού bytes ανά ΟΡΙΟ." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent Ουδεμία έξοδος, μόνο μήνυμα πέρατος εκτέλεσης." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Έξοδος ονόματος κι έκδοσης." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Έξοδος αυτής εδώ της βοήθειας." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Χρήση: %s [ΕΠΙΛΟΓΗ]... ΑΡΧΕΙΟ1 [ΑΡΧΕΙΟ2 [SKIP1 [SKIP2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Σύγκριση δύο αρχείων byte προς byte." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "SKIP1 και SKIP2 είναι ο αριθμός των byte προς παράλειψη ανά αρχείο." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Οι τιμές SKIP μπορούν ν' ακολουθούνται\n" +"από τα παρακάτω πολαπλασιαστικά επιθέματα :\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, κτλ γιά T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Αν ένα ΑΡΧΕΙΟ είναι `-' ή απών, τότε ανάγνωση από την κανονική είσοδο." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"Η έξοδος είναι 0 αν τα δεδομένα αρχεία είναι ίδια, 1 αν είναι διαφορετικά,\n" +"2 αν υπάρχει πρόβλημα." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "άκυρη τιμή «%s» για την επιλογή --bytes " + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "απών τελεστέος μετά από «%s»" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "συμπληρωματικός τελεστέος «%s»" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s διαφέρουν: byte %s, γραμμή %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s διαφέρουν: byte %s, γραμμή %s είναι %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: Τέλος-Αρχείου (EOF) σε %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "άκυρο μήκος συμφραζομένων «%s»" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "Η αρίθμιση σελίδων δεν υποστηρίζεται σ' αυτόν τον υπολογιστή" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "πάρα πολλές επιλογές ετικέτας αρχείου" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "άκυρο πλάτος «%s»" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "αντικρουόμενες επιλογές πλάτους" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "άκυρο μήκος ορίζοντα «%s»" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "άκυρο μήκος στηλοθέτησης `%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "αντικρουόμενες επιλογές μήκους στηλοθέτησης" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "--from-file και --to-file έχουν οριστεί μαζί" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Σύγκριση αρχείων γραμμή προς γραμμή." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" +"-i --ignore-case Αγνοεί τις διαφορές λόγω πεζών-κεφαλαίων\n" +"στα περιεχόμενα αρχείων." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Αγνοεί τις διαφορές λόγω πεζών-κεφαλαίων\n" +" κατά τη σύγκριση ονομάτων αρχείων." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Λαμβάνει υπ' όψιν τις διαφορές λόγω\n" +" πεζών-κεφαλαίων κατά τη σύγκριση ονομάτων αρχείων." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Αγνοεί αλλαγές οφειλόμενες στη στηλοθέτηση." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "" +"-b --ignore-space-change Αγνοεί αλλαγές οφειλόμενες στα λευκά διαστήματα." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Αγνοεί όλα τα λευκά διαστήματα." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B --ignore-blank-lines Αγνοεί αλλαγές οφειλόμενες στις λευκές γραμμές." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RE --ignore-matching-lines=RE Αγνοεί αλλαγές που οι γραμμές τους " +"ταιριάζουν με RE." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Απαλειφή του χαρακτήρα επιστροφής στην είσοδο." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Ανάγνωση και εγγραφή πληροφορίας σε δυαδική μορφή." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Θεωρεί όλα τα αρχεία ως κείμενο." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C ΑΡ --context[=ΑΡ] Έξοδος ΑΡ (προεπιλογή 3) γραμμών\n" +" συμφραζομένων.\n" +"-u -U ΑΡ --unified[=ΑΡ] Έξοδος ΑΡ (προεπιλογή 3) γραμμών\n" +" ενοποιημένων συμφραζομένων.\n" +" --label LABEL Χρήση LABEL αντί όνοματος αρχείου.\n" +" -p --show-c-function Δείχνει τη συνάρτηση της C\n" +" που περιέχει κάθε διαφορά.\n" +"-F RE --show-function-line=RE Δείχνει την πιο πρόσφατη γραμμή\n" +" που ταιριάζει με τη RE." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Έξοδος μόνο όταν τα αρχεία διαφέρουν." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Δημιουργία προγράμματος εντολών για τον `ed'." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Δημιουργία ενός `diff' σε κανονική μορφή." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Δημιουργία αρχείου `diff' σε μορφή RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Έξοδος σε δύο στήλες.\n" +" -W ΑΡ --width=ΑΡ Έξοδος με ΑΡ το πολύ χαρακτήρες ανά γραμμή (προεπιλογή " +"130).\n" +" --left-column Έξοδος μόνο αριστερής στήλης με τις ταυτόσημες γραμμές.\n" +" --suppress-common-lines Δεν εμφανίζει τις ταυτόσημες γραμμές." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D ΟΝΟΜΑ --ifdef=ΟΝΟΜΑ Έξοδος συγχωνευμένου αρχείου\n" +"με τις διαφορές `#ifdef NAME'." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT Αντίστοιχο, αλλά μορφοποίηση ομάδων\n" +" εισόδου GTYPE με GFMT." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LFMT Αντίστοιχο, αλλά μορφοποίηση\n" +"όλων των γραμμών εισόδου με LFMT." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT Αντίστοιχο, αλλά μορφοποίηση \n" +"γραμμών εισόδου LTYPE με LFMT." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE είναι `old', `new', ή `unchanged'. GTYPE είναι LTYPE ή `changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +"GFMT μπορεί να περιέχει:\n" +" %< για να δηλώνει γραμμές από το ΑΡΧΕΙΟ1\n" +" %> για να δηλώνει γραμμές από το ΑΡΧΕΙΟ2\n" +" %= για να δηλώνει ταυτόσημες γραμμές μεταξύ των ΑΡΧΕΙΟ1 και ΑΡΧΕΙΟ2\n" +" %[-][ΠΛΑΤΟΣ][.[PREC]]{doxX}ΓΡΑΜΜΑ, προδιαγραφές του ΓΡΑΜΜΑτος\n" +" στο στύλ της printf(), ως ακολούθως γιά τη νέα ομάδα\n" +" ενώ με πεζά για τη παλαιά ομάδα:\n" +" F αριθμός πρώτης γραμμής\n" +" L αριθμός τελευταίας γραμμής\n" +" N αριθμός γραμμών = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT μπορεί να περιέχει:\n" +" %L για το περιεχόμενο της γραμμής\n" +" %l για το περιεχόμενο της γραμμής χωρίς το τέλος γραμμής\n" +" %[-][ΠΛΑΤΟΣ][.[PREC]]{doxX}n την προδιαγραφή του αριθμού γραμμής\n" +" εισόδου ανάλογα με τη μορφή της printf()" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +"GFMT ή LFMT μπορούν να περιέχουν:\n" +" %% %\n" +" %c'C' τον ίδιο το χαρακτήρα C\n" +" %c'\\OOO' το χαρακτήρα με οκταδικό κωδικό OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "" +"-l --paginate Έξοδος δια μέσου του `pr' ώστε να αριθμιθούν οι σελίδες." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Μετατροπή στηλοθετών σε διαστήματα στην έξοδο." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Στοίχιση των στηλοθετών με την επιπρόσθεση ενός στην αρχή." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=ΑΡ Ο αριθμός διαστημάτων του στηλοθέτη είναι ΑΡ (προεπιλογή 8)." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Αναδρομική σύγκριση όσων υποκαταλόγων βρεθούν." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Θεωρεί τα απόντα αρχεία ως κενά." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "--unidirectional-new-file Θεωρεί τα απόντα πρώτα αρχεία ως κενά." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Ειδοποιεί όταν δύο αρχεία είναι ίδια." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x PAT --exclude=PAT Εξαίρεση αρχείων με όνομα που ταιριάζει με PAT." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X ΑΡΧΕΙΟ --exclude-from=ΑΡΧΕΙΟ Εξαίρεση αρχείων με όνομα που ταιράζει\n" +" με τα ονόματα που βρίσκονται στο ΑΡΧΕΙΟ." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S ΑΡΧΕΙΟ --starting-file=ΑΡΧΕΙΟ Εκκίνηση σύγκρισης καταλόγων από το " +"ΑΡΧΕΙΟ." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=ΑΡΧΕΙΟ1\n" +" Σύγκριση ΑΡΧΕΙΟ1 με όλους τους τελεστέους.\n" +" ΑΡΧΕΙΟ1 μπορεί να είναι κατάλογος." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=ΑΡΧΕΙΟ2\n" +" Σύγκριση όλων των τελεστέων στο ΑΡΧΕΙΟ2.\n" +" ΑΡΧΕΙΟ2 μπορεί να είναι κατάλογος." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=ΑΡ Διατηρεί ΑΡ γραμμές με ταυτόσημα προθέματα κι επιθέματα." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "" +"-d --minimal Αν είναι δυνατόν εμφάνιση του μικρότερου συνόλου διαφορών." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Υποθέτει μεγάλα αρχεία και πολλές σκόρπιες μικροαλλαγές." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"ΑΡΧΕΙΑ είναι `ΑΡΧΕΙΟ1 ΑΡΧΕΙΟ2' ή `ΚΑΤ1 ΚΑΤ2' ή `ΚΑΤ ΑΡΧΕΙΟ...' ή `ΑΡΧΕΙΟ... " +"ΚΑΤ'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Αν το --from-file ή --to-file είναι δεδομένο, τότε δεν υπάρχει περιορισμός " +"στα ΑΡΧΕΙΑ." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Αν ένα ΑΡΧΕΙΟ είναι `-', τότε ανάγνωση από την τυπική είσοδο." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Χρήση: %s [ΕΠΙΛΟΓΗ]... ΑΡΧΕΙΑ\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "η επιλογή %s είναι αντικρουόμενη με την τιμή «%s»" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "αντικρουόμενες επιλογές για τη μορφή εξόδου" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Μόνο στο %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "Αδύνατη η σύγκριση του `-' με ένα κατάλογο" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "Η επιλογή -D δεν υποστηρίζεται για καταλόγους." + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Οι υποκατάλογοι %s και %s είναι ταυτόσημοι\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Το αρχείο %s είναι %s ενώ το αρχείο %s είναι %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Τα αρχεία %s καί %s είναι πανομοιότυπα\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "ασύμβατες επιλογές" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "`-' ορίστηκε για περισσότερα από ένα αρχεία εισόδου" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "αποτυχία ανάγνωσης" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Έξοδος ασυγχώνευτων αλλαγών από OLDFILE σε YOURFILE στο MYFILE." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "-E --show-overlap Έξοδος ασυγχώνευτων αλλαγών σε αγκύλες." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Έξοδος όλων των αλλαγών σε αγκύλες." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Έξοδος μόνο των αλλαγών που επικαλύπτονται." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Έξοδος των αλλαγών που επικαλύπτονται, σε αγκύλες." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Έξοδος ασυγχώνευτων μη επικαλυπτόμενων αλλαγών." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Έξοδος αρχείου συγχώνευσης αντί σεναρίου εντολών " +"`ed' (προεπιλογή -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L ΕΤΙΚ --label=ΕΤΙΚ Χρήση ΕΤΙΚέτας αντί του ονόματος αρχείου." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Προσάρτηση των διαταγών `w' και `q' στα σενάρια του `ed'." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=ΠΡΟΓΡ Χρήση του ΠΡΟΓΡάμματος στη σύγκριση αρχείων." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Χρήση: %s [ΕΠΙΛΟΓΗ]... MYFILE OLDFILE YOURFILE\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Σύγκριση τριών αρχείων γραμμή προς γραμμή." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "Σε επιτυχία η έξοδος είναι 0, σε σύγκρουση 1 και σε πρόβλημα 2." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "εσωτερικό σφάλμα: μπέρδεμα στις μορφές των μπλοκ `diff'" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: αποτυχία του `diff': " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "εσωτερικό σφάλμα: άκυρος τύπος `diff' στο process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "άκυρη μορφή `diff': άκυρος οριοθέτης αλλαγής" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "άκυρη μορφή `diff': ασυμπλήρωτη τελευταία γραμμή" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "το υποπρόγραμμα «%s» δεν ήταν δυνατόν να κληθεί" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "άκυρη μορφή `diff': λάθος χαρακτήρες στη γραμμή αποτελεσμάτων" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "εσωτερικό σφάλμα: άκυρος τύπος `diff' πέρασε στην έξοδο" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "Το αρχείο εισόδου συρρικνώθηκε" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "αδύνατη η σύγκριση των ονομάτων αρχείων «%s» και «%s»" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o ΑΡΧΕΙΟ --output=ΑΡΧΕΙΟ Αλληλεπιδραστική λειτουργία\n" +" με αποστολή εξόδου στο ΑΡΧΕΙΟ." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Θεωρεί πεζά-κεφαλαία ίδια." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Αγνοεί όλα τα λευκά διαστήματα." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w ΑΡ --width=ΑΡ Έξοδος με το πολύ ΑΡ στήλες εκτύπωσης (προεπιλογή 130)." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "" +"-l --left-column Εμφάνιση στην αριστερή στήλη των ταυτόσημων γραμμών." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Οι ταυτόσημες γραμμές δεν εμφανίζονται." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Υποθέτει μεγάλα αρχεία με πολλές σκόρπιες " +"μικροαλλαγές." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Χρήση: %s [ΕΠΙΛΟΓΗ]... ΑΡΧΕΙΟ1 ΑΡΧΕΙΟ2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Συγχώνευση δίπλα-δίπλα των διαφορών του αρχείου." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "αδυνατώ να συγχωνεύσω αλληλεπιδραστικά την πρότυπη είσοδο." + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "και τα δύο προς σύγκριση αρχεία είναι κατάλογοι" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tΔιόρθωση και μετά χρήση και των δύο παραλλαγών,\n" +"εκάστη διακοσμημένη με επικεφαλίδα.\n" +"eb:\tΔιόρθωση και μετά χρήση και των δύο παραλλαγών.\n" +"el:\tΔιόρθωση και μετά χρήση της αριστερής παραλλαγής.\n" +"er:\tΔιόρθωση και μετά χρήση της δεξιάς παραλλαγής.\n" +"e:\tΔιόρθωση νέας παραλλαγής.\n" +"l:\tΧρήση αριστερής παραλλαγής.\n" +"r:\tΧρήση δεξιάς παραλλαγής.\n" +"s:\tΣυμπεριλαμβάνει τις ταυτόσημες γραμμές σιωπηρά.\n" +"v:\tΣυμπεριλαμβάνει τις ταυτόσημες γραμμές και το επισημαίνει.\n" +"q:\tΈξοδος.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: η επιλογή -- %c είναι παράτυπη\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Αναφέρατε σφάλματα στη <bug-gnu-utils@gnu.org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "η επιλογή «-%ld» έχει καταργηθεί, χρησιμοποιείστε την «-%c %ld»" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "η επιλογή «-%ld» έχει καταργηθεί, παραλείψτε την " + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "Δε βρέθηκε το βοηθητικό πρόγραμμα <%s>" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "Αποτυχία του βοηθητικού προγράμματος «%s»" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "το βοηθητικό πρόγραμμα «%s» διεκόπη (κατάσταση έξοδου %d)" diff --git a/po/en@boldquot.header b/po/en@boldquot.header new file mode 100644 index 0000000..fedb6a0 --- /dev/null +++ b/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/po/en@quot.header b/po/en@quot.header new file mode 100644 index 0000000..a9647fc --- /dev/null +++ b/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/po/eo.gmo b/po/eo.gmo new file mode 100644 index 0000000000000000000000000000000000000000..9bf8d633b72c013e454e322e381e9c2eb1b868a2 GIT binary patch literal 21388 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 literal 0 HcmV?d00001 diff --git a/po/eo.po b/po/eo.po new file mode 100644 index 0000000..b196935 --- /dev/null +++ b/po/eo.po @@ -0,0 +1,1214 @@ +# Esperantaj mesaĝoj por GNU diffutils. +# Copyright (C) 1996 Free Software Foundation, Inc. +# Edmund GRIMLEY EVANS <edmundo@rano.org>, 2001-2004. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2004-05-22 15:31+0100\n" +"Last-Translator: Edmund GRIMLEY EVANS <edmundo@rano.org>\n" +"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "programeraro" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "stako tro granda" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Nekonata sistemeraro" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "normala malplena dosiero" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "normala dosiero" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "dosierujo" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "blokaparatdosiero" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "signoaparatdosiero" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "simbola ligo" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "konektilo" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "mesaĝovico" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semaforo" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "komuna memoro" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "tipita memora objekto" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "stranga dosiero" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: opcio '%s' estas plursenca\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: opcio '--%s' ne permesas argumenton\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: opcio '%c%s' ne permesas argumenton\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s opcio '%s' postulas argumenton\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: nekonata opcio '--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: nekonata opcio '%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: nevalida opcio -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: opcio postulas argumenton -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: opcio '-W %s' estas plursenca\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: opcio '-W %s' ne permesas argumenton\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s opcio '%s' postulas argumenton\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Sukceso" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Nenia trafo" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Nevalida regula esprimo" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Nevalida ordiga signo" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Nevalida nomo de signoklaso" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "'\\' ĉe la fino" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Nevalida retroreferenco" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Neparigita [ aÅ­ [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Neparigita ( aÅ­ \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Neparigita \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Nevalida kunteksto de \\{\\}" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Nevalida fino de gamo" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Memoro elĉerpiĝis" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Nevalida antaÅ­a regula esprimo" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Neatendita fino de regula esprimo" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Regula esprimo estas tro granda" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Neparigita ) aÅ­ \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Mankas antaÅ­a regula esprimo" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "memoro elĉerpiĝis" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Nekonata sistemeraro" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "nevalida valoro '%s' de --bytes" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "nevalida horizonta longo '%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Verkita de %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Verkita de %s kaj %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Verkita de %s, %s, kaj %s.\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 "" +"Verkita de %s, %s, %s,\n" +"kaj %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Verkita de %s, %s, %s,\n" +"%s, kaj %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Verkita de %s, %s, %s,\n" +"%s, %s, kaj %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Verkita de %s, %s, %s,\n" +"%s, %s, %s, kaj %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Verkita de %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"kaj %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Verkita de %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, kaj %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Verkita de %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, kaj aliaj.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Dosieroj %s kaj %s estas malsamaj\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Dosieroj %s kaj %s estas malsamaj\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Mankas linifino ĉe fino de dosiero" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Provu '%s --help' por pli da informoj." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "nevalida valoro '%s' de --ignore-initial" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "opcioj -l kaj -s malkongruas" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "skriberaro" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "normala eligo" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Eligi diferencajn bitokojn." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i N --ignore-initial=N Ignori la unuajn N bitokojn de la enigo." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i N1:N2 --ignore-initial=N1:N2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Ignori la unuajn N1 bitokojn de DOSIERO1 kaj la unuajn N2 bitokojn de " +"DOSIERO2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose Eligi indeksojn kaj kodojn de ĉiuj diferencaj bitokoj." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LIMO --bytes=LIMO Kompari maksimume LIMO bitokojn." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent Eligi nenion; doni nur elig-valoron." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Eligi informojn pri la versio." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Montri ĉi tiun helpon." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Uzado: %s [OPCIO]... DOSIERO1 [DOSIERO2 [N1 [N2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Kompari du dosierojn bitokon post bitoko." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "N1 kaj N2 estas la nombro de bitokoj ignorendaj en ĉiu dosiero." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Valoroj povas esti sekvataj de la sekvaj multobligaj sufiksoj:\n" +"kB 1000, K 1024, MB 1 000 000, M 1 048 576,\n" +"GB 1 000 000 000, G 1 073 741 824, kaj tiel plu por T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Se DOSIERO estas '-' aÅ­ mankas, legi la normalan enigon." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"Elig-valoro estas 0, se enigoj estas samaj, 1, se malsamaj, 2 se problemo." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "nevalida valoro '%s' de --bytes" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "argumento mankas post '%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "kroma argumento '%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s malsamaj: bitoko %s, linio %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s malsamaj: bitoko %s, linio %s estas %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF ĉe %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "nevalida longo '%s' de kunteksto" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "dispaĝigo ne eblas kun ĉi tiu sistemo" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "tro da dosieretikedopcioj" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "nevalida larĝo '%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "malkongruaj opcioj pri larĝo" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "nevalida horizonta longo '%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "nevalida TAB-larĝo '%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "malkongruaj opcioj pri TAB-larĝo" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "--from-file kaj --to-file ambaÅ­ specifitaj" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Kompari dosierojn linion post linio." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case Ignori diferencojn en uskleco en dosierenhavo." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "--ignore-file-name-case Ignori usklecon en komparado de dosiernomoj." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Konsideri usklecon en komparado de dosiernomoj." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "-E --ignore-tab-expansion Ignori ŝanĝojn kaÅ­zatajn de TAB-oj." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Ignori ŝanĝojn en blanka spaco." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Ignori ĉian blankan spacon." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines Ignori ŝanĝojn, kies linioj estas malplenaj." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RE --ignore-matching-lines=RE Ignori ŝanĝojn, kies linioj ĉiuj kongruas " +"kun RE." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Forigi linifinan CR ĉe enigo." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Legi kaj skribi datenojn binare." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Trakti ĉiujn dosierojn kiel tekstajn." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C NOM --context[=NOM] Eligi NOM (implicite 3) liniojn da kopiita " +"kunteksto.\n" +"-u -U NOM --unified[=NOM] Eligi NOM (implicite 3) liniojn da unuigita " +"kunteksto.\n" +" --label ETIK Uzi ETIKedon anstataÅ­ dosiernomo.\n" +" -p --show-c-function Montri, en kiu C-funkcio estas ĉiu ŝanĝo.\n" +" -F RE -show-function-line=RE Montri la plej lastan linion, kiu kongruas " +"kun RE." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Eligi nur, ĉu la dosieroj estas malsamaj." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Eligi ed-programeton." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Eligi normalan diferencaron." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Eligi diferencaron en RCS-formo." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Eligi en du kolumnoj.\n" +" -W NOM --width=NOM Eligi maksimume NOM (implicite 130) signojn en " +"linio.\n" +" --left-column Eligi nur la maldekstran kolumnon de komunaj linioj.\n" +" --suppress-common-lines Ne eligi komunajn liniojn." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NOMO --ifdef=NOMO Eligi kunfanditan dosieron por montri '#ifdef NOMO'-" +"diferencojn." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT Simile, sed montri GTYPE-enig-grupojn per GFMT." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "--line-format=LFMT Simile, sed montri ĉiujn enigliniojn per LFMT." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT Simile, sed montri LTYPE-enig-grupojn per LFMT." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE estas 'old', 'new' aÅ­ 'unchanged'. GTYPE estas LTYPE aÅ­ 'changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT povas enhavi:\n" +" %< linioj el DOSIERO1\n" +" %> linioj el DOSIERO2\n" +" %= linioj komunaj al DOSIERO1 kaj DOSIERO2\n" +" %[-][LARĜO][.[PREC]]{doxX}LITERO printf-stila specifo por LITERO\n" +" LITEROJ estas jenaj por nova grupo, minuskle por malnova grupo:\n" +" F unua lininumero\n" +" L lasta lininumero\n" +" N nombro de linioj = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT povas enhavi:\n" +" %L enhavo de linio\n" +" %l enhavo linio, sen eventuala linifino\n" +" %[-][LARĜO][.[PREC]]{doxX}n printf-stila specifo de lininumero" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Kaj GFMT kaj LFMT povas enhavi:\n" +" %% %\n" +" %c'C' la unuopa signo C\n" +" %c'\\000' la signo kun okuma kodo OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Pasigi la eligon tra 'pr' por enpaĝigi ĝin." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Konverti TABojn al spacetoj en la eligo." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "-T --initial-tab Ĝustigi TABojn per antaÅ­metado de spaceto." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=NOM TAB-lokoj estas post ĉiuj NOM (implicite 8) kolumnoj." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Rekurse kompari trovitajn subdosierujojn." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Trakti mankantajn dosierojn kiel malplenajn." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Trakti mankantajn unuajn dosierojn kiel " +"malplenajn." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Raporti, kiam du dosieroj estas samaj." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x ŜAB --exclude=ŜAB Ignori dosierojn, kiuj kongruas kun ŜABlono." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X DOS --exclude-from=DOS Ignori dosierojn, kiuj kongruas kun iu ŝablono " +"en DOSiero." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S DOS --starting-file=DOS Komenci per DOSiero, komparante dosierujojn." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=DOS1 Kompari DOS1 kun ĉiuj argumentoj. DOS1 povas esti " +"dosierujo." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=DOS2 Kompari ĉiujn argumentoj kun DOS2. DOS2 povas esti " +"dosierujo." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=NOM Gardi NOM liniojn de la komuna prefikso kaj sufikso." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Pene serĉi malpli grandan aron da ŝanĝoj." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Atendi grandajn dosierojn kaj multajn disajn ŝanĝetojn." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"DOSIEROJ estas 'DOSIERO1 DOSIERO2' aÅ­ 'DOSIERUJO1 DOSIERUJO2' aÅ­ DOSIERUJO " +"DOSIERO...' aÅ­ 'DOSIERO... DOSIERUJO'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Se --from-file aÅ­ --to-file estas donita, ne estas limigoj de DOSIEROJ." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Se DOSIERO estas '-', legi la normalan enigon." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Uzado: %s [OPCIO]... DOSIEROJ\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "malkongrua valoro de opcio %s: '%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "malkongruaj opcioj pri eligostilo" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Nur en %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "ne povas kompari '-' kun dosierujo" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "opcio -D ne eblas kun dosierujoj" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Komunaj subdosierujoj: %s kaj %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Dosiero %s estas %s, dum dosiero %s estas %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Dosieroj %s kaj %s estas samaj\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "malkongruaj opcioj" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "'-' donita por pli ol unu enigdosiero" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "legeraro" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Eligi nekunfanditajn ŝanĝojn de OLDFILE al YOURFILE en MYFILE." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Eligi nekunfanditajn ŝanĝojn, kun konfliktoj en " +"parentezoj." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Eligi ĉiujn ŝanĝojn, kun konfliktoj en parentezoj." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Eligi interkovriĝantajn ŝanĝojn." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Eligi interkovriĝantajn ŝanĝojn, en parentezoj." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Eligi nekunfanditajn neinterkovriĝantajn ŝanĝojn." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Eligi kunfanditan dosieron anstataÅ­ ed-programeto (implicite -" +"A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L ETIK --label=ETIK Uzi ETIKedon anstataÅ­ la dosiernomo." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Aldoni la komandojn 'w' kaj 'q' al ed-programetoj." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAMO Uzi PROGRAMOn por kompari dosierojn." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Uzado: %s [OPCIO]... MYFILE OLDFILE YOURFILE\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Kompari tri dosierojn linion post linio." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "Elig-valoro estas 0 por sukceso, 1 por konfliktoj, 2 por problemo." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "interna eraro: fuŝo en formato de diff-blokoj" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff malsukcesis: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "interna eraro: nevalida diff-speco en process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "nevalida diff-formato; nevalida ŝanĝ-apartigilo" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "nevalida diff-formato; malkompleta lasta linio" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "ne povis alvoki la subprogramon '%s'" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "nevalida diff-formato; malĝusta signo en antaÅ­a linio" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "interna eraro: nevalida diff-speco donita al eligo" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "enigdosiero ŝrumpis" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "ne povas kompari dosiernomojn '%s' kaj '%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "-o DOS --output=DOS Funkcii interage, sendante eligon al DOSiero." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Trakti majusklojn kaj minusklojn kiel samajn." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Ignori ĉian blankan spacon." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "-w NOM --width=NOM Eligi maksimume NOM (implicite 130) kolumnojn." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "" +"-l --left-column Montri nur la maldekstran kolumnon de komunaj linioj." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Ne eligi komunajn liniojn." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Atendi grandajn dosierojn kaj multajn disajn " +"ŝanĝetojn." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Uzado: %s [OPCIO]... DOSIERO1 DOSIERO2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Ĉeflanka kunfando de dosierodiferencoj." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "ne povas interage kunfandi la normalan enigon" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "ambaÅ­ komparendaj dosieroj estas dosierujoj" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tredakti kaj uzi ambaÅ­ versiojn, ĉiu kun ĉapaĵo\n" +"eb:\tredakti kaj uzi ambaÅ­ versiojn\n" +"el:\tredakti kaj uzi maldekstran version\n" +"er:\tredakti kaj uzi dekstran version\n" +"e:\tredakti novan version\n" +"l:\tuzi maldekstran version\n" +"r:\tuzi dekstran version\n" +"s:\tsilente transpreni komunajn liniojn\n" +"v:\tlaÅ­te transpreni komunajn liniojn\n" +"q:\tfini\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: nepermesita opcio -- %c.\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Ĉi tio estas libera programo; vidu la fonton por kopi-kondiĉoj. Estas\n" +#~ "NENIA GARANTIO; eĉ ne por KOMERCA KVALITO aÅ­ ADEKVATECO POR DIFINITA " +#~ "CELO.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Raportu pri cimoj al <bug-gnu-utils@gnu.org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "opcio '-%ld' estas malnova; uzu '-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "opcio '-%ld' estas malnova; ellasu ĝin" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "subprogramo '%s' ne trovita" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "subprogramo '%s' malsukcesis" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "subprogramo '%s' malsukcesis (elig-valoro %d)" diff --git a/po/es.gmo b/po/es.gmo new file mode 100644 index 0000000000000000000000000000000000000000..cd288da0aa03d088da459d110047e978c29f1847 GIT binary patch literal 27830 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 literal 0 HcmV?d00001 diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..67296c9 --- /dev/null +++ b/po/es.po @@ -0,0 +1,1472 @@ +# Mensajes en español para GNU diffutils. +# Copyright (C) 1996, 2001, 2002, 2004, 2009 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils package. +# Iñaky Pérez González <inaky@peloncho.fis.ucm.es>, 1996. +# Santiago Vila Doncel <sanvila@unex.es>, 2001, 2002, 2004, 2009, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU diffutils 2.9\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2010-02-13 16:20+0100\n" +"Last-Translator: Santiago Vila Doncel <sanvila@unex.es>\n" +"Language-Team: Spanish <es@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "error del programa" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "desbordamiento de pila" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Error del sistema desconocido" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "fichero regular vacío" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "fichero regular" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "directorio" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "fichero especial de bloques" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "fichero especial de caracteres" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "`fifo'" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "enlace simbólico" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "`socket'" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "cola de mensajes" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semáforo" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "objeto de memoria compartido" + +# ¿Alguien sabe lo que es esto? +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "objeto de memoria `typed'" + +# FIXME +# se podría decir algo más decente para "weird" ... pero ¿qué? +# ¿ no habitual ? em +# ¡Nchts! Prefiero extraño ... no habitual me suena muy difuso +# siempre podemos poner escachifollado ;) ipg +#: lib/file-type.c:70 +msgid "weird file" +msgstr "fichero extraño" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: la opción '%s' es ambigua\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: la opción '--%s' no admite ningún argumento\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: la opción '%c%s' no admite ningún argumento\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: la opción '%s' requiere un argumento\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opción no reconocida '--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opción no reconocida '%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opción inválida -- '%c'\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: la opción requiere un argumento -- '%c'\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: la opción '-W %s' es ambigua\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: la opción '-W %s' no admite ningún argumento\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: la opción '%s' requiere un argumento\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "«" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "»" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Conseguido" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "No hay ninguna coincidencia" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Expresión regular inválida" + +# Se refiere probablemente a cosas tales como que la c con la h es "ch", +# aunque este ejemplo ya no es válido, pues la Real Academia dice +# que para propósitos de ordenación son letras independientes. +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Carácter de unión inválido" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Carácter de clase inválido" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Barra invertida al final" + +# FIXME +# Retro-referencia es lo mejor que se me ocurre ... claro, que acepto +# sugerencias ;) +# ¿Referencia hacia atrás? sv +# Me suena a cangrejo ;) ... no se ... a ver que opinan Enrique y el resto de +# la gente ... La verdad es que prefiero Retro-referencia a referencia hacia +# atrás (más que nada es por que es la traducción que se hace, como por +# ejemplo en backfeed -- retroalimentación) IPG +# En glibc.1.10.1 : +# # posix/regex.c:946 +# msgid "Invalid back reference" +# msgstr "Referencia hacia atrás no válida" em +# Si no fuese porque has traducido tu la glibc, te preguntaría quien ha sido +# el asesino que ha puesto eso :) Momento que voy a mirar la enciclopedia +# esa que tenemos decorando la estantería ;) ... ¡¡Ja jaaaa!! :) ¡Palidecerás +# ante esta cita! "Diccionario Enciclopédico Espasa-Calpe". Edición de Dios +# sabe cuando (la décima, creo), volumen 15, página 8846, tercera columna, +# tal que a la mitad: +# +# retrocontrol. (De retro- y control.) m. Biol. Fenómeno de autocontrol por +# el cual la excesiva acumulación de una hormona en la sangre actúa sobre +# la glándula corespondiente e inhibe automáticamente su producción. Se +# utiliza mucho internacionalmente la voz inglesa --feed-back-- para expre- +# sar esta idea. +# +# Y mejor ... para rematar :). Misma página, primera columna, cuarta entrada: +# +# retro-. (del lat. retro, --hacia atrás--) pref. que lleva a lugar o tiempo +# anterior a la significación de las voces simples a que se halla unida: +# retro-traer, retro-vender ... +# +# ¡¡Quiyos!! Hay dos páginas de retro-"algo" ... :) ¡no me digáis después +# de esto que preferís "hacia atrás"! y máxime cuando está aceptado preponer +# retro- para ello :) Si no os importa, y a no ser que venga alguno de la +# RALE y me castre por ello, dejaré retro-referencia. +# ipg +# Un comentario: No serán los de la RALE los que hagan eso, sino los +# que no lo entiendan. Aún después de ver tus acertadas referencias, pienso +# que referencia hacia atrás se puede entender mejor, pero por supuesto, +# no estoy dispuesto a matar por ello... sv +# :) Gracias, pero por ahora dejaré retro-referencia, me parece más clara +# en cuanto al significado preciso de la frase. ipg +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Retro-referencia inválida" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "[ ó [^ desemparejados" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "( ó \\( desemparejado" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "\\{ desemparejado" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "El contenido de \\{\\} no es válido" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Final de rango inválido" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Memoria agotada" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Expresión regular precedente inválida" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Final prematuro de la expresión regular" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "La expresión regular es demasiado grande" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr ") ó \\) desemparejado" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "No hay ninguna expresión regular previa" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "memoria agotada" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "entrada estándar" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "salida estándar" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "salida de error estándar" + +#: lib/xfreopen.c:38 +msgid "unknown stream" +msgstr "flujo desconocido" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "fallo al reabrir %s con modo %s" + +#: lib/xstrtol-error.c:63 +#, c-format +msgid "invalid %s%s argument `%s'" +msgstr "argumento de %s%s inválido `%s'" + +#: lib/xstrtol-error.c:68 +#, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "sufijo inválido en el argumento de %s%s `%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "%s%s argumento '%s' demasiado grande" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "Empaquetado por %s (%s)\n" + +#: lib/version-etc.c:77 +#, c-format +msgid "Packaged by %s\n" +msgstr "Empaquetado por %s\n" + +#. 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:84 +msgid "(C)" +msgstr "©" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" +"\n" +"Licencia GPLv3+: GPL de GNU versión 3 o posterior <http://gnu.org/licenses/" +"gpl.html>.\n" +"Esto es software libre, usted es libre de cambiarlo y redistribuirlo.\n" +"No hay NINGUNA GARANTÍA, hasta donde permite la ley.\n" +"\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Escrito por %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Escrito por %s y %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Escrito por %s, %s, y %s.\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 "" +"Escrito por %s, %s, %s,\n" +"y %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Escrito por %s, %s, %s,\n" +"%s, y %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Escrito por %s, %s, %s,\n" +"%s, %s, y %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Escrito por %s, %s, %s,\n" +"%s, %s, %s, y %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Escrito por %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"y %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Escrito por %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, y %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Escrito por %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, y otros.\n" + +#. 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 "" +"\n" +"Comunicar errores en el programa a: %s\n" +"Comunicar errores de traducción a es@li.org y al último traductor.\n" + +#: lib/version-etc.c:247 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "Comunicar errores de %s a: %s\n" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s página inicial: <%s>\n" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "%s página inicial: <http://www.gnu.org/software/%s/>\n" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Ayuda general sobre el uso de software de GNU: <http://www.gnu.org/gethelp/" +">\n" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Los ficheros %s y %s son distintos\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Los ficheros binarios %s y %s son distintos\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "No hay ningún carácter de nueva línea al final del fichero" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjörn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "David MacKenzie" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Pruebe `%s --help' para más información." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "valor --ignore-initial inválido `%s'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "las opciones -l y -s son incompatibles" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "la escritura falló" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "salida estándar" + +# Muestra como caracteres los bytes que difieran +# queda más claro, creo yo em +# Yo no le veo diferencia (¿será por qué lo parí yo? ;) ipg +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Muestra los bytes que son distintos." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i SALTO --ignore-initial=SALTO Salta los primeros SALTO bytes de\n" +" la entrada." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SALTO1:SALTO2 --ignore-initial=SALTO1:SALTO2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Salta los primeros SALTO1 bytes del FICHERO1 y los primeros SALTO2 bytes\n" +" del FICHERO2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose Muestra los números de byte y valores de todos los bytes que\n" +" difieran." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LÍMITE --bytes=LÍMITE Compara como máximo LÍMITE bytes." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent No muestra nada, sólo da un código de salida." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Informa de la versión y finaliza." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Muestra esta ayuda y finaliza." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Modo de empleo: %s [OPCIÓN]... FICHERO1 [FICHERO2 [SALTO1 [SALTO2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Compara dos ficheros byte por byte." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "SALTO1 y SALTO2 son el número de bytes que se saltan en cada fichero." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Los valores SALTO pueden estar seguidos por los siguientes sufijos\n" +"multiplicadores:\n" +"kB 1.000, K 1.024, MB 1.000.000, M 1.048.576,\n" +"GB 1.000.000.000, G 1.073.741.824, y así en adelante para T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Si un FICHERO es `-' o no se especifica, lee la entrada estándar." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"El estado de salida es 0 si las entradas son iguales, 1 si son diferentes,\n" +"2 en caso de problema." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "valor --bytes inválido `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "falta un operando después de `%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "operando extra `%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s son distintos: byte %s, línea %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s son distintos: el byte %s, en la línea %s es %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: fin de fichero encontrado en %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "Paul Eggert" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "Mike Haertel" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "David Hayes" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "Richard Stallman" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "Len Tower" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "longitud de contexto inválida `%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "este sistema no admite paginación" + +# FIXME +# me sace a mi que esto no se parece ni un ápice a lo que +# se quiere decir en realidad. He mirado los docs y no consigo +# encontrarle un buen significado, así que pido ayuda ;) +# Ni p... idea em +# La opción -L LABEL puedes usarla, una o dos veces, pero no más. A eso +# se refiere. la opción de etiqueta de fichero se ha especificado demasiadas +# veces. O más cortito, dejarlo como está :) em+ +# Me parece que así está bien ... +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "demasiadas opciones de etiqueta de fichero" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "ancho inválido `%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "opciones de ancho conflictivas" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "longitud del horizonte inválida `%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "tamaño de tab inválido `%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "opciones de tamaño de tab conflictivas" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "se ha especificado tanto --from-file como --to-file" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Compara ficheros línea por línea." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" +"-i --ignore-case Descarta las diferencias entre mayúsculas y minúsculas\n" +" en el contenido de los ficheros." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Descarta las diferencias entre mayúsculas y\n" +" minúsculas al comparar los nombres de los ficheros." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Considera distintas mayúsculas y minúsculas\n" +" cuando compara los nombres de los ficheros." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Descarta cambios debidos a expansiones de tabs." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "" +"-b --ignore-space-change Descarta las diferencias en la cantidad de " +"espacios\n" +" en blanco." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Descarta los espacios en blanco." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B --ignore-blank-lines Descarta los cambios cuyas líneas son todas vacías." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I EXPR-REG --ignore-matching-lines=EXPR-REG Descarta las líneas que\n" +" coincidan con EXPR-REG." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "" +"--strip-trailing-cr Elimina los retornos de carro finales en la entrada." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Lee y escribe los datos en modo binario." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Trata todos los ficheros como de tipo texto." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C NÚM --context[=NÚM] Muestra NÚM (3 por omisión) líneas de contexto\n" +"-u -U NÚM --unified[=NÚM] Muestra NÚM (3 por omisión) líneas de contexto\n" +" unificado.\n" +" --label NOMBRE Usa NOMBRE en lugar del nombre de fichero.\n" +" -p --show-c-function Muestra en qué función C se encuentra cada cambio.\n" +" -F EXPR-REG --show-function-line=EXPR-REG Muestra la línea más reciente\n" +" que coincida con EXPR-REG." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Indica sólo si los ficheros son diferentes o no." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Produce un script ed." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Produce un diff normal." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Produce un diff en formato RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Genera salida en dos columnas.\n" +" -W NÚM --width=NÚM Genera como máximo NÚM (130 por omisión) caracteres\n" +" por línea.\n" +" --left-column Muestra sólo la columna izquierda en las líneas comunes.\n" +" --suppress-common-lines No muestra las líneas comunes." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NOMBRE --ifdef=NOMBRE Genera un fichero combinado que muestra las\n" +" diferencias con '#ifdef NOMBRE'" + +# Propongo similar -> parecida. Ver gettext. sv +# Hmmm ... prefiero similar. Antes estaba puesto `parecida' y la verdad, +# no quedaba tan bien. ipg +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT Similar, pero formatea los grupos de entrada " +"GTYPE\n" +" con GFMT." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LFMT Similar, pero formatea todas las líneas de entrada\n" +" con LFMT." + +# ídem. sv +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT Similar, pero formatea las líneas de entrada " +"LTYPE\n" +" con LFMT." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE es `old' (antiguo), `new' (nuevo) o `unchanged' (sin cambios).\n" +" GTYPE es como LTYPE o `changed' (cambiado)." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT puede contener:\n" +" %< líneas del FICHERO1\n" +" %> líneas del FICHERO2\n" +" %= líneas comunes a FICHERO1 y FICHERO2\n" +" %[-][ANCHO][.[PRECISIÓN]]{doxX}LETRA especificación printf para LETRA\n" +" Las LETRAs pueden ser como siguen para grupos nuevos (en minúsculas\n" +" para grupos antiguos):\n" +" F número de la primera línea\n" +" L número de la última línea\n" +" N número de líneas = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT puede contener:\n" +" %L contenido de la línea\n" +" %l contenido de la línea, excluyendo caracteres de nueva línea finales\n" +" %[-][ANCHO][.[PRECISIÓN]]{doxX}n especificación en estilo printf para " +"el\n" +" número de línea de entrada" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Tanto GFMT como LFMT pueden contener:\n" +" %% %\n" +" %c'C' el carácter C\n" +" %c'\\OOO' el carácter con código octal OOO" + +# Sugerencia: la salida -> el resultado. +# (y paginarla -> paginarlo, en su caso). sv +# Yo personalmente prefiero `la salida'; si traducimos literalmente el +# inglés es eso, no cabe duda, pero poner `el resultado' no me cuadra. +# Lo digo porque tenemos una entrada y una salida (por un lado entran +# los cerdos a la máquina de hacer chorizos, y por otro salen). Creo +# que con esto me guiaré por lo que haya hecho el resto de la gente. +# Si sabes qué han hecho ... :). ipg +# Te mandaré el gettext, para que veas lo que vale un peine... sv +# X'D ... no soy tan malo ... ipg +# Medita de nuevo si no usas resultado em +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Pasa la salida a través de `pr' para paginarla." + +# Aquí a lo mejor también: la salida -> el resultado. sv +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Expande los tabuladores a espacios en la salida." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Hace que los tabuladores se alineen anteponiendo uno." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=NÚM Los topes de tabulación están separados por NÚM columnas\n" +" de impresión (por omisión, 8)." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" +"--suppress-blank-empty Suprime espacios o tabs antes de una línea vacía." + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Compara recursivamente todos los subdirectorios." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Trata los ficheros que no existan como vacíos." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Trata los ficheros originales que no existan\n" +" como vacíos." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "" +"-s --report-identical-files Notifica cuándo dos ficheros son idénticos." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x PAT --exclude=PAT Excluye los ficheros que coincidan con PAT." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FICHERO --exclude-from=FICHERO Excluye los ficheros que coincidan con\n" +" alguna expresión regular de FICHERO." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S FICHERO --starting-file=FICHERO Comienza por FICHERO cuando se " +"comparan\n" +" directorios." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FICHERO1 Compara FICHERO1 con todos los operandos.\n" +" FICHERO1 puede ser un directorio." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FICHERO2 Compara todos los operandos con FICHERO2.\n" +" FICHERO2 puede ser un directorio." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=NÚM Mantiene NÚM líneas de prefijos y sufijos comunes." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Se esfuerza en encontrar un grupo de cambios menor." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Supone que los ficheros son grandes y los cambios son\n" +" numerosos, pequeños y dispersos." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"FICHEROS puede ser `FICHERO1 FICHERO2' o `DIRECTORIO1 DIRECTORIO2'\n" +" o `DIRECTORIO FICHERO...' o `FICHERO... DIRECTORIO'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "Si se da --from-file o --to-file, no hay restricciones en FICHEROS." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Si un FICHERO es `-', lee la entrada estándar." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Modo de empleo: %s [OPCIÓN]... FICHEROS\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "la opción %s tiene el valor conflictivo `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "las especificaciones del estilo de salida son conflictivas" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Sólo en %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "no se puede comparar `-' con un directorio" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "la opción -D no se puede usar con directorios" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Subdirectorios comunes: %s y %s\n" + +# Nota: El segundo y el cuarto `%s' son tipos de fichero. +# Por ejemplo, "texto C", "texto FORTRAN", etc. +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "El fichero %s es un %s mientras que el %s es un %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Los ficheros %s y %s son idénticos\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "Randy Smith" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "opciones incompatibles" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "se ha especificado `-' para más de un fichero de entrada" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "la lectura falló" + +# Sería ideal traducir OLDFILE y YOURFILE. sv +# Sí, eso pensé yo, pero no sé como ponerlo para que quede bien ... +# Esto no hay quien lo entienda, piénsalo 3 minutos más si te apetece :) em+ +# +# OLDFILE FICHERO-ANTIGUO +# YOURFILE TU-FICHERO +# MYFILE MI-FICHERO +# +# Pongo eso por ahora, pero espero una sugerencia mejor ;) +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Muestra los cambios sin mezclar entre FICHERO-ANTIGUO\n" +" y TU-FICHERO en MI-FICHERO." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Muestra los cambios no mezclados, encerrando los\n" +" conflictos entre corchetes." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "" +"-A --show-all Muestra todos los cambios, encerrando los conflictos entre\n" +" corchetes." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Muestra los cambios que se solapen." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Muestra los cambios superpuestos (entre corchetes)." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Muestra los cambios no mezclados ni superpuestos." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Produce un fichero mezclado en lugar de un\n" +" script ed (por omisión -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L NOMBRE --label=NOMBRE Usa NOMBRE en lugar del nombre de fichero." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Añade las órdenes `w' y `q' a los `scripts' ed." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAMA Utiliza PROGRAMA para comparar los ficheros." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Modo de empleo: %s [OPCIÓN]... MI-FICHERO FICHERO-ANTIGUO TU-FICHERO\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Compara tres ficheros línea por línea." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"El estado de salida es 0 en caso de éxito, 1 si hay conflictos, 2 en caso " +"de\n" +"problema." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "error interno: fallo en el formato de los bloques diff" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff falló: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "error interno: tipo de diff inválido en process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "formato de diff inválido; separador de cambio inválido" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "formato de diff inválido; línea final incompleta" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "no se ha podido invocar al programa subsidiario `%s'" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "" +"formato de diff inválido; caracteres incorrectos al comienzo de la línea" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "error interno: tipo de diff inválido pasado a la salida" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "el fichero de entrada ha menguado" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "no se pueden comparar los nombres de fichero `%s' y `%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "%s: bucle de directorio recursivo" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "Thomas Lord" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o FICHERO --output=FICHERO Opera interactivamente, enviando el resultado\n" +" al fichero FICHERO." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Considera iguales mayúsculas y minúsculas." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Descarta los espacios en blanco." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w NÚM --width=NÚM Muestra como mucho NÚM columnas de impresión\n" +" (por omisión 130)." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "" +"-l --left-column Muestra sólo en la columna izquierda las líneas comunes." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines No muestra las líneas comunes." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Supone que los ficheros son grandes y los cambios " +"son\n" +" numerosos, pequeños y dispersos." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Modo de empleo: %s [OPCIÓN]... FICHERO1 FICHERO2\n" + +# Se admiten sugerencias. +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Combinación a dos columnas de las diferencias entre ficheros." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "no se puede mezclar interactivamente con la entrada estándar" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "los dos ficheros que hay que comparar son directorios" + +# FIXME +# ¿sugerencias para traducir mejor "verbosely"? +# ¿ Con verborrea ?, ;) +# era una broma, ¿ qué tal prolijamente ? em +# Huy ... mi famosa enciclopedia no dice en prolijo nada que se +# parezca a dar mucho la lata ... casi que lo dejamos, ¿no? ipg +# Sugerencia -> `verbosamente' -> con detalle. sv +# Hfff ... es que `con detalle' suena más a dar detalles de lo +# que es cada cosa, que no a que se está haciendo ipg +# Federico ha usado "prolijamente" en tar. Algo habrá que hacer, porque +# verbosamente no me suena a español. ¿Existe eso? sv +# A mi tampoco ... voy a ver si conecto con el diccionario de Anaya +# y lo miro ... a veeeeerrr ... ya ta: +# prolijo, -a: Del lat. prolixus = fluyente. +# 1. (adjetivo, -a). Largo, muy extenso. +# 2. (adjetivo, -a). Cuidadoso o esmerado con exceso. +# 3. (adjetivo, -a). Cargante, molesto. +# FAM: Prolijamente, prolijidad. +# SIN. 1. Amplio. 3. Impertinente, pesado. +# ANT. 1. Lacónico, conciso. 2. Descuidado. 3. Ameno. +# (Referencia: http://www.anaya.es/dict/Buscar) +# +# Pues está claro que es castellano (o español), pero yo no lo había +# oído hasta ahora, y me imagino que mucha gente estará igual. Yo +# voto por buscar algo más común (y creo que verbosamente vale, +# momento que lo bujco). ipg +# +# ¿ Lo encontraste ? , yo no lo he oído en mi vida, y me suena a verborrea, que +# es más bien despectivo. ¿ qué tal `con detalle' ? em+ +# Dejo verbosamente, que al menos el alma precavida lo asociará con que hay +# mucho verbo :) ipg +# +# Pero vamos a ver, ¿la palabra "verbosamente" existe? +# A mí me parece completamente un "palabro". sv +# ## ¿Por qué no la buscas en algún diccionario? sv +# ## Momeneto ... en la Espasa Calpe viene: +# ## verbosamente: adverbio, con verbosidad. +# ## En Anaya (http://www.anaya.es/dict): +# ## verbosidad +# ## I. De verbo. +# ## 1. (sustantivo femenino). Verborrea. +#: src/sdiff.c:868 +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed: Edita y usa ambas versiones, cada una decorada con una cabecera.\n" +"eb: Edita y usa ambas versiones.\n" +"el ó e1: Edita y usa la versión izquierda.\n" +"er ó e2: Edita y usa la versión derecha.\n" +"e: Edita una nueva versión.\n" +"l ó 1: Usa la versión izquierda.\n" +"r ó 2: Usa la versión derecha.\n" +"s: Incluye líneas comunes silenciosamente.\n" +"v: Incluye líneas comunes verbosamente.\n" +"q: Salir.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: opción ilegal -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Esto es software libre; vea el código fuente para las condiciones de " +#~ "copia.\n" +#~ "No hay NINGUNA garantía; ni siquiera de COMERCIABILIDAD o ADECUACIÓN " +#~ "PARA\n" +#~ "UN PROPÓSITO EN PARTICULAR.\n" + +# Véase "A bug's life". +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Comunicar bichos a <bug-gnu-utils@gnu.org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "la opción `-%ld' está obsoleta; utilice `-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "la opción `-%ld' está obsoleta; omítala" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "no se encontró el programa subsidiario `%s'" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "el programa subsidiario `%s' falló" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "el programa subsidiario `%s' falló (estado de salida %d)" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the files named COPYING." +#~ msgstr "" +#~ "Este programa viene sin NINGUNA GARANTÍA, hasta donde permite la ley.\n" +#~ "Se pueden redistribuir copias de este programa bajo los términos de la\n" +#~ "Licencia Pública General de GNU.\n" +#~ "Para más información sobre esto, vea los ficheros llamados COPYING." + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr "Escrito por Torbjörn Granlund y David MacKenzie." + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ "Escrito por Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, y Len Tower." + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "el programa subsidiario `%s' no es ejecutable" + +# Creo que es suficientemente decente, pero se admiten sugerencias. +#~ msgid "--inhibit-hunk-merge Do not merge hunks." +#~ msgstr "--inhibit-hunk-merge No junta los trozos." + +#~ msgid "context length specified twice" +#~ msgstr "la longitud del contexto se ha especificado dos veces" + +#~ msgid "multiple `--from-file' options" +#~ msgstr "se han dado varias opciones `--from-file'" + +#~ msgid "multiple `--to-file' options" +#~ msgstr "se han dado varias opciones `--to-file'" + +#~ msgid "regular empty executable file" +#~ msgstr "fichero regular ejecutable vacío" + +#~ msgid "regular executable file" +#~ msgstr "fichero regular vacío" + +#~ msgid ": not found\n" +#~ msgstr ": no encontrado\n" + +#~ msgid "-D%s: conflicting #ifdef format" +#~ msgstr "-D%s: formato #ifdef conflictivo" + +#~ msgid "%s: conflicting line format" +#~ msgstr "%s: formato de línea conflictivo" + +#~ msgid "conflicting group format" +#~ msgstr "formato de grupo conflictivo" + +#~ msgid "--ignore-initial value must be a nonnegative integer" +#~ msgstr "el valor de --ignore-initial debe ser un entero no negativo" + +#~ msgid "column width must be a positive integer" +#~ msgstr "el ancho de la columna debe ser un entero positivo" + +#~ msgid "context length must be a nonnegative integer" +#~ msgstr "la longitud del contexto ha de ser un entero no negativo" + +#~ msgid "horizon must be a nonnegative integer" +#~ msgstr "el horizonte (horizon) ha de ser un entero no negativo" diff --git a/po/fi.gmo b/po/fi.gmo new file mode 100644 index 0000000000000000000000000000000000000000..35eee01717e756d3ddb2540ce0b36ed88b479962 GIT binary patch literal 22408 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 literal 0 HcmV?d00001 diff --git a/po/fi.po b/po/fi.po new file mode 100644 index 0000000..1371fe4 --- /dev/null +++ b/po/fi.po @@ -0,0 +1,1263 @@ +# Finnish translation of GNU diffutils. +# Copyright © 2004 Free Software Foundation, Inc. +# Lauri Nurmi <lanurmi@iki.fi>, 2002-2004. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2004-04-19 14:36+03:00\n" +"Last-Translator: Lauri Nurmi <lanurmi@iki.fi>\n" +"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "ohjelmavirhe" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "pinon ylivuoto" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Tuntematon järjestelmävirhe" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "tavallinen tyhjä tiedosto" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "tavallinen tiedosto" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "hakemisto" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "lohkolaite-erikoistiedosto" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "merkkilaite-erikoistiedosto" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "symbolinen linkki" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "pistoke" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "viestijono" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semafori" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "jaettu muistiobjekti" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "tyypitetty muistiobjekti" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "outo tiedosto" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: valitsin \"%s\" on moniselitteinen\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: valitsin \"--%s\" ei salli argumenttia\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: valitsin \"%c%s\" ei salli argumenttia\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: valitsin \"%s\" vaatii argumentin\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: tunnistamaton valitsin \"--%s\"\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: tunnistamaton valitsin \"%c%s\"\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: virheellinen valitsin -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: valitsin vaatii argumentin -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: valitsin \"-W %s\" on moniselitteinen\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: valitsin \"-W %s\" ei salli argumenttia\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: valitsin \"%s\" vaatii argumentin\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Onnistui" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Ei vastaavuutta" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Virheellinen säännöllinen lauseke" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Virheellinen vertailumerkki" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Virheellinen merkkiluokan nimi" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Kenoviiva lopussa" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Virheellinen takaisinviittaus" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Pariton [ tai [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Pariton ( tai \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Pariton \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Virheellinen \"\\{\\}\":n sisältö" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Virheellinen välin loppu" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Muisti lopussa" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Virheellinen edeltävä säännöllinen lauseke" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Ennenaikainen säännöllisen lausekkeen loppu" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Liian suuri säännöllinen lauseke" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Pariton ) tai \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Ei edellistä säännöllistä lauseketta" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "muisti lopussa" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Tuntematon järjestelmävirhe" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "virheellinen arvo \"%s\" valitsimelle --bytes" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "virheellinen horisontin pituus \"%s\"" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "©" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Kirjoittanut %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Kirjoittaneet %s ja %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Kirjoittaneet %s, %s ja %s.\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 "" +"Kirjoittaneet %s, %s,\n" +"%s ja %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Kirjoittaneet %s, %s,\n" +"%s, %s ja %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Kirjoittaneet %s, %s,\n" +"%s, %s, %s ja %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Kirjoittaneet %s, %s,\n" +"%s, %s, %s,\n" +"%s ja %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Kirjoittaneet %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s ja %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Kirjoittaneet %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s ja %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Kirjoittaneet %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, %s ja muut.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Tiedostot %s ja %s eroavat\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Binääritiedostot %s ja %s eroavat\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Ei rivinvaihtoa tiedoston lopussa" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjörn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Kokeile \"%s --help\" saadaksesi lisää tietoa." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "virheellinen arvo \"%s\" valitsimelle --ignore-initial" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "valitsimet -l ja -s eivät ole yhteensopivia" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "kirjoitus epäonnistui" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "vakiotuloste" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Tulostaa eroavat tavut." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i OHITA --ignore-initial=OHITA Ohittaa syötteen ensimmäiset OHITA tavua." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i OHITA1:OHITA2 --ignore-initial=OHITA1:OHITA2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Ohittaa TIEDOSTO1:n ensimmäiset OHITA1 tavua, ja TIEDOSTO2:n ensimmäiset " +"OHITA2 tavua." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-I --verbose Näytä kaikkien eroavien tavujen sijainnit ja arvot" + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n RAJA --bytes=RAJA Vertaa korkeintaan RAJAn verran tavuja." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent Ei tulostusta; vain paluuarvo." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Näyttää versiotiedot." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Näyttää tämän ohjeen." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Käyttö: %s [VALITSIN]... TIEDOSTO1 [TIEDOSTO2 [OHITA1 [OHITA2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Vertaa kahta tiedostoa tavu tavulta." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "" +"OHITA1 ja OHITA2 ovat jokaisessa tiedostossa ohitettavien tavujen määrä." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"OHITA-arvoihin voidaan liittää perään seuraavat kertoimet:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, sekä T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Jos TIEDOSTO on \"-\" tai puuttuu, luetaan vakiosyötteestä." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"Paluuarvo on 0, jos syötteet ovat samoja, 1 jos erilaisia, " +"ongelmatilanteissa 2." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "virheellinen arvo \"%s\" valitsimelle --bytes" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "puuttuva operandi argumentin \"%s\" jälkeen" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "ylimääräinen operandi \"%s\"" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s eroavat: tavu %s, rivi %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s eroavat: tavu %s, rivi %s on %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: Tiedoston %s loppu\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "virheellinen kontekstin pituus \"%s\"" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "tämä isäntä ei tue sivunumerointia" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "liian monta tiedostonimivalitsinta" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "virheellinen leveys \"%s\"" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "ristiriitaiset leveysvalinnat" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "virheellinen horisontin pituus \"%s\"" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "virheellinen sarkaimen koko \"%s\"" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "ristiriitaiset sarkaimen kokovalinnat" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "sekä valitsin --from-file että --to-file on määritetty" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Vertaa tiedostoja rivi riviltä." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" +"-i --ignore-case Älä huomioi kirjainkokoa tiedostojen sisältöä " +"verrattaessa." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Älä huomioi kirjainkokoa tiedostojen nimiä " +"verrattaessa." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Kirjainkoko huomioidaan tiedostonimiä " +"verrattaessa." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Älä huomioi sarkainten laajennuksesta johtuvia " +"eroja." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "" +"-b --ignore-space-change Älä huomioi tyhjistä merkeistä johtuvia eroja." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-white-space Älä huomioi tyhjiä merkkejä." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B --ignore-blank-lines Älä huomioi tyhjistä riveistä johtuvia eroja." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I SI --ignore-matching-lines=SI Älä huomioi eroavia rivejä, jotka " +"vastaavat säännöllistä lauseketta." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Poista lopussa oleva vaununpalautus syötteestä." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Lukee ja kirjoittaa dataa binääritilassa." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Käsittelee kaikki tiedostot tekstinä." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C MÄÄRÄ --context[=MÄÄRÄ] Tulosta MÄÄRÄ (oletus 3) riviä kopioitua " +"kontekstia.\n" +"-u -U MÄÄRÄ --unified[=MÄÄRÄ] Tulosta MÄÄRÄ (oletus 3) riviä yhdistettyä " +"kontekstia.\n" +" --label NIMIÖ Käytä NIMIÖtä tiedostonimen sijaan.\n" +" -p --show-c-function Näytä, minkä C-funktion sisällä kukin muutos on.\n" +" -F SI --show-function-line=SI Näytä viimeisin säännöllistä lauseketta " +"vastaava rivi." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Kertoo vain, eroavatko tiedostot." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Tulosta ed-skripti." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Tulosta normaali diff." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Tulosta RCS-muotoinen diff." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Tulosta kahdelle palstalle.\n" +" -W MÄÄRÄ --width=MÄÄRÄ Tulosta korkeintaan MÄÄRÄ (oletus 130) merkkiä " +"riville.\n" +" --left-column Tulosta vain yhteisten rivien vasen palsta.\n" +" --suppress-common-lines Älä tulosta yhteisiä rivejä." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NIMI --ifdef=NIMI Tulosta yhdistetty tiedosto näyttämään \"#ifdef NIMI" +"\"-erot." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYYPPI-group-format=GMUOTO Sama, muotoile GTYYPPIset syöteryhmät " +"GMUOTOon." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "--line-format=LMUOTO Sama, muotoile kaikki syöterivit LMUOTOon." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYYPPI-line-format=MUOTO Sama, muotoile LTYYPPIset syöterivit LMUOTOon." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYYPPI on \"old\", \"new\" tai \"unchanged\". GTYYPPI on LTYYPPI tai " +"\"changed\"." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GMUOTO voi sisältää:\n" +" %< rivejä TIEDOSTO1:stä\n" +" %> rivejä TIEDOSTO2:sta\n" +" %= TIEDOSTO1:n ja TIEDOSTO2:n yhteiset rivit\n" +" %[-][LEVEYS][.[TARKK]]{doxX}KIRJAIN printf-tyylimääritys KIRJAIMELLE\n" +" KIRJAIMET ovat seuraavat uudelle ryhmälle; pienet kirjaimet vanhalle " +"ryhmälle:\n" +" F ensimmäinen rivinumero\n" +" L viimeinen rivinumero\n" +" N rivien määrä = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LMUOTO voi sisältää:\n" +" %L rivin sisältö\n" +" %l rivin sisältö, mahdollinen edeltävä rivinvaihto poislukien\n" +" %[-][LEVEYS][.[TARKK]]{doxX}n syöterivin numero printf-tyylillä" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Sekä GMUOTO että LMUOTO voivat sisältää:\n" +" %% %\n" +" %c'C' yksittäinen merkki C\n" +" %c'\\OOO' yksittäinen merkki oktaalikoodilla OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "" +"-l --paginate Ohjaa tuloste ohjelman \"pr\" läpi sivunumerointia varten." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Laajentaa sarkaimet välilyönneiksi tulosteessa." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "-T --initial-tab Lisää sarkain rivien alkuun." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=KOKO Sarkaimen koko on KOKO (oletus 8) merkkiä." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Vertaa löytyneitä alihakemistoja rekursiivisesti." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Käsittele puuttuvia tiedostoja tyhjinä." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "--unidirectional-new-file Käsittele puuttuvia tiedostoja tyhjinä." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Ilmoita, jos kaksi tiedostoa ovat samat." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "" +"-x HAHMO --exclude=HAHMO Jätä pois tiedostot, jotka vastaavat HAHMOa." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X TIEDOSTO --exclude-from=TIEDOSTO Jätä pois TIEDOSTOssa listatut " +"tiedostot." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S TIEDOSTO --starting-file=TIEDOSTO Aloita TIEDOSTOlla verrattaessa " +"hakemistoja." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=TIEDOSTO1 Vertaa TIEDOSTO1:ä kaikkiin operandeihin. TIEDOSTO1 " +"voi olla hakemisto." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=TIEDOSTO2 Vertaa kaikkia operandeja TIEDOSTO2:een. TIEDOSTO2 voi " +"olla hakemisto." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=MÄÄRÄ Säilytä MÄÄRÄ riviä yhteisestä etu- ja " +"jälkiliitteestä." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Yrittää löytää pienemmän määrän muutoksia." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Olettaa tiedostojen olevan suuria ja muutosten pieniä " +"sekä hajanaisia." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"TIEDOSTOT ovat \"TIEDOSTO1 TIEDOSTO2\" tai \"HAK1 HAK2\" tai \"HAK " +"TIEDOSTO...\" tai \"TIEDOSTO... HAK\"." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Jos valitsin --from-file tai --to-file on annettu, TIEDOSTOILLE ei ole " +"rajoituksia." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Jos TIEDOSTO on \"-\", luetaan vakiosyötteestä." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Käyttö: %s [VALITSIN]... TIEDOSTOT\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "ristiriitainen arvo \"%2$s\" valitsimelle %1$s" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "ristiriitaiset tulostustyylin valinnat" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Vain hakemistossa %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "ei voi verrata syötettä \"-\" hakemistoon" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "valitsin -D ei toimi hakemistojen kanssa" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Yhteiset alihakemistot: %s ja %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Tiedosto %s on %s, kun taas tiedosto %s on %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Tiedostot %s ja %s ovat identtiset\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "yhteensopimattomat valitsimet" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "\"-\" on määritetty useammaksi kuin yhdeksi syötetiedostoksi" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "lukeminen epäonnistui" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Tulosta VANHANTIEDOSTON yhdistämättömät muutokset TIEDOSTOOSI " +"verrattuna TIEDOSTOONI." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Tulosta yhdistämättömät muutokset, ristiriidat merkiten." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Tulosta kaikki muutokset, ristiriidat merkiten." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Tulosta päällekkäiset muutokset." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Tulosta päällekkäiset muutokset sulkeiden sisään." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Tulosta yhdistämättömät ei-päällekkäiset muutokset." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Tulosta yhdistetty tiedosto ed-skriptin sijaan (oletus -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L NIMIÖ --label=NIMIÖ Käytä NIMIÖtä tiedostonimen sijaan." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Lisää komennot \"w\" ja \"q\" ed-skripteihin." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=OHJELMA Käytä OHJELMAa tiedostojen vertaamiseen." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Käyttö: %s [VALITSIN]... TIEDOSTONI VANHATIEDOSTO TIEDOSTOSI\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Vertaa kolmea tiedostoa rivi riviltä." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"Paluuarvo on onnistuessa 0, ristiriitatilanteissa 1, ja ongelmatilanteissa 2." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "sisäinen virhe: virhe diff-lohkojen muodossa" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff epäonnistui: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "sisäinen virhe: virheellinen diff-tyyppi funktiossa process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "virheellinen diff-muoto; virheellinen muutoserotin" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "virheellinen diff-muoto; viimeinen rivi vajaa" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "apuohjelmaa \"%s\" ei voitu käynnistää" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "virheellinen diff-muoto; väärät rivin alkumerkit" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "sisäinen virhe: virheellinen diff-muoto välitetty tulosteeseen" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "syötetiedosto kutistui" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "ei voi verrata tiedostonimiä \"%s\" ja \"%s\"" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o TIEDOSTO --output=TIEDOSTO Vuorovaikutteinen toiminta, tuloste " +"TIEDOSTOon." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Käsittele isot ja pienet kirjaimet samoina." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-white Älä huomioi tyhjiä merkkejä." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w MÄÄRÄ --width=MÄÄRÄ Tulosta enintään MÄÄRÄ (oletus 130) merkkiä riville." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Tulosta vain yhteisten rivien vasen palsta" + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Älä tulosta yhteisiä rivejä." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Oleta suuret tiedostot, joissa pieniä muutoksia " +"ympäri tiedoston." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Käyttö: %s [VALITSIN]...TIEDOSTO1 TIEDOSTO2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Tiedostojen erojen yhdistäminen vierekkäisillä palstoilla." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "vakiosyötettä ei voi yhdistää vuorovaikutteisesti" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "molemmat vertailtavat tiedostot ovat hakemistoja" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tMuokkaa ja käytä molempia versioita, kumpaankin otsake.\n" +"eb:\tMuokkaa ja käytä molempia versioita.\n" +"el:\tMuokkaa ja käytä vasenta versiota.\n" +"er:\tMuokkaa ja käytä oikeata versiota.\n" +"e:\tMuokkaa uusi versio.\n" +"l:\tKäytä vasenta versiota.\n" +"r:\tKäytä oikeata versiota.\n" +"s:\tSisällytä yhteiset rivit automaattisesti, ei ilmoitusta.\n" +"v:\tSisällytä yhteiset rivit automaattisesti ja ilmoita niistä.\n" +"q:\tLopeta.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: virheellinen valitsin -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Tämä on vapaa ohjelmisto; katsokaa kopiointiehdot lähdekoodista. Takuuta " +#~ "EI\n" +#~ "OLE; ei edes KAUPALLISESTI HYVÄKSYTTÄVÄSTÄ LAADUSTA tai SOPIVUUDESTA " +#~ "TIETTYYN\n" +#~ "TARKOITUKSEEN.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "" +#~ "Ilmoita ohjelmistovioista (englanniksi) osoitteeseen <bug-gnu-utils@gnu." +#~ "org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "valitsin \"-%ld\" on vanhentunut, käytä \"-%c %ld\"" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "valitsin \"-%ld\" on vanhentunut; jätä se pois" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "apuohjelmaa \"%s\" ei löytynyt" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "apuohjelman \"%s\" suoritus epäonnistui" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "apuohjelman \"%s\" suoritus epäonnistui (paluuarvo %d)" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the files named COPYING." +#~ msgstr "" +#~ "Tällä ohjelmalla EI - lain sallimissa rajoissa - OLE TAKUUTA.\n" +#~ "Tämän ohjelman kopioita saa levittää GNU:n General Public Licensen \n" +#~ "mukaisesti. Lisää tietoa näistä asioista on tiedostossa COPYING." + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr "Kirjoittaneet Torbjörn Granlund ja David MacKenzie." + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ "Kirjoittaneet Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman ja Len Tower." + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "apuohjelma \"%s\" ei ole käynnistettävä" diff --git a/po/fr.gmo b/po/fr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..02e64c448859629ba052a93a6bc96e9d36b503a0 GIT binary patch literal 23727 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 literal 0 HcmV?d00001 diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..6c53c9f --- /dev/null +++ b/po/fr.po @@ -0,0 +1,1356 @@ +# Messages français pour GNU concernant diffutils. +# Copyright © 2004 Free Software Foundation, Inc. +# Michel Robitaille <robitail@IRO.UMontreal.CA>, 1996. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2004-05-10 08:00-0500\n" +"Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n" +"Language-Team: French <traduc@traduc.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "erreur du programme" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "débordement de pile" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Erreur système inconnue" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "fichier régulier vide" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "fichier régulier" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "répertoire" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "fichier spécial-blocs" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "fichier spécial-caractères" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "« fifo »" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "lien symbolique" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "« socket »" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "queue de messages" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "sémaphore" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "objet en mémoire partagée" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "objet mémoire typé" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "fichier bizarre" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: l'option « %s » est ambiguë.\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: l'option « --%s » ne permet aucun argument.\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: l'option « %c%s » ne permet aucun argument.\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: l'option « %s » requiert un argument.\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: l'option « --%s » n'est pas reconnue.\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: l'option « %c%s » n'est pas reconnue.\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: l'option -- %c est invalide.\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: l'option -- %c requiert un argument.\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: l'option « -W %s » est ambiguë.\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: l'option « -W %s » ne permet aucun argument.\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: l'option « %s » requiert un argument.\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Succès" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Pas de concordance." + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "L'expression régulière est invalide." + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Le caractère de regroupement est invalide." + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Le nom d'un ensemble de caractères est invalide." + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Barre oblique inverse à la fin." + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "La référence arrière est invalide." + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "[ or [^ non repéré." + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr " ( ou \\( non repéré." + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "\\{ non repéré." + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Le contenu de \\{\\} est invalide." + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "La fin d'intervalle est invalide." + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Mémoire épuisée." + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "L'expression régulière précédente est invalide." + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Fin prématurée de l'expression régulière." + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Expression régulière trop grande." + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr ") or \\) non repéré." + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "N'est pas précédé d'une expression régulière." + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "mémoire épuisée" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Erreur système inconnue" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "valeur invalide --bytes « %s »" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "longueur d'horizon invalide « %s »" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "(C)" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Écrit par %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Écrit par %s et %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Écrit par %s, %s et %s.\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 "" +"Écrit par %s, %s, %s\n" +"et %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Écrit par %s, %s, %s\n" +"%s et %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Écrit par %s, %s, %s\n" +"%s, %s et %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Écrit par %s, %s, %s\n" +"%s, %s, %s et %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Écrit par %s, %s, %s\n" +"%s, %s, %s, %s\n" +"et %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Écrit par %s, %s, %s\n" +"%s, %s, %s, %s\n" +"%s et %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Écrit par %s, %s, %s\n" +"%s, %s, %s, %s\n" +"%s, %s et autres.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Les fichiers %s et %s sont différents.\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Les fichiers binaires %s et %s sont différents.\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Pas de fin de ligne à la fin du fichier." + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Pour en savoir davantage, faites: « %s --help »." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "valeur invalide --ignore-initial « %s »" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "options -l et -s sont incompatibles" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "échec d'écriture" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "sortie standard" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes afficher les octets qui diffèrent" + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i N --ignore-initial=N escamoter les N premiers octets à l'entrée" + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SAUT1:SAUT2 --ignore-initial=SAUT1:SAUT2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" escamoter les SAUT1 premiers octets du FICHIER1 et les SAUT2 premiers " +"octets du FICHIER2" + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose afficher les numéros d'octets et les valeurs de tous les " +"octets qui diffèrent" + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LIMITE --bytes=LIMITE comparer un nombre d'octets selon la LIMITE." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "" +"-s --quiet --silent ne rien afficher, produire seulement un constat de " +"fin d'exécution" + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version afficher le nom et la version du logiciel" + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help afficher l'aide-mémoire" + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Usage: %s [OPTION]... FICHIER1 [FICHIER2 [SAUT1 [SAUT2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Comparer deux fichiers octet par octet" + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "" +"SAUT1 et SAUT2 correspondent au nombre d'octets à escamoter dans chaque " +"fichier" + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"valeurs de SAUT peuvent être suivies par un des suffixes multiplicateurs " +"suivants:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, et ainsi de suite pour T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Si FICHIER spécifié est « - » ou manquant, lire de l'entrée standard" + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"Le statut de fin d'exécution est 0 si les entrées sont les mêmes, 1 si " +"différentes et 2 si problématiques" + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "valeur invalide --bytes « %s »" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "opérande manquante après « %s »" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "opérande supplémentaire « %s »" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s sont différents: octet %s, ligne %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s diffèrent: octet %s, ligne %s est %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: Fin-de-fichier (EOF) sur %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "longueur du contexte invalide « %s »" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "La pagination 'est pas supporté sur cette machine hôte." + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "Trop d'options présentes pour nommer les fichiers." + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "largeur invalide « %s »" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "option de largeur conflictuelle" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "longueur d'horizon invalide « %s »" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "taille de tabulation invalide « %s »" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "option conflictuelle de taille de tabulation" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "--from-file et --to-file ont été spécifiés ensemble" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Comparer les fichiers ligne par ligne" + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" +"-i --ignore-case ignorer les différences de casses dans le contenu des " +"fichiers" + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case ignorer la casse lors de la comparaison des noms de " +"fichiers" + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case tenir compte de la casse lors de la comparaison " +"des noms de fichiers" + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion ignorer les changements liés à l'expansion des " +"tabulations" + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change ignorer les changements dans l'espacement" + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space ignorer tout blanc d'espacement" + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B --ignore-blank-lines ignorer les changements dont toutes les lignes " +"sont blanches" + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I EXPREG --ignore-matching-lines=EXPREG ignorer les différences dont les " +"lignes concordent à l'EXPression RÉGulière" + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr éliminer les retours de chariot de l'entrée." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary lire et écrire les données en binaire" + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text traiter tous les fichiers comme des textes." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C N --context[=N] afficher N lignes de contexte (3 par défaut)\n" +"-u -U N --unified[=N] afficher N lignes du contexte unifié (3 par " +"défaut)\n" +" --label ÉTIQ utiliser l'ÉTIQuette comme nom de fichier.\n" +" -p --show-c-function identifier la fonction contenant chaque " +"différence.\n" +" -F EXPREG\n" +" --show-function-line=EXPREG\n" +" afficher la ligne la plus récente qui " +"concorde\n" +" avec l'EXPression RÉGulière" + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief indiquer seulement si les fichiers diffèrent ou non" + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed générer un script pour « ed »" + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal produire un « diff » en format normal" + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs générer un fichier de type « diff » en format RCS" + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side afficher la sortie sur deux colonnes\n" +" -w N --width=N limiter la sortie à N caractères par ligne (130 " +"par défaut)\n" +" --left-column afficher seulement la colonne de gauche pour les " +"lignes identiques\n" +" --suppress-common-lines ne pas afficher les lignes identiques" + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NOM --ifdef=NOM afficher la fusion des fichiers en indiquant les " +"différences par des « #ifdef NAME » dans le « diff » produit" + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT similaire, mais formater les groupes\n" +" d'entrée GTYPE avec GFMT" + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LFMT similaire, mais formater toutes les lignes d'entrée avec " +"LFMT" + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT similaire, mais formater les lignes\n" +" d'entrée LTYPE avec LFMT" + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +"LTYPE peut être soit « old », « new », ou « unchanged ». GTYPE prend une des " +"valeurs de LTYPE ou « changed »." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +"GFMT peut contenir:\n" +" %< pour marquer les lignes du FICHIER1\n" +" %> pour marquer les lignes du FICHIER2\n" +" %= pour marquer les lignes identiques entre FICHIER1 et FICHIER2\n" +" %[-][LARGEUR][.[PREC]]{doxX}LETTRE, les spécifications de LETTRE\n" +" sont identiques à la notation que l'on retrouve dans « printf() »\n" +" dont les codes possibles de LETTRE sont\n" +" en majuscule pour le nouveau groupe, \n" +" en minuscules pour l'ancien groupe:\n" +" F numéro de la première ligne\n" +" L numéro de la dernière ligne\n" +" N nombre de lignes = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +"LFMT peut contenir:\n" +" %L pour le contenu de la ligne\n" +" %l pour le contenu de la ligne sans fin de " +"ligne\n" +" %[-][LARGEUR][.[PREC]]{doxX}n la spécification du numéro de ligne\n" +" d'entrée selon le format de printf()" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +"GFMT ou LFMT peuvent contenir:\n" +" %% %\n" +" %c« C » le caractère « C » lui-même\n" +" %c'\\OOO» le caractère dont le code octal est OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate relayer la sortie à « pr » afin de la paginer" + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs étaler les tabulateurs en espaces dans la sortie." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab aligner les tabulateurs par l'ajout d'un tabulateur de " +"préfixe" + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=N les balises de tabulation sont à chaque N (8 par défaut) " +"colonnes." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive comparer récursivement les sous-répertoires présents" + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file traiter les fichiers absents comme des fichiers vides" + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file traiter les fichiers absents comme vides" + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "" +"-s --report-identical-files indiquer si les deux fichiers sont identiques" + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "" +"-x PAT --exclude=PAT exclure les fichiers dont les noms concordent avec le " +"PATron" + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FICHIER --exclude-from=FICHIER exclure les fichiers dont les noms\n" +" concordent à ceux contenus dans le FICHIER" + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S FICHIER --starting-file=FICHIER débuter la comparaison des\n" +" répertoires par le FICHIER" + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FICHIER1\n" +" comparer le FICHIER1 à toutes les opérandes.\n" +" FICHIER1 peut être un répertoire." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FICHIER2\n" +" comparer toutes les opérandes à FICHIER2.\n" +" FICHIER2 peut être un répertoire." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=N retenir N lignes ayant des préfixes et suffixes " +"identiques" + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "" +"-d --minimal si possible afficher le plus petit ensemble de différences." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files traiter de grands fichiers et ayant plusieurs petits " +"changements dispersés" + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"FICHIERS sont « FICHIER1 FICHIER2 » ou « RÉP1 RÉP2 » ou « RÉP FICHIER... » ou " +"«FICHIER... RÉP'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Si --from-file ou --to-file est fournie, il n'y a pas de restriction sur les " +"FICHIERS." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Si le FICHIER spécifié est « - » alors lire de l'entrée standard." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Usage: %s [OPTION]... FICHIERS\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "valeur « %s » conflictuelle de l'option %s" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "options de style de sortie conflictuelles" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Seulement dans %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "Ne peut comparer « - » avec un répertoire" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "L'option -D ne traite pas les répertoires." + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Les sous-répertoires %s et %s sont identiques.\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Le fichier %s est un %s alors que le fichier %s est un %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Les fichiers %s et %s sont identiques.\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "options incompatibles" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "« - » fourni pour plus d'un fichier d'entrée" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "lecture non-réussie" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed afficher les différences non fusionnés selon l'ordre suivant:\n" +" entre le fichier ORIGINAL et le fichier MODIFIÉ\n" +" vers le fichier de SORTIE" + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "-E --show-overlap afficher les différences entre crochets" + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all afficher toutes les différences entre crochets" + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only afficher les différences qui se recoupent" + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X afficher les différences qui se recoupent entre crochets." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "" +"-3 --easy-only afficher tous les changements non fusionnés qui ne se " +"recoupent pas" + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge afficher le fichier fusionné plutôt qu'un script « ed " +"» (implique -A)" + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "" +"-L ÉTIQ --label=ÉTIQ utiliser l'ÉTIQuette plutôt que le nom du fichier" + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i ajouter les commandes « w » et « q » au script « ed »" + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" +"--diff-program=PROG utiliser le PROGramme pour comparer les fichiers." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Comparer trois fichiers ligne par ligne" + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"Le statut de fin d'exécution est 0 si réussite, 1 si en conflit et 2 si " +"problématique" + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "Erreur interne: mélange dans le format des blocs « diff »" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: échec de « diff »: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "Erreur interne: type de « diff » invalide dans process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "format de « diff » invalide; séparateur de changement invalide" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "format de « diff » invalide; dernière ligne incomplète" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "programme subsidiaire « %s » n'a pu être invoqué" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "" +"format de « diff » invalide; caractères incorrects sur la ligne d'annonce" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "Erreur interne: type de « diff » invalide fourni à output" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "Le fichier d'entrée a rétréci." + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "ne peut comparer les noms de fichier « %s » et « %s »" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o FICHIER --output=FICHIER agir intéractivement, avec sortie sur FICHIER" + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case banaliser majuscules et minuscules" + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space ignorer tout blanc d'espacement" + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w N --width=N limiter la sortie à au plus N colonnes imprimées (130 " +"par défaut)" + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "" +"-l --left-column afficher dans la colonne de gauche les lignes identiques" + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines ne pas afficher les lignes identiques" + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files traiter de grands fichiers ayant plusieurs " +"changements éparpillés" + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Usage: %s [OPTION]... FICHIER1 FICHIER2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Fusion côte à côte des différences des fichiers" + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "Ne peut fusionner l'entrée standard, interactivement." + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "Les deux fichiers à comparer sont des répertoires." + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\téditer les deux versions, chacune chapeautée d'une en-tête\n" +"eb:\téditer puis utiliser les deux versions\n" +"el:\téditer puis utiliser la version de gauche\n" +"er:\téditer puis utiliser la version de droite\n" +"e:\téditer une nouvelle version\n" +"l:\tutiliser la version de gauche\n" +"r:\tutiliser la version de droite\n" +"s:\tinclure les lignes identiques silencieusement\n" +"v:\tinclure les lignes identiques et le signaler\n" +"q:\tquitter.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: l'option -- %c est illégale.\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Ce logiciel est libre; vous pouvez le redistribuer selon les termes de " +#~ "la\n" +#~ "licence GNU General Public License. AUCUNE garantie n'est donnée.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Rapporter toutes anomalies à <bug-gnu-utils@gnu.org>" + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "l'option « -%ld » est obsolète; utilise « -%c %ld »" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "l'option « -%ld » est obsolète; l'omettre" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "programme de service « %s » non repéré" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "échec du programme de service « %s »" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "échec du programme subsidiaire « %s » (statut d'exécution %d)" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the files named COPYING." +#~ msgstr "" +#~ "Ce programme est fourni sans AUCUNE GARANTIE, tel que permis par la loi.\n" +#~ "Vous pouvez le redistribuer selon les termes de « GNU General Public " +#~ "License »,\n" +#~ "lire le texte du fichier COPYING pour plus de détails.\n" +#~ "Pour plus d'informations, voir le fichier portant le nom COPYING." + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr "Écrit par Torbjorn Granlund et David MacKenzie." + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ "Écrit par Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman et Len Tower." + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "programme de service « %s » n'est pas exécutable" + +# src/diff.c:882 MRO +#~ msgid "--inhibit-hunk-merge Do not merge hunks." +#~ msgstr "--inhibit-hunk-merge ne pas faire la fusion des hunks" + +#~ msgid "context length specified twice" +#~ msgstr "La longueur du contexte a été spécifié deux fois." + +#~ msgid "multiple `--from-file' options" +#~ msgstr "options multiples de `--from-file'" + +#~ msgid "multiple `--to-file' options" +#~ msgstr "options multiples de `--to-file'" + +#~ msgid "regular empty executable file" +#~ msgstr "fichier régulier exécutable vide" + +#~ msgid "regular executable file" +#~ msgstr "fichier régulier exécutable" + +#~ msgid "" +#~ "SKIP values may be followed by the following multiplicative suffixes:\n" +#~ msgstr "" +#~ "Les valeurs de SAUT peuvent être suivies par un des facteurs " +#~ "multiplicatifs suivants:\n" + +#~ msgid "kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +#~ msgstr "kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" + +#~ msgid "GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y.\n" +#~ msgstr "" +#~ "GB 1,000,000,000, G 1,073,741,824, et ainsi de suite pour T, P, E, Z, Y.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>.\n" +#~ msgstr "Rapporter toutes anomalies à <bug-gnu-utils@gnu.org>\n" + +#~ msgid "If a FILE is `-', read standard input.\n" +#~ msgstr "Si FICHIER spécifié est `-', alors lire de l'entrée standard.\n" + +#~ msgid ": not found\n" +#~ msgstr ": introuvable\n" + +#~ msgid "-D%s: conflicting #ifdef format" +#~ msgstr "-D%s: format #ifdef conflictuels" + +#~ msgid "%s: conflicting line format" +#~ msgstr "%s: format de ligne conflictuel" + +#~ msgid "conflicting group format" +#~ msgstr "formats de groupes conflictuels" + +#~ msgid "--ignore-initial value must be a nonnegative integer" +#~ msgstr "La valeur de --ignore-initial doit être un entier non-négatif" + +#~ msgid "column width must be a positive integer" +#~ msgstr "Le nombre de colonnes doit être un entier positif." + +#~ msgid "context length must be a nonnegative integer" +#~ msgstr "La longueur du contexte doit être un entier non négatif." + +#~ msgid "horizon must be a nonnegative integer" +#~ msgstr "L'horizon doit être un entier non négatif." diff --git a/po/ga.gmo b/po/ga.gmo new file mode 100644 index 0000000000000000000000000000000000000000..77f49ad787fc1db00ab9acfb4d77f3f014d1ad27 GIT binary patch literal 22264 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 literal 0 HcmV?d00001 diff --git a/po/ga.po b/po/ga.po new file mode 100644 index 0000000..9f8a97d --- /dev/null +++ b/po/ga.po @@ -0,0 +1,1232 @@ +# Irish translations for diffutils. +# Copyright (C) 2004 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils package. +# Kevin Patrick Scannell <scannell@SLU.EDU>, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2004-12-03 13:47-0500\n" +"Last-Translator: Kevin Patrick Scannell <scannell@SLU.EDU>\n" +"Language-Team: Irish <ga@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "earráid chláir" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "cruach thar maoil" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Earráid chórais anaithnid" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "gnáthchomhad folamh" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "gnáthchomhad" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "comhadlann" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "comhad speisialta den chineál `bloc'" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "comhad speisialta den chineál `carachtar'" + +# `TITA' ?! -KPS +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "nasc siombalach" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "soicéad" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "ciú teachtaireachta" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "séamafór" + +# FARF --KPS +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "comhad comhchuimhne" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "comhad cuimhne le cineál" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "comhad aisteach" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: Tá an rogha `%s' débhríoch\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `--%s'\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `%c%s'\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: ní foláir argóint don rogha `%s'\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: rogha anaithnid `--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: rogha anaithnid `%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: rogha neamhbhailí -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: ní foláir argóint don rogha -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: Tá an rogha `-W %s' débhríoch\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `-W %s'\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: ní foláir argóint don rogha `%s'\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Bua!" + +# #-#-#-#-# findutils-4.2.6.ga.po (findutils 4.2.6) #-#-#-#-# +# ugh. Not clear what kind of things we're matching -- KPS +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Níl a leithéid ann" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Slonn ionadaíochta neamhbhailí" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Carachtar cóimheasa neamhbhailí" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Aicme charachtair neamhbhailí" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Cúlslais ag deireadh" + +# #-#-#-#-# sed-4.1.1.ga.po (sed 4.1.1) #-#-#-#-# +# coinage - KPS +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Cúltagairt neamhbhailí" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "[ nó [^ corr" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "( nó \\( corr" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "\\{ corr" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Ábhar neamhbhailí idir \\{\\}" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Deireadh raoin neamhbhailí" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Cuimhne ídithe" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Is neamhbhailí an slonn ionadaíochta roimhe seo" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Deireadh le slonn ionadaíochta gan choinne" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Slonn ionadaíochta rómhór" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr ") nó \\) corr" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Níl aon slonn ionadaíochta roimhe seo" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "cuimhne ídithe" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Earráid chórais anaithnid" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "luach neamhbhailí --bytes `%s'" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "fad léaslíne neamhbhailí `%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Le %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Le %s agus %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Le %s, %s, agus %s.\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 "" +"Le %s, %s, %s,\n" +"agus %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Le %s, %s, %s,\n" +"%s, agus %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Le %s, %s, %s,\n" +"%s, %s, agus %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Le %s, %s, %s,\n" +"%s, %s, %s, agus %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Le %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"agus %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Le %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, agus %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Le %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, agus daoine eile nach iad.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Tá difríocht idir na comhaid %s agus %s\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Tá difríocht idir na comhaid %s agus %s\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Gan líne nua ag an chomhadchríoch" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Bain triail as `%s --help' chun tuilleadh eolais a fháil." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "luach neamhbhailí --ignore-initial `%s'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "Níl na roghanna -l agus -s comhoiriúnach" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "teipeadh ag scríobh" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "aschur caighdeánach" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Taispeáin na bearta atá difriúla." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i UIMHIR --ignore-initial=UIMHIR Gabh thar an chéad UIMHIR beart " +"ionchurtha." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SCIP1:SCIP2 --ignore-initial=SCIP1:SCIP2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr " Gabh thar an chéad SCIP1 beart as COMHAD1 agus SCIP2 as COMHAD2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose Taispeáin uimhreacha agus luachanna do bhearta uile difriúla." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n TEOR --bytes=TEOR Cuir TEOR beart i gcomparáid, ar a mhéad." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent Ná haschuir rud ar bith; gin stádas scortha." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Taispeáin eolas faoin leagan." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Taispeáin an chabhair seo.." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Úsáid: %s [ROGHA]... COMHAD1 [COMHAD2 [SCIPEÁIL1 [SCIPEÁIL2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Cuir dhá chomhad i gcomparáid, beart le beart." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "" +"Is éard atá i SCIP1 agus SCIP2 ná líonta na mbeart a scipeáil i ngach comhad." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Is féidir na hiarmhíreanna a leanas a chur i ndiaidh SCIP:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, srl. do T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Mura bhfuil COMHAD ann, nó más `-' é, léigh ón ionchur caighdeánach." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "Stádas scortha: 0 más ionann iad, 1 más difriúil, 2 má tá fadhb ann." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "luach neamhbhailí --bytes `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "ní foláir argóint i ndiaidh `%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "oibreann breise `%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s difriúil: beart %s, líne %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s difriúil: beart %s, líne %s = %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF ar %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "Fad neamhbhailí comhthéacs `%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "Ní thacaítear leis an uimhriú leathanach ar an óstríomhaire seo" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "an iomarca argóintí do lipéid chomhaid" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "leithead neamhbhailí `%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "roghanna leithid contrártha" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "fad léaslíne neamhbhailí `%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "tá an mhéid tháib `%s' neamhbhailí" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "Roghanna tábmhéid contrártha" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "tugadh --from-file agus --to-file lena chéile" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Déan comparáid idir na comhaid, líne ar líne." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case Ná bí cásíogair le hinneachar na gcomhad." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "--ignore-file-name-case Ná bí cásíogair le hainmneacha comhaid." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Bí cásíogair maidir le hainmneacha comhaid." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Déan neamhshuim ar athruithe ó leathnú na dtáib." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Déan neamhshuim ar mhéid an spáis bán." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Déan neamhshuim ar spás bán go hiomlán." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines Déan neamhshuim ar línte folmha." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I SI --ignore-matching-lines=RE Déan neamhshuim ar línte atá " +"comhoiriúnach\n" +" leis an slonn SI." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "" +"--strip-trailing-cr Dealaigh aisfhilleadh carráiste ó gach líne ionchurtha." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Léigh agus scríobh sonraí sa mhód dénártha." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Caith le gach comhad mar théacschomhad." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C UIMHIR --context[=UIMHIR] Taispeáin UIMHIR líne de chomhthéacs\n" +" cóipeáilte (réamhshocrú = 3).\n" +"-u -U UIMHIR --unified[=UIMHIR] Taispeáin UIMHIR líne de chomhthéacs\n" +" aontaithe (réamhshocrú = 3).\n" +" --label LIPÉAD Bain úsáid as LIPÉAD in ionad ainm comhaid.\n" +" -p --show-c-function Taispeáin an fheidhm C do gach difríocht.\n" +" -F SI --show-function-line=SI Taispeáin an líne is déanaí atá\n" +" comhoiriúnach leis an slonn SI." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Ná taispeáin ach difriúil nó nach ea." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Aschuir script `ed'." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Aschuir diff coitianta." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Aschuir diff i gcruth RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Taispeáin le dhá cholún.\n" +" -W UIMH --width=UIMH Taispeáin UIMH carachtar sa líne ar a mhéad,\n" +" (réamhshocrú=130).\n" +" --left-column Ná taispeáin ach an colún ar clé do línte céanna\n" +" --suppress-common-lines Ná taispeáin línte céanna." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D AINM --ifdef=AINM Taispeáin comhad cumaiscthe chun na diff-aí\n" +" `#ifdef AINM' a léiriú" + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GCINL-group-format=GFMD Taispeáin grúpaí GCINL ionchuir de réir GFMD." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "--line-format=LFMD Taispeáin gach líne ionchuir de réir LFMD." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LCINL-line-format=LFMD Taispeáin línte LCINL ionchuir de réir LFMD." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr " LCINL = `old', `new', nó `unchanged'. GCINL = LCINL nó `changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" Is éard atá i GFMT ná:\n" +" %< línte as COMHAD1\n" +" %> línte as COMHAD2\n" +" %= línte atá i gCOMHAD1 agus COMHAD2 araon\n" +" %[-][LEITHEAD][.[SONRÚ]]{doxX}LITIR sonrú do litir mar C `printf'\n" +" Is LITIR mar a leanas (agus litreacha beaga don ghrúpa `old'):\n" +" F an chéad líne-uimhir\n" +" L an líne-uimhir dheiridh\n" +" N líon na línte = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" Is éard atá i LFMT ná::\n" +" %L ábhar na líne\n" +" %l ábhar na líne, gan aon líne nua\n" +" %[-][LEITHEAD][.[SONRÚ]]{doxX}n sonrú do líne-uimhir mar C `printf'" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Is féidir na teaghráin a leanas a bheith i GLA nó LLA:\n" +" %% %\n" +" %c'C' an carachtar litriúil C\n" +" %c'\\OOO' an carachtar le cód ochtnártha OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate uimhrigh leathanaigh le `pr'." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs leathnaigh táib go spásanna san aschur." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Ailínigh táib trí tháb a chur in ionad spás tosaigh." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=UIMH Tábstop gach UIMH colún (réamhshocrú=8)." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Cuir fochomhadlanna i gcomparáid go hathchúrsach." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Caith le comhad ar iarraidh mar chomhad folamh." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Más ar iarraidh, caith leis an chéad chomhad\n" +" mar chomhad folamh." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "" +"-s --report-identical-files Tuairiscigh nuair atá dhá chomhad comhionanna." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "" +"-X SLONN --exclude=SLONN Fág comhaid as má tá siad comhoiriúnacha le SLONN." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X COMHAD --exclude-from=COMHAD Fág comhaid as má tá siad comhoiriúnacha le " +"haon\n" +" slonn ionadaíochta as an CHOMHAD." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S COMHAD --starting-file=COMHAD Tosaigh le COMHAD agus comhadlanna á " +"gcóimheas." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=COMHAD Cuir COMHAD (nó comhadlann) i gcomparáid le gach oibreann." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=COMHAD Cuir gach oibreann i gcomparáid le COMHAD (nó comhadlann)." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "--horizon-lines=UIMH Coinnigh UIMH líne den réimír/iarmhír choiteann." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Obair go crua le haghaidh níos lú athruithe." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Comhaid móra agus go leor mionathruithe forleata." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"COMHAID = `COMHAD1 COMHAD2' nó `COMHADLANN1 COMHADLANN2' nó `COMHADLANN " +"COMHAD...' nó `COMHAD... COMHADLANN'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Má tá --from-file nó --to-file tugtha, níl a leithéid de shrian ar COMHAID." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Más '-' é an COMHAD, léigh ón ionchur caighdeánach." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Úsáid: %s [ROGHA]... COMHAID\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "luach contrártha don rogha %s: `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "roghanna contrártha le haghaidh na stíle aschuir" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "I %s amháin: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "ní féidir `-' a chur i gcomparáid le comhadlann" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "Níl an rogha -D ar fáil do chomhadlanna" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Fochomhadlanna i gcoitianta: %s agus %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Tá comhad %s ina %s ach tá comhad %s ina %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Is comhionann iad na comhaid %s agus %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "roghanna neamh-chomhoiriúnacha" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "bhí `-' tugtha le haghaidh níos mó ná inchomhad amháin" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "theip ar léamh" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Scríobh i MOCHOMHAD na hathruithe neamhchumaiscthe ó SEANCHOMHAD " +"go DOCHOMHAD." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Taispeáin na hathruithe neamhchumaiscthe agus cuir " +"coinbhleachtaí idir lúibíní." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "" +"-A --show-all Taispeáin gach athrú agus cuir coinbhleachtaí idir lúibíní." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Taispeáin na hathruithe forluiteacha." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Taispeáin na hathruithe forluiteacha, idir lúibíní." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Taispeáin athruithe neamhchumaiscthe forluiteacha." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Taispeáin comhad cumaiscthe in ionad script ed (réamhshocrú -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L LIPÉAD --label=LIPÉAD Úsáid LIPÉAD in ionad ainm comhaid." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Cuir na horduithe `w' agus `q' le scripteanna `ed'." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" +"--diff-program=CLÁR Bain úsáid as an CLÁR chun comhaid a chur i " +"gcomparáid." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Úsáid: %s [ROGHA]... MOCHOMHAD SEANCHOMHAD DOCHOMHAD\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Cuir trí chomhad i gcomparáid, líne ar líne." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "Stádas scortha = 0 (rathúil), 1 (coinbhleachtaí), 2 (trioblóid)." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "earráid inmheánach: formáid de na bloic diff trína chéile" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: theip ar diff: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "earráid inmheánach: cineál neamhbhailí diff san fheidhm process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "formáid diff neamhbhailí; teorantóir neamhbhailí idir athruithe" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "formáid neamhbhailí diff; líne deiridh neamhiomlán" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "níorbh fhéidir an fochlár `%s' a rith" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "formáid neamhbhailí diff; carachtair mhíchearta ag tosach na líne" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "" +"earráid inmheánach: seachadadh cineál neamhbhailí diff go dtí an aschur" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "crapadh an t-inchomhad" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "" +"ní féidir na hainmneacha comhaid `%s' agus `%s' a chur i gcomparáid le chéile" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o COMHAD --output=COMHAD Mód idirghníomhach, ag scríobh an aschuir i " +"gCOMHAD." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Ná bí cásíogair." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Déan neamhshuim ar spásanna bán go hiomlán." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w UIMH --width=UIMH UIMH colún priontála ar a mhéad (réamhshocrú=130)." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Ná taispeáin an colún ar dheis más ionann iad." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Ná taispeáin línte atá i bpáirt acu." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Comhaid móra agus go leor mionathruithe forleata." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Úsáid: %s [ROGHA]... COMHAD1 COMHAD2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Cumaisc difríochtaí idir na comhaid, taobh le taobh." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "ní féidir an t-ionchur caighdeánach a chumasc go hidirghníomhach" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "is comhadlanna iad na comhaid le cur i gcomparáid" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tCuir na leaganacha araon in eagar, agus ceanntásc le gach.\n" +"eb:\tCuir na leaganacha araon in eagar, agus ansin bain úsáid astu.\n" +"el:\tCuir an leagan ar clé in eagar, agus ansin bain úsáid as.\n" +"er:\tCuir an leagan ar dheis in eagar, agus ansin bain úsáid as.\n" +"e:\tCuir leagan nua in eagar.\n" +"l:\tBain úsáid as an leagan ar clé.\n" +"r:\tBain úsáid as an leagan ar dheis.\n" +"s:\tCuir comhlínte san áireamh go balbh.\n" +"v:\tCuir comhlínte san áireamh go foclach.\n" +"q:\tScoir.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: rogha neamhcheadaithe -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Is saorbhogearra an ríomhchlár seo; féach ar an bhunchód le haghaidh\n" +#~ "coinníollacha cóipeála. Níl baránta ar bith ann; go fiú níl baránta ann\n" +#~ "d'INDÍOLTACHT nó FEILIÚNACHT DO FHEIDHM AR LEITH.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Seol tuairiscí fabhtanna chuig <bug-gnu-utils@gnu.org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "tá an rogha `-%ld' as feidhm; bain úsáid as `-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "tá an rogha `-%ld' as feidhm; fág é ar lár" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "fochlár `%s' gan aimsiú" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "theip ar an fhochlár `%s'" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "theip ar an fhochlár `%s' (stádas scortha %d)" diff --git a/po/gl.gmo b/po/gl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..7d41e5e858ce4836a5ff5db3f5ab15ba6148dbd0 GIT binary patch literal 20936 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 literal 0 HcmV?d00001 diff --git a/po/gl.po b/po/gl.po new file mode 100644 index 0000000..4fe5c71 --- /dev/null +++ b/po/gl.po @@ -0,0 +1,1282 @@ +# Galician translation of GNU diffutils +# Copyright © 2000, 2001, 2002 Free Software Foundation, Inc. +# Jacobo Tarrío Barreiro <jtarrio@trasno.net>, 2000, 2001, 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.3\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2002-06-17 10:39+0200\n" +"Last-Translator: Jacobo Tarrío Barreiro <jtarrio@trasno.net>\n" +"Language-Team: Galician <gpul-traduccion@ceu.fi.udc.es>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "erro do programa" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "desbordamento da pila" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Erro do sistema descoñecido" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "ficheiro normal baleiro" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "ficheiro normal" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "directorio" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "ficheiro especial de bloques" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "ficheiro especial de caracteres" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "ligazón simbólica" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "socket" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "cola de mensaxes" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semáforo" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "obxecto de memoria compartida" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "obxecto de memoria con tipo" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "ficheiro raro" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: a opción `%s' é ambigua\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: a opción `--%s' non admite un parámetro\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: a opción `%c%s' non admite un parámetro\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: a opción `%s' precisa dun parámetro\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opción non recoñecida `--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opción non recoñecida `%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opción incorrecta -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: a opción precisa dun parámetro -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: a opción `-W %s' é ambigua\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: a opción `-W %s' non admite un parámetro\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: a opción `%s' precisa dun parámetro\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Éxito" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Non hai coincidencias" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Expresión regular incorrecta" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Carácter de ordeación incorrecto" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Nome de clase de caracteres incorrecto" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Barra invertida ao final" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Referencia cara a atrás incorrecta" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "[ ou [^ sen parella" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "( ou \\( sen parella" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "\\{ sen parella" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Contido de \\{\\} incorrecto" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Fin de rango incorrecto" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Memoria esgotada" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Expresión regular precedente incorrecta" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Fin de expresión regular prematura" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Expresión regular grande de máis" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr ") ou \\) sen parella" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Non hai unha expresión regular anterior" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "memoria esgotada" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Erro do sistema descoñecido" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "valor de --bytes `%s' non válido" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "lonxitude do horizonte `%s' non válida" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "©" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, fuzzy, c-format +msgid "Written by %s.\n" +msgstr "Escrito por Thomas Lord." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "Escrito por Randy Smith." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Escrito por Randy Smith." + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Os ficheiros %s e %s son diferentes\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Os ficheiros binarios %s e %s son diferentes\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Non hai un salto de liña na fin da liña" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Escriba `%s --help' para obter máis información." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "valor de --ignore-initial `%s' non válido" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "as opcións -l e -s son incompatibles" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "fallou a escritura" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "saída estándar" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Amosa-los bytes diferentes." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i N --ignore-initial=N Omiti-los primeiros N bytes de entrada." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i N1:N2 --ignore-initial=N1:N2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Omiti-los primeiros N1 bytes de FICH1 e os primeiros N2 bytes de FICH2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose Amosa-los números e valores dos bytes que difiran." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LÍMITE --bytes=LÍMITE Comparar como moito LÍMITE bytes." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent Non producir nada; só da-lo estado de saída." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Amosar información sobre a versión." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Amosar esta axuda." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Uso: %s [OPCIÓN]... FICH1 [FICH2 [N1 [N2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Comparar dous ficheiros byte a byte." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "N1 e N2 son o número de bytes a omitir en cada ficheiro." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Os valores N poden estar seguidos polos seguintes sufixos multiplicativos:\n" +"kB 1000, K 1024, MB 1.000.000, M 1.048.576,\n" +"GB 1.000.000.000, G 1.073.741.824, e así para T, P, E, Z e Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Se un FICHEIRO é `-' ou non se indica, lese da entrada estándar." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "valor de --bytes `%s' non válido" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "falta un operando despois de `%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "operando `%s' sobrante" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s son diferentes: byte %s, liña %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s son diferentes: byte %s, liña %s é %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: Fin de Ficheiro en %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "lonxitude do contexto `%s' non válida" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "a paxinación non está soportada nesta máquina" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "demasiadas opcións de etiquetas de ficheiro" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "ancho `%s' non válido" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "opcións de anchura conflictivas" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "lonxitude do horizonte `%s' non válida" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "ancho de tabulación `%s' non válido" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "opcións de anchura de tabulación conflictivas" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "Especificáronse --from-file e --to-file ao mesmo tempo" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Compara-los ficheiros liña a liña." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" +"-i --ignore-case Ignorar maiúsculas/minúsculas no contido do ficheiro." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Ignorar maiúsculas/minúsculas no nome do ficheiro." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Ter en conta as maiúsculas/minúsculas\n" +" ao compara-los nomes dos ficheiros." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Ignora-los cambios pola expansión de tabulacións." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "" +"-b --ignore-space-change Ignora-los cambios na cantidade de espacios." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Ignorar tódolos espacios en branco." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B --ignore-blank-lines Ignora-los cambios que teñan tódalas liñas en " +"branco" + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RE --ignore-matching-lines=RE Ignora-los cambios nos que tódalas liñas\n" +" conteñan RE." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "" +"--strip-trailing-cr Elimina-los retornos de carro á fin das liñas de " +"entrada." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Ler e escribir datos en modo binario." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Tratar tódolos ficheiros coma texto" + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C NÚM --context[=NÚM] Amosar NÚM [3] liñas de contexto copiado.\n" +"-u -U NÚM --unified[=NÚM] Amosar NÚM [3] liñas de contexto unificado.\n" +" --label ETIQUETA Usa-la ETIQUETA no canto do nome do ficheiro.\n" +" -p --show-c-function Amosar en que función C está cada cambio.\n" +" -F RE --show-function-line=RE Amosa-la liña máis recente que coincide\n" +" con RE." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Producir unha saída só se os ficheiros teñen diferencias." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Producir un script de ed." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Producir un diff normal." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Producir un diff en formato RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Produci-la saída en dúas columnas.\n" +" -w NÚM --width=NÚM Amosar como moito NÚM [130] columnas de impresión.\n" +" --left-column Amosar só a columna da esquerda nas liñas comúns.\n" +" --suppress-common-lines Non amosa-las liñas comúns." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NOME -ifdef=NOME Amosa-lo ficheiro mesturado con diffs `#ifdef NOME'." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT Similar, pero formata-los grupos de entrada " +"GTYPE\n" +" con GFMT." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LFMT Similar, pero formatar tódalas liñas de entrada con LFMT." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT Similar, pero formata-las liñas de entrada LTYPE\n" +" con LFMT." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE é `old' (vello), `new' (novo) ou `unchanged' (sen cambios).\n" +" GTYPE é LTYPE ou `changed' (con cambios)." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT pode conter:\n" +" %< liñas do FICH1\n" +" %> liñas do FICH2\n" +" %= liñas comúns a FICH1 e FICH2\n" +" %[-][ANCHO][.[PREC]]{doxX}LETRA especificación estilo printf para a " +"LETRA\n" +" As LETRAs son como segue para o novo grupo, en minúsculas para o " +"vello:\n" +" F número da primeira liña\n" +" L número da derradeira liña\n" +" N número de liñas = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT pode conter:\n" +" %L contido da liña\n" +" %l contido da liña, excluíndo os saltos de liña finais\n" +" %[-][ANCHO][.[PREC]]{doxX}n especif. estilo printf do número da liña" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" GFMT e LFMT poden conter:\n" +" %% %\n" +" %c'C' o carácter C\n" +" %c'\\OOO' o carácter de código octal OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Pasa-la saída por `pr' para paxinala." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Expandi-las tabulacións a espacios na saída." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Facer que as tabulacións queden aliñadas poñendo outra\n" +" tabulación ao principio da liña." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=NÚM Tabulacións de NÚM columnas (8 por defecto)." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "" +"-r --recursive Comparar recursivamente os subdirectorios que se atopen." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Trata-los ficheiros ausentes coma baleiros." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Tratar ficheiros vellos ausentes coma baleiros." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "" +"-s --report-identical-files Informar cando dous ficheiros son o mesmo." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x PAT --exclude=PAT Exclui-los ficheiros que coinciden co PATrón." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FICH --exclude-from=FICH Excluir ficheiros que coinciden con algún\n" +" patrón do FICHeiro." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S FICH --starting-file=FICH Comezar no FICHeiro ao comparar directorios." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FICH1 Comparar FICH1 con tódolos operandos. Pode ser directorio." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FICH2 Comparar tódolos operandos con FICH2. Pode ser un " +"directorio." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "--horizon-lines=NUM Manter NUM liñas do prefixo e sufixo comúns." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Procurar atopa-lo conxunto de cambios máis pequeno." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Asumir ficheiros longos e pequenos cambios dispersos." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"Os FICHEIROS son `FICH1 FICH2', `DIR1 DIR2', `DIR FICH...' ou `FICH... DIR'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Se se indica --from-file ou --to-file, non hai restriccións nos FICHEIROS." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Se un FICHEIRO é `-', lese da entrada estándar." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Uso: %s [OPCIÓN]... FICHEIROS\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "valor `%1$s' da opción %2$s conflictivo" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "opcións de estilo da saída conflictivas" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Só en %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "non se pode comparar `-' cun directorio" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "A opción -D non está soportada con directorios" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Subdirectorios comúns: %s e %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "O ficheiro %s é un %s mentres que o ficheiro %s é un %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Os ficheiros %s e %s son idénticos\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +#, fuzzy +msgid "Randy Smith" +msgstr "Escrito por Randy Smith." + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "opcións incompatibles" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "Especificouse `-' para máis dun ficheiro de entrada" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "fallou a lectura" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Producir cambios sen mesturar de FICHVELLO a TEUFICH en MEUFICH." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Amosar cambios sen mesturar cos conflictos entre " +"corchetes" + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "" +"-a --show-all Amosar tódolos cambios, cos conflictos entre corchetes." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Amosa-los cambios que se superpoñen." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Amosa-los cambios que se solapen, poñéndoos entre corchetes." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Amosar cambios non solapados e non mesturados." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Amosa-lo ficheiro mesturado no canto dun script en ed [-A]." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L ETIQ --label=ETIQ Usa-la ETIQueta no canto do nome do ficheiro." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Engadi-los comandos `w' e `q' aos scripts en ed." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" +"--diff-program=PROGRAMA Emprega-lo PROGRAMA para compara-los ficheiros." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Uso: %s [OPCIÓN]... MEUFICH VELLOFICH TEUFICH\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Comparar tres ficheiros liña a liña." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "erro interno: fallo no formato dos bloques diff" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff fallou: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "erro interno: tipo de diff non válido en process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "formato de diff non válido; separador de cambios non válido" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "formato de diff non válido: derradeira liña incompleta" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, fuzzy, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "non se atopou o programa subsidiario `%s'" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "formato de diff non válido: caracteres a principio de liña incorrectos" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "erro interno_ tipo de diff non válido pasado á saída" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "o ficheiro de entrada encolleu" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "non se poden compara-los ficheiros `%s' e `%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +#, fuzzy +msgid "Thomas Lord" +msgstr "Escrito por Thomas Lord." + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o FICH --output=FICH Operar interactivamente, mandando a saída ao " +"FICHeiro." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "" +"-i --ignore-case Ignora-las diferencias entre maiúsculas e minúsculas." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Ignorar tódolos espacios en branco." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "-w NÚM --width=NÚM Amosar como moito NÚM columnas (130 por defecto)." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Amosar só a columna da esquerda nas liñas comúns." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-llines Non amosa-las liñas comúns." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Asumir ficheiros longos e pequenos cambios " +"dispersos." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Uso: %s [OPCIÓN]... FICH1 FICH2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Mestura en dúas columnas das diferencias entre os ficheiros." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "non se pode mestura-la entrada estándar interactivamente" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "ámbolos dous ficheiros a ser comparados son directorios" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tEditar e usar ámbalas dúas versións, cada unha cunha cabeceira.\n" +"eb:\tEditar e usar ámbalas dúas versións.\n" +"el:\tEditar e logo usa-la versión da esquerda.\n" +"er:\tEditar e logo usa-la versión da dereita.\n" +"e:\tEditar unha nova versión.\n" +"l:\tusa-la versión da esquerda.\n" +"r:\tusa-la versión da dereita.\n" +"e:\tEditar unha nova versión.\n" +"s:\tInclui-las liñas comúns silenciosamente.\n" +"v:\tInclui-las liñas comúns faladoramente.\n" +"q:\tSair.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: opción non permitida -- %c\n" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the files named COPYING." +#~ msgstr "" +#~ "Este programa vén SEN GARANTÍA, ata o permitido pola lei.\n" +#~ "Pode redistribuír copias deste programa baixo os termos\n" +#~ "da Licencia Pública Xeral de GNU.\n" +#~ "Para máis información sobre estas materias, vexa o ficheiro chamado " +#~ "COPYING." + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr "Escrito por Torbjörn Granlund e David MacKenzie." + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "" +#~ "Informe dos erros no programa a <bug-gnu-utils@gnu.org>.\n" +#~ "Informe dos erros na traducción a <proxecto@trasno.net>." + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ "Escrito por Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman e Len Tower." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "A opción `-%ld' é obsoleta; empregue `-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "A opción `-%ld' é obsoleta; omítaa" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "fallou o programa subsidiario `%s'" + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "o programa subsidiario `%s' non é executable" + +#~ msgid "" +#~ "SKIP values may be followed by the following multiplicative suffixes:\n" +#~ msgstr "" +#~ "Os valores de N poden ir seguidos polos seguintes sufixos " +#~ "multiplicativos:\n" + +#~ msgid "kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +#~ msgstr "kB 1000, K 1024, MB 1.000.000, M 1.048.576,\n" + +#~ msgid "GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y.\n" +#~ msgstr "GB 1.000.000.000, G 1.073.741.824 e así para T, P, E, Z e Y.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>.\n" +#~ msgstr "Informe dos erros a <bug-gnu-utils@gnu.org>.\n" + +#~ msgid "context length specified twice" +#~ msgstr "a lonxitude do contexto especificouse dúas veces" + +#~ msgid "multiple `--from-file' options" +#~ msgstr "opcións `--from-file' múltiples" + +#~ msgid "multiple `--to-file' options" +#~ msgstr "opcións `--to-file' múltiples" + +#~ msgid "--inhibit-hunk-merge Do not merge hunks." +#~ msgstr "--inhibit-hunk-merge Non mesturar anacos" + +#~ msgid "regular empty executable file" +#~ msgstr "ficheiro normal executable baleiro" + +#~ msgid "regular executable file" +#~ msgstr "ficheiro normal executable" + +#~ msgid "If a FILE is `-', read standard input.\n" +#~ msgstr "Se un FICHEIRO é `-', lese da entrada estándar.\n" + +#~ msgid "--ignore-initial value must be a nonnegative integer" +#~ msgstr "O valor de --ignore-initial debe ser un enteiro non negativo" + +#~ msgid ": not found\n" +#~ msgstr ": non atopado\n" + +#~ msgid "column width must be a positive integer" +#~ msgstr "o ancho da columna debe ser un enteiro positivo" + +#~ msgid "conflicting group format" +#~ msgstr "formato de grupo con conflictos" + +#~ msgid "conflicting line format" +#~ msgstr "formato de liña con conflictos" + +#~ msgid "context length must be a nonnegative integer" +#~ msgstr "a lonxitude do contexto debe ser un enteiro non negativo" + +#~ msgid "horizon must be a nonnegative integer" +#~ msgstr "o horizonte debe ser un enteiro non negativo" diff --git a/po/he.gmo b/po/he.gmo new file mode 100644 index 0000000000000000000000000000000000000000..25825c3624811dda523b8226a4cc68cca8688f74 GIT binary patch literal 20327 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 EKeVCi4FCWD literal 0 HcmV?d00001 diff --git a/po/he.po b/po/he.po new file mode 100644 index 0000000..10b04f1 --- /dev/null +++ b/po/he.po @@ -0,0 +1,1193 @@ +# Hebrew messages for GNU Diffutils -*- coding: hebrew-iso-8bit -*- +# Copyright (C) 2001, 2002 Free Software Foundation, Inc. +# Eli Zaretskii <eliz@is.elta.co.il>, 2001, 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.3\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2002-06-17 13:03+0300\n" +"Last-Translator: Eli Zaretskii <eliz@gnu.org>\n" +"Language-Team: Hebrew <eliz@gnu.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "úéðëúá äøåîç äì÷ú" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "úéðñçî úùéìâ" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "ääåæî-éúìá äì÷ú" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "÷éø õáå÷" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "õáå÷" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "äé÷éú" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "íé÷åìá ï÷úä õáå÷" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "íéåú ï÷úä õáå÷" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo õáå÷" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "éìåáîéñ øåùé÷" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "ò÷ù" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "úåòãåä øåú" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "øåôîñ" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "óúåùî ïåøëæ è÷ééáåà" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "âååéñ ìòá ïåøëæ è÷ééáåà" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "øæåî õáå÷" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s úéðëú øåáò éòîùî-ãç åðéà `%s' ïééôàî\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s úéðëú øåáò èðîåâøà ìá÷î åðéà `--%s' ïééôàî\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s úéðëú øåáò èðîåâøà ìá÷î åðéà `%c%s' ïééôàî\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s úéðëú øåáò èðîåâøà áééçî `%s' ïééôàî\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s úéðëú øåáò `--%s' ääåæî-éúìá ïééôàî\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s úéðëú øåáò `%c%s' ääåæî-éúìá ïééôàî\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s úéðëú øåáò éåâù ïééôàî -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: èðîåâøà áééçî ïééôàî -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s úéðëú øåáò éòîùî-ãç åðéà `-W %s' ïééôàî\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s úéðëú øåáò èðîåâøà ìá÷î åðéà `-W %s' ïééôàî\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s úéðëú øåáò èðîåâøà áééçî `%s' ïééôàî\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "äçìöä" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "äîéàúî úæåøçî äàöîð àì" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "éåâù éøìåâø éåèéá" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "òåãé-éúìá øåãéñ åú" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "íéåú úöåá÷ ìù øëåî-éúìá íù" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "`\\' éøåçà ïñëåìá íééúñî éøìåâø éåèéá" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "íãå÷ éåèéá-úúì äéåâù äééðôä" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "âåæ-ïá åì ïéàù [^ åà [" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "âåæ-ïá åì ïéàù \\( åà (" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "âåæ-ïá åì ïéàù \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "\\{\\} êåúá éåâù äðáî" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "íéåú íåçú ìù äéåâù äøãâä" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "ïåøëæä øîâð" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "íéé÷ åðéà åà éåâù íãå÷ éøìåâø éåèéá" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "éãî íã÷åî íééúñî éøìåâø éåèéá" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "éãî áëøåî åà ìåãâ éøìåâø éåèéá" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "âåæ-ïá åì ïéàù \\) åà )" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "íãå÷ éøìåâø éåèéá ïéà" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "ïåøëæä øîâð" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "ääåæî-éúìá äì÷ú" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "--bytes ïééôàî øåáò `%s' éåâù êøò" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "--horizon-lines ïééôàîá `%s' éåâù úåøåù øôñî" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "©" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, fuzzy, c-format +msgid "Written by %s.\n" +msgstr ".Thomas Lord é\"ò áúëð" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr ".Randy Smith é\"ò áúëð" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr ".Randy Smith é\"ò áúëð" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "äæî äæ íéðåù `%s'-å `%s' íéöá÷ä\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "äæî äæ íéðåù `%s'-å `%s' íééøðéá íéöá÷\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "õáå÷ä óåñá äùãç-äøåù åú øñç" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr ".øúåé áø òãéî úâöäì `%s --help' ùé÷äì äñð" + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "--ignore-initial ïééôàî øåáò `%s' éåâù êøò" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "äæ úà äæ íéøúåñ -s-å -l íéðééôàîä" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "äáéúëá äì÷ú" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "éð÷ú èìô õåøòì" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr " .íéäæ íðéàù íéúá âöä -b --print-bytes" + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr " .èì÷ä ìù íéðåùàø íéúá N ìò âìã -i N --ignore-initial=N" + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "" +" -i N1:N2\n" +" --ignore-initial=N1:N2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr ".éðùä õáå÷á íéúá N2 ìòå ïåùàøä õáå÷á íéúá N1 ìò âìã" + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr ".íéäæ íðéàù íéúáä ìë ìù ãå÷å éøåãéñ 'ñî âöä -l --verbose" + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr " .íéúá N øúåéä ìëì äååùä -n N --bytes=N" + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr " .ãáìá äàéöé ãå÷ ÷ôä ;èìô àìì -s --quiet --silent" + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr " .úéðëúä úñøéâ úà âöä -v --version" + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr " .äæ äøæò êñî âöä --help" + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr " %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]] :ùåîéù ïôåà\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr ".úéáì úéá íéöá÷ éðù äååùä" + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr " .íéöá÷äî ãçà ìëá âìãì ùé íäéìò íéúáä éøôñî íä SKIP2-å SKIP1" + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +" :úåéìôë úåîåéñ íò SKIP éëøò ïééöì ïúéð\n" +" ,M 1,048,576, MB 1,000,000 ,K 1024 ,kB 1000,\n" +" .T, P, E, Z, Y øåáò äàìä ïëå ,G 1,073,741,824 ,GB 1,000,000,000" + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr " .éð÷ú èì÷ õåøòî àø÷ ,ïééåöî åðéà åà `-' åðéä FILE íà" + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "--bytes ïééôàî øåáò `%s' éåâù êøò" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "`%s' éøçà øñç èðîåâøà" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "`%s' éøçà øúåéî èðîåâøà" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s-å %s íéöá÷ä ïéá %s úéá ,%s äøåùî ìçä éðåù\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s-å %s íéöá÷ä ïéá %s úéá ,%s äøåùî ìçä %3o %s %3o %s éðåù\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: %s õáå÷ óåñ\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "`%s' éåâù øù÷ä êøåà" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "åæ úëøòîá èìôä ãåîéòá äëéîú ïéà" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "íéöá÷ úéååú øåáò -L éðééôàî éãî øúåé" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "`%s' éåâù äøåù áçåø" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "íéøúåñ äøåù áçåø éðééôàî" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "--horizon-lines ïééôàîá `%s' éåâù úåøåù øôñî" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "`%s' éåâù Tab áçåø" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "íéøúåñ Tab áçåø éðééôàî" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "--to-file ïäå --from-file ïä úðééö" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr ".äøåù äøåù íéöá÷ éðù äååùä" + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr ".íéöá÷ä ïëåúá úåðè÷î úåìåãâ úåéúåà ìéãáú ìà -i --ignore-case" + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr ".íéöá÷ä úåîùá úåðè÷î úåìåãâ úåéúåà ìéãáú ìà --ignore-file-name-case" + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +" .íéöá÷ä úåîùá úåðè÷î úåìåãâ úåéúåà ìéãáú --no-ignore-file-name-case" + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +" .íéçååøì TAB ïéá íéìãáäî íìòúä -E --ignore-tab-expansion" + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr " .íéçååø úåîëá íéìãáäî íìòúä -b --ignore-space-change" + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr " .íéçååøä ìëî íìòúä -w --ignore-all-space" + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr " .úå÷éø íäéúåøåùù íééåðéùî íìòúä -B --ignore-blank-lines" + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +".RE úéðáúì úåîéàúî íäéúåøåùù íééåðéùî íìòúä -I RE --ignore-matching-lines=RE" + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr " .èì÷ úøåù ìë óåñî CR éååú ÷ìñ --strip-trailing-cr" + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr " .éøàðéá ïôåàá áåúëå àø÷ --binary" + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr " .èñ÷è éöá÷áë íéöá÷ä ìëá ìôè -a --text" + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +" .÷úòåî èñ÷èðå÷ úåøåù (3 :ç\"îøá) NUM äàøä -c -C NUM --context[=NUM]\n" +" .ãçåàî èñ÷èðå÷ úåøåù (3 :ç\"îøá) NUM äàøä -u -U NUM --unified[=NUM]\n" +" .íù íå÷îá LABEL-á ùîúùä --label LABEL\n" +" .éåðéù ìë ìù C úééö÷ðåô íù äàøä -p --show-c-function\n" +" .RE úéðáúì äîéàúîù äðåøçà äøåù äàøä -F RE --show-function-line=RE" + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr " .íéðåù íéöá÷ä íà øåîà ÷ø -q --brief" + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr " .ed êøåò øåáò úåàøåä úîéùø ÷ôä -e --ed" + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr " .ìéâø èîøåôá íééåðéù ÷ôä --normal" + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr " .RCS èîøåôá íééåðéù ÷ôä -n --rcs" + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +" .åæ ãöì åæ úåãåîò éúùá èìô êåøò -y --side-by-side\n" +" .íéååú (130 :ç\"îøá) NUM-ì èìô úåøåù ìáâä -W NUM --width=NUM\n" +" .úéìàîùä úà ÷ø âöä ,úåäæ úåøåùä íà --left-column\n" +" .úåäæ úåøåù ììë âéöú ìà --suppress-common-lines" + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "`#ifdef NAME'-á íééåðéù ãøôä ,áìåùî õáå÷ ÷ôä -D NAME --ifdef=NAME" + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"GFMT úøæòá GTYPE âåñî èì÷ úåöåá÷ èîøô êà ,ì\"ðë --GTYPE-group-format=GFMT" + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr " .LFMT úøæòá úåøåù èîøô êà ,ì\"ðë --line-format=LFMT" + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +".LFMT úøæòá LTYPE âåñî èì÷ úåøåù èîøô êà ,ì\"ðë --LTYPE-group-format=LFMT" + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr " .`changed' åà LTYPE åîë GTYPE .`unchanged' åà `new' ,`old' àåä LTYPE" + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" :ìåìëì ìåëé GFMT\n" +" FILE1-î úåøåù %<\n" +" FILE2-î úåøåù %>\n" +" FILE2-å FILE1-ì úåôúåùî úåøåù %=\n" +" LETTER øåáò printf ïåðâñá úæåøçî %[-][WIDTH][.[PREC]]{doxX}LETTER\n" +" :(äðùé äöåá÷ øåáò úåðè÷ úåéúåà) úåàáä úåéúåàä úçà àéä LETTER\n" +" äðåùàø äøåù øôñî F\n" +" äðåøçà äøåù øôñî L\n" +" L-F+1 = úåøåùä øôñî N\n" +" F-1 E\n" +" M+1 M" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" :ìåìëì ìåëé LFMT\n" +" äøåù ïëåú %L\n" +" äøåùä óåñ åú èòîì äøåù ïëåú %l\n" +"èì÷ úøåù øåáò printf ïåðâñá úæåøçî %[-][WIDTH][.[PREC]]{doxX}n" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" :íâ ìåìëì íéìåëé LFMT åà GFMT\n" +" %% %\n" +" C ããåá åú %c'C'\n" +" OOO éìè÷åà ãå÷ ìòá åú %c'\\OOO'" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr " .ãåîéò íùì `pr' êøã èìô áúð -l --paginate" + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr " .èìôá íéçååøì TAB éååú êåôä -t --expand-tabs" + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr " .äøåùä éðôì TAB \"ò íé-TAB øùé -T --initial-tab" + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr " .(8 ç\"îøá) úåãåîò NUM ìë Tab --tabsize=NUM" + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr " .éáéñøå÷ø ïôåàá úåé÷éú-úú äååùä -r --recursive" + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr " .íé÷éø åéä åìéàë íéøñç íéöá÷á ìôè -N --new-file" + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +" .íé÷éø åéä åìéàë íéøñç íéðåùàø íéöá÷á ìôè --unidirectional-new-file" + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "" +" .íéäæ íéöá÷ ìò çååã -s --report-identical-files" + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr " .PAT úéðáúì íéîéàúî íäéúåîùù íéöá÷ ìò âìã -x PAT --exclude=PAT" + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"FILE-á úåéðáúì íéîéàúî íäéúåîùù íéöá÷ ìò âìã -X FILE --exclude-from=FILE" + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +" .FILE õáå÷á úåé÷éú úàååùä ìçúä -S FILE --starting-file=FILE" + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +".äé÷éú úåéäì ìåëé FILE1 .íéèðîåâøàä øàù ìëì FILE1 äååùä --from-file=FILE1" + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +" .äé÷éú úåéäì ìåëé FILE2 .FILE2-ì íéèðîåâøàä ìë äååùä --to-file=FILE2" + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +".íéöá÷ä íåéñå äìéçúá úåôúåùî úåøåù NUM øàùä --horizon-lines=NUM" + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr " .íééåðéùä úöåá÷ úà ïéè÷äì ìãúùä -d --minimal" + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr " .íé÷çåøîå íéðè÷ íééåðéùå íéìåãâ íéöá÷ çðä --speed-large-files" + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +".`FILE... DIR' åà `DIR FILE...' åà `DIR1 DIR2' åà `FILE1 FILE2' íä FILES" + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +" .FILES ìò úåìáâî ïéà éæà ,--to-file åà --from-file ïééôàî ïåúð íà" + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "" +" .éð÷úä èì÷ä õøòî àø÷ ,`-' àåä FILE íà" + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "%s [OPTION]... FILES :ùåîéù ïôåà\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "%s ïééôàî ìù íãå÷ êøò øúåñ `%s' êøò" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "èìô ïåðâñ ìù íéøúåñ íéðééôàî" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "%s-á ÷ø àöîð %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "äé÷éúì `-' úååùäì úåøùôà ïéà" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "úåé÷éú øåáò -D ïééôàîá äëéîú ïéà" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "%s-å %s :úåäæ úåé÷éú-úú\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "%s %s-ì %s %s úååùäì ïúéð àì\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "íéäæ íðéä %s-å %s íéöá÷ä\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +#, fuzzy +msgid "Randy Smith" +msgstr ".Randy Smith é\"ò áúëð" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "íéøúåñ íéðééôàî" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "ãçà èì÷ õáå÷î øúåé øåáò `-' úðééö" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "äàéø÷á äì÷ú" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "MYFILE êåú ìà YOURFILE-ì OLDFILE-î âåæéî àìì íééåðéù -e --ed" + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +" .íéè÷éìôðå÷ ïîñ ,âåæéî àìì íééåðéù âöä -E --show-overlap" + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr " .íéè÷éìôðå÷ ïîñ ,íééåðéùä ìë úà âöä -A --show-all" + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "" +" .íéôôåç íééåðéù âöä -x --overlap-only" + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr " .íúåà ïîñå íéôôåç íééåðéù âöä -X" + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr " .âåæéî àììå íéôôåç íðéàù íééåðéù âöä -3 --easy-only" + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr " .(-A ç\"îøá) ed úåàøåä íå÷îá âæåîî õáå÷ áåúë -m --merge" + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "" +" .õáå÷ä íù íå÷îá LABEL-á ùîúùä -L LABEL --label=LABEL" + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr " .ed úåãå÷ô íåéñá `q'-å `w' úåãå÷ô áåúë -i" + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" +" .íéöá÷ úàåùäì PROGRAM úéðëúá ùîúùä --diff-program=PROGRAM" + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "%s [OPTION]... MYFILE OLDFILE YOURFILE :ùåîéù ïôåà\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr ".úéáì úéá íéöá÷ äùìù äååùä" + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "diff éòè÷ èîøåôá äçéøî :úéîéðô äðëú úàéâù" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s é\"ò diff úìòôäá äì÷ú :" + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "process_diff úééö÷ðåôá éåðéù ìù éåâù âåñ :úéîéðô äðëú úàéâù" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "äéåâù íééåðéù úãøôä úæåøçî :éåðéù ìù éåâù èîøåô" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "äîìù äðéà äðåøçà äøåù :éåðéù ìù éåâù èîøåô" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, fuzzy, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "äàöîð àì `%s' úéðëú-úú" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "äøåù úìéçúá íééåâù íéååú :éåðéù ìù éåâù èîøåô" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "èìô éëøöì éåðéù ìù éåâù âåñ :úéîéðô äðëú úàéâù" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "÷îèöä èì÷ õáå÷" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "`%s'-å `%s' íéöá÷ úåîù úååùäì ïúéð àì" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +#, fuzzy +msgid "Thomas Lord" +msgstr ".Thomas Lord é\"ò áúëð" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr " .FILE-ì èìô ,úéáéè÷àøèðéà äìåòô -o FILE --output=FILE" + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr " .úåðè÷å úåìåãâ úåéúåà ïéá íéìãáäî íìòúä -i --ignore-case" + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr " .øçà ïáì çèùå íéçååøî íìòúä -W --ignore-all-space" + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr ".äøåùì (130 ç\"îøá) íéååú NUM øúåéä ìëì âöä -w NUM --width=NUM" + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr " .úéìàîùä úà ÷ø âöä ,úåäæ úåøåùä íà -l --left-column" + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "" +" .úåäæ úåøåù ììë âéöú ìà -s --suppress-common-lines" + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr " .íé÷çåøîå íéðè÷ íééåðéùå íéìåãâ íéöá÷ çðä -H --speed-large-files" + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "%s [OPTION]... FILE1 FILE2 :ùåîéù ïôåà\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr ".äæ ãöá äæ íéöá÷ ïéá íééåðéù ìù âåæéî" + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "éáéè÷àøèðéà ïôåàá éð÷ú èì÷ õåøò âæîì úåøùôà ïéà" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "úåé÷éú íðéä äàååùäì íéöá÷ä éðù" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed -- äúøúåë íò úçà ìë ,úåàñøâä éúùá ùîúùä æàå ,êåøò\n" +"eb -- úåàñøâä éúùá ùîúùä æàå ,êåøò\n" +"el -- ìàîùîù àñøâá ùîúùä æàå ,êåøò\n" +"er -- ïéîéîù àñøâá ùîúùä æàå ,êåøò\n" +"e -- éøîâì äùãç àñøâ êåøò\n" +"l -- ìàîùîù àñøâá ùîúùä\n" +"r -- ïéîéîù àñøâá ùîúùä\n" +"s -- ïâéöäì éìáî úåôúåùî úåøåù ÷úòä\n" +"v -- ïúâöä êåú úåôúåùî úåøåù ÷úòä\n" +"q -- äàéöé\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: é÷åç-éúìá ïééôàî -- %c\n" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the files named COPYING." +#~ msgstr "" +#~ " .úàæ øéúî ÷åçäù äîë ãò ,àåäùìë úåéøçà áúëá äååìî äðéà åæ úéðëåú\n" +#~ ".GNU General Public License ïåéùøä éàðúì íàúäá åæ úéðëåú õéôäì íëúåëæ\n" +#~ " .COPYING åîùù õáå÷á åðééò ,åìà íéðéðòá èåøéô øúéì" + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr ".David MacKenzie-å Torbjorn Granlund é\"ò áúëð" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr ".<bug-gnu-utils@gnu.org> úáåúëì úåì÷ú ìò íéçååéã çåìùì àð" + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ " ,David Hayes ,Mike Haertel ,Paul Eggert é\"ò " +#~ "áúëð\n" +#~ " .Len Tower-å ,Richard " +#~ "Stallman" + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "ïùåéî åðéäù `-%ld' íå÷îá `-%c %ld'-á ùîúùäì õìîåî" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "ïùåéî åðéäù `-%ld'-á ùîúùäì àì õìîåî" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "`%s' úéðëú-úú úöøäá ïåìùë" + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "òåöéá úá äðéà `%s' úéðëú-úú" diff --git a/po/hu.gmo b/po/hu.gmo new file mode 100644 index 0000000000000000000000000000000000000000..388b7840c8c4bdf0407e38b2bcc0a1132fe2a6a7 GIT binary patch literal 22012 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 literal 0 HcmV?d00001 diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..1b60e9a --- /dev/null +++ b/po/hu.po @@ -0,0 +1,1237 @@ +# Hungarian traslation of diffutils +# Copyright (C) 2002 Free Software Foundation, Inc. +# Gábor István <stive@mezobereny.hu>, 2002 +# Andras Timar <timar@fsf.hu>, 2004 +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2004-07-04 11:22+0100\n" +"Last-Translator: Andras Timar <timar@fsf.hu>\n" +"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.2\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "programhiba" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "veremtúlcsordulás" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Ismeretlen rendszerhiba" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "reguláris üres fájl" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "reguláris fájl" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "könyvtár" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "blokkos speciális fájl" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "karakteres speciális fájl" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "szimbolikus link" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "socket" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "üzenetsor" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "szemafor" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "osztott memóriaobjektum" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "típusos memória objektum" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "furcsa fájl" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: a `%s' kapcsoló nem egyértelmû\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: a `--%s' kapcsoló nem fogad el argumentumot\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: a `%c%s' kapcsoló nem fogad el argumentumot\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: a `%s' kapcsolóhoz argumentum szükséges\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: ismeretlen kapcsoló: `--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: ismeretlen kapcsoló: `%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: érvénytelen kapcsoló -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: a kapcsoló argumentumot igényel -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: a `-W %s' kapcsoló nem egyértelmû\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: a `-W %s' kapcsoló nem fogad el argumentumot\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: a `%s' kapcsolóhoz argumentum szükséges\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Sikerült" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Nincs találat" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Érvénytelen reguláris kifejezés" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Érvénytelen collation karakter" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Érvénytelen karakterosztálynév" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Záró backslash" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Érvénytelen visszahivatkozás" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Pár nélküli [ vagy [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Pár nélküli ( vagy \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Pár nélküli \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Érvénytelen tartalom a \\{\\}-ben" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Érvénytelen tartományvég" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Elfogyott a memória" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Érvénytelen volt az elõzõ reguláris kifejezés" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "A reguláris kifejezés túl hamar ért véget" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Túl nagy reguláris kifejezés" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Pár nélküli ) vagy \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Nincs elõzõ reguláris kifejezés" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "elfogyott a memória" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Ismeretlen rendszerhiba" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "érvénytelen --bytes érték `%s'" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "érvénytelen munkaszinthossz `%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Írta %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Írta %s és %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Írta %s, %s és %s.\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 "" +"Írta %s, %s, %s\n" +"és %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Írta %s, %s, %s,\n" +"%s és %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Írta %s, %s, %s,\n" +"%s, %s és %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Írta %s, %s, %s,\n" +"%s, %s, %s és %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Írta %s, %s, %s,\n" +"%s, %s, %s, %s\n" +"és %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Írta %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s és %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Írta %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s és mások.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "A(z) %s és a(z) %s fájlok különböznek\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "A(z) %s és a(z) %s fájlok különböznek\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Nincs újsor a fájl végén" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Próbálja a `%s --help' kapcsolót további információért." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "érvénytelen --ignore-initial érték: `%s'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "a -l és a -s kapcsolók összeférhetetlenek" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "az írás sikertelen" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "szabványos kimenet" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Kiírja a különbözõ byte-okat." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i UGRÁS --ignore-initial=UGRÁS Az elsõ UGRÁS db byte-ot kihagyja." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i UGRÁS1:UGRÁS2 --ignore-initial=UGRÁS1:UGRÁS2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr " Átlépi a FÁJL1 elsõ UGRÁS1 byte-ját és a FÁJL2 elsõ UGRÁS2 byte-ját" + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose Kiírja a byte-ok számát és az összes különbözõ byte értékét." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n HATÁR --bytes=HATÁR Legfeljebb HATÁR byte-ot hasonlít össze." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent Nincs kimenet, csak visszatérési érték." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version A kimenet a verziószám." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Kiírja ezt a segítséget." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Használat: %s [KAPCSOLÓ]... FÁJL1 [FÁJL2 [UGRÁS1 [UGRÁS2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Összehasonlít két fájlt byte-onként." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "UGRÁS1 és UGRÁS2 byte-ot lép át az egyes fájlokban." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Az UGRÁS értékek után a következõ szorzóutótagokat lehet írni:\n" +"kB 1000, K 1024, MB 1 000 000, M 1 048 576,\n" +"GB 1 000 000 000, G 1 073 741 824, és így tovább: T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Ha a FÁJL a `-' vagy hiányzik, akkor a szabványos bemenetet használja." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"A kilépési állapotkód 0, ha a bemenetek azonosak; 1, ha különbözõk; 2, ha " +"hiba történt." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "érvénytelen --bytes érték `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "hiányzó operandus a `%s' után" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "felesleges operandus `%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s eltér: byte: %s, sor: %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s eltér: byte %s, sor %s %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF %s-nél\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "érvénytelen környezethossz `%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "a tördelés nem támogatott ezen a gépen" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "túl sok fájlcímke-beállítás" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "érvénytelen szélesség `%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "összeférhetlen szélességbeállítások" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "érvénytelen munkaszinthossz `%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "érvénytelen tabulátorméret `%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "összeférhetlen tabulátorméret-beállítások" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "a --from-file és a --to-file is meg van adva" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Fájlok összehasonlítása sorról sorra." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case Nem tesz különbséget a kis- és nagybetûk között." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Fájlneveknél nem tesz különbséget\n" +" a kis- és nagybetûk közt." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Fájlneveknél figyeli a kis- és nagybetûk\n" +" közti különbséget" + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "-E --ignore-tab-expansion Nem figyeli a tab/szóköz cserét." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Nem figyeli az üres helyek változtatását." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Nem figyel semmilyen üres helyet." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines Figyelmen kívül hagyja az üres sorokat." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RK --ignore-matching-lines=RK Nem figyeli a RK-re illeszkedõ sorokat." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "" +"--strip-trailing-cr A bemenetbõl elhagyja a befejezõ kocsivissza " +"karaktereket." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Olvasás és írás bináris módban." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Az összes fájlt szövegként kezeli" + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C SZÁM --context[=SZÁM] SZÁM (alapból 3) sor 'másolt' környezetet ír " +"ki.\n" +"-u -U SZÁM --unified[=SZÁM] SZÁM (alapból 3) sor 'egyesített' környezetet " +"ír ki.\n" +" --label CÍMKE CÍMKE használata a fájlnév helyett.\n" +" -p --show-c-function Megmutatja, hogy a változás melyik C függvényben " +"van.\n" +" -F RK --show-function-line=RK Megmutatja a legközelebbi RK-ra illeszkedõ " +"sort." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Csak akkor van kimenet, ha a fájlok eltérnek." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed A kimenet egy ed-parancsfájl." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal A kimenet egy normál diff." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs A kimenet RCS formátumú diff." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side A kimenet két oszlop.\n" +" -W SZÁM --width=SZÁM Legfeljebb SZÁM széles kimenet (alapból 130).\n" +" --left-column A közös sorokat csak bal oldalon írja ki.\n" +" --suppress-common-lines Nem írja ki a közös sorokat." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NÉV--ifdef=NÉV Kiírja az összefésült fájlt `#ifdef NÉV' direktívákkal " +"jelölve a különbségeket." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT Hasonló, de a GTYPE bemeneti csoportokat formázza " +"a GFMT formátumra." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LFMT Hasonló, de minden bemeneti sort a LFMT formátumúra " +"formáz." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT Hasonló, de az LTYPE típusú bemeneti sorokat LFMT " +"formátumúra formázza." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" az LTYPE `old', `new', vagy `unchanged'. a GTYPE LTYPE vagy `changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT tartalmazhatja:\n" +" %< a FÁJL1 sorait\n" +" %> a FÁJL2 sorait\n" +" %= a FÁJL1 és FÁJL2 közös sorait\n" +" %[-][WIDTH][.[PREC]]{doxX}BETÛ printf-stílusú formázást\n" +" BETÛ a következõ lehet az új csoportra, kisbetûvel régi csoportra:\n" +" F elsõ sor száma\n" +" L utolsó sor száma\n" +" N sorok száma = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT tartalmazhatja:\n" +" %L sor tartalma\n" +" %l sor tartalma, új sorral nélkül\n" +" %[-][WIDTH][.[PREC]]{doxX}n bemeneti sorok számának printf-stílusú " +"megadása" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" GFMT és LFMT is tartalmazhatja:\n" +" %% %\n" +" %c'C' egyetlen C karakter\n" +" %c'\\OOO' karakter nyolcas számrendszer beli értéke" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "" +"-l --paginate A kimenet oldalainak a lapokra tördelése a`pr' programmal." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "" +"-t --expand-tabs A tabulátorokat szóközzel helyettesíti a kimenetben." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab A tabulátorok helyesen jelennek meg a kezdõ tabulátornak " +"köszönhetõen." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=NUM Tabulátorpozíció minden NUM. nyomtatási oszlopban (alapból 8)." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Az összes alkönyvtárat megvizsgálja." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file A hiányzó fájlokat üresként kezeli." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "--unidirectional-new-file A hiányzó elsõ fájlokat üresként kezeli." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Jelenti, ha a két fájl azonos." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x MINTA --exclude=MINTA Kihagyja a MINTÁ-ra illeszkedõ fájlokat." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FÁJL --exclude-from=FÁJL Kihagyja a FÁJL-ban megtalálható mintákra\n" +" illeszkedõ fájlokat." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S FÁJL --starting-file=FÁJL A FÁJL-lal kezdi a könyvtárak " +"összehasolítását." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FÁJL1 FÁJL1 összehasonlítása minden operandussal.\n" +" FÁJL1 lehet könyvtár is." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FÁJL2 Minden operandus összehasonlítása FÁJL2-vel.\n" +" FÁJL2 lehet könyvtár." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=SZÁM SZÁM számú sort tart meg a közös elõ és utótagból." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Megpróbál kevesebb különbséget találni." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Nagy fájlokat feltételez sok, elszórt, kis változással." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"A FÁJLOK lehetnek `FÁJL1 FÁJL2' vagy `KÖNYVTÁR1 KÖNYVTÁR2' vagy\n" +"`KÖNYVTÁR FÁJL...' vagy `FÁJL... KÖNYVTÁR'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Ha --from-file vagy --to-file meg van adva, nincsenek megszorítások a FÁJLOK-" +"ra." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Ha a FÁJL `-', a szabványos bemenetrõl olvas." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Használat: %s [KAPCSOLÓK]... FÁJLOK\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "összeférhetetlen %s kapcsoló értéke: `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "összeférhetetlen kimenetistílus-kapcsolók" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Csak %s -ben: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "`-'-t nem lehet összehasonlítani egy könyvtárral" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "-D kapcsoló nem támogatott könyvtárak esetén" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Közös alkönyvtárak: %s és %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "A(z) %s fájl egy %s, viszont a(z) %s fájl egy %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "%s és %s fájlok azonosak\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "összeférhetetlen kapcsolók" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "`-' több mint egy bemeneti fájlhoz lett megadva" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "olvasás sikertelen" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed A RÉGI fájlból az ÚJ fájlba át nem került változásokat kiírja a " +"SAJÁT fájlba." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Kiírja az át nem vitt változásokat, zárójelezi az " +"ütközéseket." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Kiírja az összes változást, zárójelezi az ütközéseket." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Kiírja az átfedõ változtatásokat." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr " -X Kiírja és zárójelezi az átfedõ változtatásokat." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Kiírja a nem átvitt és nem átfedõ változásokat." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Az összefésült fájlt írja ki ed-parancsfájl helyett (alapból -" +"A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L CÍMKE --label=CÍMKE A CÍMKÉ-t használja fájlnév helyet." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Hozzáfûzi a `w' és a`q' parancsokat az ed-parancsfájlhoz." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" +"--diff-program=PROGRAM A PROGRAM-ot használja a fájlok\n" +" összehasonlításához." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Használat: %s [KAPCSOLÓ]... SAJÁT RÉGI ÚJ\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Három fájlt hasonlít össze sorról sorra." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"A kilépési állapotkód 0, ha sikeres; 1, ha konfliktus van; 2, ha hiba " +"történt." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "belsõ hiba: a program megzavarodott a különbségblokkok formátumánál" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: összehasonlítás sikertelen: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "belsõ hiba: érvénytelen összehasonlítási típus a process_diff-ben" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "érvénytelen összehasonlítás-formátum; érvénytelen változáselválasztó" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "érvénytelen összehasonlítás-formátum; befejezetlen utolsó sor" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "`%s' segédprogram nem indítható" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "érvénytelen összehasonlítási formátum; rossz sor eleji karakter" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "belsõ hiba: érvénytelen összehasonlítási típus került a kimenetre" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "a bementi fájl összement" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "nem lehet a(z) `%s' és a(z) `%s' fájlneveket összehasonlítani" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o FÁJL --output=FÁJL Interaktívan dolgozik, a kimenetet a FÁJL-ba küldi." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case A kis- és nagybetûket azonosnak tekinti." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Figyelmen kívül hagy minden üres helyet." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "-w SZÁM --width=SZÁM Legfeljebb SZÁM széles kimenet (alapból 130)." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column A közös sorokat csak bal oldra írja ki." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Nem írja ki a közös sorokat." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Nagy fájlokat feltételez sok, elszórt, kis " +"változással." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Használat: %s [KAPCSOLÓ]... FÁJL1 FÁJL2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Egymás mellett jeleníti a fájlokat és a különbségeiket." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "nem lehet interaktívan összefûzni a szabványos bemenetet." + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "mindkét összehasonlítandó fájl könyvtár" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tSzerkesztés, majd mind a két változat használata fejlécekkel díszítve.\n" +"eb:\tSzerkesztés, majd mind a két változat használata.\n" +"el:\tSzerkesztés, majd a bal oldali változat használata.\n" +"er:\tSzerkesztés, majd a jobb oldali változat használata.\n" +"e:\tÚj változat írása.\n" +"l:\tA bal oldali változat használata.\n" +"r:\tA jobb oldali változat használata.\n" +"s:\tAz azonos sorok beépítése figyelmeztetés nélkül.\n" +"v:\tAz azonos sorok beépítése figyelmeztetéssel.\n" +"q:\tKilépés.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: nem megengedett kapcsoló -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Ez szabad szoftver; a sokszorosításra vonatkozó feltételeket lásd a " +#~ "forrásban.\n" +#~ "SEMMILYEN garanciát nem vállalunk, még azt sem állítjuk, hogy ez a " +#~ "program\n" +#~ "KERESKEDELMI CÉLOKRA ALKALMAS vagy HASZNÁLHATÓ EGY ADOTT FELADATRA.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "A hibákat <bug-gnu-utils@gnu.org> címre kérjük jelenteni." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "a `-%ld' kapcsoló elavult; használja a `-%c %ld' kapcsolót " + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "a `-%ld' kapcsoló elavult; ne használja" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "`%s' segédprogram nem található" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "`%s' segédprogram futása sikertelen" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "`%s' segédprogram futása sikertelen (kilépési állapotkód: %d)" diff --git a/po/id.gmo b/po/id.gmo new file mode 100644 index 0000000000000000000000000000000000000000..7ea403adcaae604082789ae562080db8b639bbb7 GIT binary patch literal 25416 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 literal 0 HcmV?d00001 diff --git a/po/id.po b/po/id.po new file mode 100644 index 0000000..16268fc --- /dev/null +++ b/po/id.po @@ -0,0 +1,1245 @@ +# Pesan bahasa indonesia untuk diffutils +# Copyright (C) 2002 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils package. +# Tedi Heriyanto <tedi_h@gmx.net>, 2002. +# Arif E. Nugroho <arif_endro@yahoo.com>, 2008, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.9\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2010-02-14 08:00+0700\n" +"Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\n" +"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "kesalahan program" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "overflow stack" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Kesalahan sistem tidak dikenal" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "berkas reguler kosong" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "berkas reguler" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "direktori" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "berkas blok spesial" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "berkas karakter spesial" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "link simbolik" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "soket" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "antrian pesan" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semaphore" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "objek memori bersama" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "tipe objek memori" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "berkas aneh" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: pilihan '%s' ambigu\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: pilihan '--%s' tidak mengijinkan sebuah argumen\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: pilihan '%c%s' tidak mengijinkan sebuah argumen\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: pilihan '%s' membutuhkan sebuah argumen\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: pilihan '--%s' tidak dikenal\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: pilihan '%c%s' tidak dikenal\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: pilihan -- '%c' tidak valid\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: pilihan -- '%c' membutuhkan sebuah argumen\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: pilihan '-W %s' ambigu\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: pilihan '-W %s' tidak mengijinkan sebuah argumen\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: pilihan '%s' membutuhkan sebuah argumen\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "`" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "'" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Sukses" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Tidak cocok" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Ekspresi reguler tidak valid" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Karakter kolasi tidak valid" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Nama kelas karakter tidak valid" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Akhiran backslash" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Referensi balik tidak valid" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Tidak cocok [ atau [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Tidak cocok ( atau \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Tidak cocok \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Isi dari \\{\\} tidak valid" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Batas akhir tidak valid" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Kehabisan memori" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Ekspresi reguler yang mengawali tidak valid" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Ekspresi reguler berakhir dengan prematur" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Ekspresi reguler terlalu besar" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Tidak cocok ) atau \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Tidak ada ekspresi reguler sebelumnya" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "kehabisan memori" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "stdin" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "stdout" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "stderr" + +#: lib/xfreopen.c:38 +msgid "unknown stream" +msgstr "aliran tidak dikenal" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "gagal untuk membuka kembali %s dengan mode %s" + +#: lib/xstrtol-error.c:63 +#, c-format +msgid "invalid %s%s argument `%s'" +msgstr "argumen %s%s tidak valid `%s'" + +#: lib/xstrtol-error.c:68 +#, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "akhiran dalam argumen %s%s tidak valid `%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "%s%s argumen `%s' terlalu besar" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "Dibungkus oleh %s (%s)\n" + +#: lib/version-etc.c:77 +#, c-format +msgid "Packaged by %s\n" +msgstr "Dibungkus oleh %s\n" + +#. 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:84 +msgid "(C)" +msgstr "(C)" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" +"\n" +"Lisensi GPLv3+: GNU GPL versi 3 atau selanjutnya <http://gnu.org/licenses/" +"gpl.html>.\n" +"Ini adalah perangkat lunak bebas: anda bebas untuk mengubah dan " +"mendistribusikannya.\n" +"Tidak ada JAMINAN APAPUN, sepanjang masih diijinkan oleh hukum yang " +"berlaku.\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Ditulis oleh %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Ditulis oleh %s dan %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Ditulis oleh %s, %s, dan %s.\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 "" +"Ditulias oleh %s, %s, %s,\n" +"dan %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Ditulis oleh %s, %s, %s,\n" +"%s, dan %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Ditulis oleh %s, %s, %s,\n" +"%s, %s, dan %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Ditulis oleh %s, %s, %s,\n" +"%s, %s, %s, dan %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Ditulis oleh %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"dan %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Ditulis oleh %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, dan %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Ditulis oleh %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, dan yang lainnya.\n" + +#. 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 "" +"\n" +"Laporkan bugs ke: %s\n" + +#: lib/version-etc.c:247 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "Laporkan %s bugs ke: %s\n" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s halaman rumah: <%s>\n" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "%s halaman rumah: <http://www.gnu.org/software/%s/>\n" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Bantuan umum menggunakan perangkat lunak GNU: <http://www.gnu.org/gethelp>\n" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Berkas %s dan %s berbeda\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "File biner %s dan %s berbeda\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Tidak ada baris-baru di akhir dari berkas" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "David MacKenzie" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Coba `%s --help' untuk informasi lebih lanjut." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "tidak valid --ignore-initial nilai `%s'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "pilihan -l dan -s tidak kompatibel" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "gagal menulis" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "standar keluaran" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Tampilkan byte yang berbeda." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i SKIP --ignore-initial=SKIP Lewati SKIP byte pertama dari masukan." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr " Lewati SKIP1 byte pertama FILE1 dan SKIP2 byte pertama FILE2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose Keluarkan jumlah byte dan nilai semua byte yang berbeda." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LIMIT --bytes=LIMIT Bandingkan paling banyak LIMIT byte." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "" +"-s --quiet --silent Tidak mengeluarkan apapun; hanya memberikan status " +"keluar saja." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Tampilkan informasi versi." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Tampilkan bantuan ini." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Penggunaan: %s [PILIHAN]... BERKAS1 [BERKAS2 [SKIP1 [SKIP2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Bandingkan dua file byte per byte" + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "SKIP1 dan SKIP2 adalah jumlah byte yang harus dilewati di tiap file." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Nilai SKIP dapat diikuti oleh suffiks perkalian berikut:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, dan seterusnya untuk T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Jika sebuah FILE adalah `-' atau tidak ada, baca input standar" + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"Status keluar adalah 0 jika masukan sama, 1 jika berbeda, 2 jika bermasalah." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "nilai --byte tidak valid `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "tidak ada operand setelah `%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "operand ekstra `%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s berbeda: byte %s, baris %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s berbeda: byte %s, baris %s adalah %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF pada %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "Paul Eggert" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "Mike Haertel" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "David Hayes" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "Richard Stallman" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "Len Tower" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "panjang context tidak valid `%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "paginasi tidak didukung pada host ini" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "terlalu banyak option label file" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "lebar tidak valid `%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "option lebar konflik" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "panjang horizon tidak valid `%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "tabsize tidak valid `%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "option tabsize konflik" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "--from-file dan --to-file keduanya disebutkan" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Bandingkan file baris per baris" + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case Abaikan beda case dalam isi file." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "--ignore-file-name-case Abaikan case saat membandingkan nama file." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Pertimbangkan case saat membandingkan nama file." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "-E --ignore-tab-expansion Abaikan perubahan akibat ekspansi tab." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Abaikan perubahan sejumlah white space." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Abaikan seluruh white space." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines Abaikan perubahan baris kosong." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RE --ignore-matching-lines=RE Abaikan perubahan baris yang cocok dg RE." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Hapus trailing carriage return pada input." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Baca dan tulis data dalam mode biner." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Perlakukan seluruh file sebagai teks." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C NUM --context[=NUM] Output NUM (baku 3) baris isi yang disalin.\n" +"-u -U NUM --unified[=NUM] Output NUM (baku 3) baris unified context.\n" +" --label LABEL Gunakan LABEL alih-alih nama file.\n" +" -p --show-c-function Tampilkan setiap fungsi C yang berubah.\n" +" -F RE --show-function-line=RE Tampilkan baris paling akhir yang cocok " +"dengan RE." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Tampilkan hanya apakah file berbeda." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Output adalah script ed." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Output normal diff." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Output dalam format RCS diff." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Output dalam dua kolom.\n" +" -W NUM --width=NUM Output paling banyak NUM (baku 130) kolom.\n" +" --left-column Output hanya kolom kiri baris bersama.\n" +" --suppress-common-lines Jangan hasilkan baris bersama." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NAME --ifdef=NAME Output file merge untuk tampilkan `#ifdef NAME' diffs." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT Serupa, tapi format input kelompok GTYPE dg GFMT. " + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "--line-format=LFMT Serupa, tapi format seluruh baris input dg LFMT." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT Serupa, tapi format baris input LTYPE dg LFMT." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE adalah `old', `new', atau `unchanged'. GTYPE adalah LTYPE atau " +"`changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT dapat berisi:\n" +" %< baris dari FILE1\n" +" %> baris dari FILE2\n" +" %= baris bersama FILE1 dan FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec untuk LETTER\n" +" LETTERs adalah sebagai berikut untuk grup baru, huruf kecil untuk grup " +"tua:\n" +" F nomor baris pertama\n" +" L nomor baris terakhir\n" +" N jumlah baris = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT dapat berisi:\n" +" %L isi baris\n" +" %l isi baris, tanpa baris baru\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec untuk nomor baris input" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" GFMT atau LFMT dapat berisikan:\n" +" %% %\n" +" %c'C' karakter tunggal C\n" +" %c'\\OOO' karakter dengan kode oktal OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Berikan output ke `pr' untuk di-paginate." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Ekspansi tab ke spasi dalam output." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "-T --initial-tab Buat tab beraturan dg menambahkan sebuah tab." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=NUM Tab stop adalah setiap NUM (default 8) kolom cetakan." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" +"--suppress-blank-empty Tekan spasi atau tab sebelum mengeluarkan baris " +"kosong." + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Membandingkan subdirektori secara rekursif." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Perlakukan tiada file sebagai kosong." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Anggap file tidak ada pertama sebagai kosong." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Laporkan ketika dua file sama." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x PAT --exclude=PAT Tanpa file yang cocok dengan PAT." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FILE --exclude-from=FILE Abaikan file yang cocok dengan pola dalam FILE" + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S FILE --starting-file=FILE Mulai dengan FILE ketika membandingkan " +"direktori." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FILE1 Bandingkan FILE1 ke semua operand. FILE1 dapat berupa " +"direktori." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FILE2 Bandingkan semua operand dengan FILE2. FILE2 dapat berupa " +"direktori." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "--horizon-lines=NUM Pertahankan NUM baris prefiks dan suffiks umum." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Usahakan mencari perubahan terkecil." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "--speed-large-files Asumsikan file besar dan banyak perubahan kecil." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"FILES adalah `FILE1 FILE2' atau `DIR1 DIR2' atau `DIR FILE...' atau `FILE... " +"DIR'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Bila --from-file atau --to-file diberikan, tidak ada batasan untuk FILES." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Jika sebuah file FILE adalah `-', baca standard input." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Penggunaan: %s [OPTION]... FILES\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "Nilai option %s konflik dengan `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "option gaya output konflik" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Hanya dalam %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "tidak dapat membandingkan `-' dg direktori" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "-D option tidak didukung dg direktori" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Subdirektori sama: %s dan %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "File %s adalah %s sementara file %s adalah %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "File %s dan %s identik\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "Randy Smith" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "option tidak kompatibel" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "`-' dispesifikasikan lebih dari satu file input" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "gagal membaca" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Output perubahan tanpa dimerge dari OLDFILE ke YOURFILE ke dl " +"MYFILE." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "-E --show-overlap Output perubahan unmerge, konflik dl tanda kurung." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Output seluruh perubahan, konflik dalam tanda kurung." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Tampilkan perubahan yang overlap." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Output perubahan overlap, beri tanda kurung." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Output unmerged perubahan nonoverlap." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "-m --merge Tampilkan file yang dimerge bukan script ed (baku -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L LABEL --label=LABEL Gunakan LABEL bukan nama file." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Tambah perintah `w' dan `q' ke script ed." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAM Gunakan PROGRAM untuk membandingkan file." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Pemakaian: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Bandingkan tiga file baris per baris." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"Status keluaran adalah 0 jika sukses, 1 jika konflik, 2 jika bermasalah." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "kesalahan internal: kacau dalam format blok diff" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff gagal: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "kesalahan internal: tipe diff tidak valid dalam process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "format diff tidak valid; separator perubahan tidak valid" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "format diff tidak valid; baris akhir tidak lengkap" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "program subsider `%s' tidak dipanggil" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "format diff tidak valid; karakter leading line tidak tepat" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "kesalahan internal: tipe diff tidak valid dimasukkan ke output" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "file input mengecil" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "tidak dapat membandingkan nama file `%s' dan `%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "%s: rekursif loop direktori" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "Thomas Lord" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o FILE --output=FILE Operasi secara interaktif, kirim output ke FILE." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Abaikan huruf kapital dan huruf kecil." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Abaikan seluruh white space." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w NUM --width=NUM Output paling banyak NUM (baku 130) kolom cetakan." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Hanya tampilkan kolom kiri baris yang sama." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Jangan tampilkan baris yang sama." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Asumsikan file besar dan banyak sebaran perubahan " +"kecil." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Pemakaian: %s [OPTION]... FILE1 FILE2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Merge side-by-side beda file." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "tidak dapat menggabung input standar secara interaktif" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "kedua file yang dibandingkan adalah direktori" + +#: src/sdiff.c:868 +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tUbah lalu gunakan kedua versi, dekorasikan dengan header.\n" +"eb:\tUbah lalu gunakan kedua versi.\n" +"el atau e1:\tEdit lalu gunakan versi kiri.\n" +"er atau e2:\tEdit lalu gunakan versi kanan.\n" +"e:\tEdit versi baru.\n" +"l atau e1:\tGunakan versi kiri.\n" +"r atau e2:\tGunakan versi kanan.\n" +"s:\tSertakan baris bersama secara diam-diam.\n" +"v:\tSertakan baris bersama secara verbose.\n" +"q:\tKeluar.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: pilihan -- %c tidak legal\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Ini adalah aplikasi bebas; lihat kode program untuk persayaraan " +#~ "penyalinan;\n" +#~ "TIDAK ADA GARANSI; bahkan untuk DIPERDAGANGKAN atau KECOCOKAN UNTUK " +#~ "TUJUAN TERTENTU.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Laporkan bug ke <bug-gnu-utils@gnu.org>" + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "`-%ld' option kuno; gunakan `-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "`-%ld' option kuno, hilangkan saja" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "program subsider `%s' tidak ditemukan" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "program subsider `%s' gagal" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "program subsider `%s' gagal (status keluar %d)" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the files named COPYING." +#~ msgstr "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the file named COPYING." + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr "Ditulis oleh Torbjorn Granlund dan David MacKenzie." + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ "Ditulis oleh Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, dan Len Tower." + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "program subsider `%s' tidak dapat dieksekusi" diff --git a/po/insert-header.sin b/po/insert-header.sin new file mode 100644 index 0000000..b26de01 --- /dev/null +++ b/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/po/it.gmo b/po/it.gmo new file mode 100644 index 0000000000000000000000000000000000000000..f0ed4bcf8f6ba9bae71a9c8c720f7fd926e23fd3 GIT binary patch literal 23429 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 E0enH^<NyEw literal 0 HcmV?d00001 diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..d441a4d --- /dev/null +++ b/po/it.po @@ -0,0 +1,1362 @@ +# Italian messages for diffutils. +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils package. +# Marco Colombo <m.colombo@ed.ac.uk>, 2004, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2005-02-08 07:55+0000\n" +"Last-Translator: Marco Colombo <m.colombo@ed.ac.uk>\n" +"Language-Team: Italian <tp@lists.linux.it>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "errore del programma" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "overflow dello stack" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Errore di sistema sconosciuto" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "file normale vuoto" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "file normale" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "directory" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "file speciale a blocchi" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "file speciale a caratteri" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "link simbolico" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "socket" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "coda di messaggi" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semaforo" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "oggetto di memoria condivisa" + +# La memoria è tipizzata, non l'oggetto. +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "oggetto di memoria tipizzata" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "file strano" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: l'opzione '%s' è ambigua\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: l'opzione '--%s' non accetta argomenti\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: l'opzione '%c%s' non accetta argomenti\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: l'opzione '%s' richiede un argomento\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opzione '--%s' non riconosciuta\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opzione '%c%s' non riconosciuta\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opzione non valida -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: l'opzione richiede un argomento -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: l'opzione '-W %s' è ambigua\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: l'opzione '-W %s' non accetta argomenti\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: l'opzione '%s' richiede un argomento\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Successo" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Nessuna corrispondenza" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Espressione regolare non valida" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Carattere di collazione non valido" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Nome della classe di caratteri non valido" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Backslash finale" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Riferimento all'indietro non valido" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "[ o [^ non accoppiata" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "( o \\( non accoppiata" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "\\{ non accoppiata" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Contenuto di \\{\\} non valido" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Fine dell'intervallo non valida" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Memoria esaurita" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "L'espressione regolare precedente non è valida" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Fine prematura dell'espressione regolare" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "L'espressione regolare è troppo grande" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr ") o \\) non accoppiata" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Non c'è una espressione regolare precedente" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "memoria esaurita" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Errore di sistema sconosciuto" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "valore '%s' non valido per --bytes" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "lunghezza di orizzonte '%s' non valida" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Scritto da %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Scritto da %s e %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Scritto da %s, %s, e %s.\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 "" +"Scritto da %s, %s, %s,\n" +"e %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Scritto da %s, %s, %s,\n" +"%s, e %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Scritto da %s, %s, %s,\n" +"%s, %s, e %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Scritto da %s, %s, %s,\n" +"%s, %s, %s, e %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Scritto da %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"e %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Scritto da %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, e %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Scritto da %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, e altri.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "I file %s e %s sono diversi\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "I file %s e %s sono diversi\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Manca newline alla fine del file" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Usare '%s --help' per maggiori informazioni." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "Valore '%s' non valido per --ignore-initial" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "le opzioni -l e -s sono incompatibili" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "scrittura non riuscita" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "standard output" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Stampa i byte differenti." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i SKIP --ignore-initial=SKIP Salta i primi SKIP byte di input." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" + +# Lo strano allineamento è corretto +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Salta i primi SKIP1 byte di FILE1 e i primi " +"SKIP2\n" +" byte di FILE2." + +# Lo strano allineamento della seconda riga è corretto. +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose Mostra i numeri e i valori di tutti i byte\n" +" differenti." + +# Solitamente viene usato NUM quando si vuole specificare un numero. +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n NUM --bytes=NUM Confronta al massimo NUM byte." + +# Lo strano allineamento della seconda riga è corretto. +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "" +"-s --quiet --silent Non mostra niente; fornisce solo lo stato " +"d'uscita." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Stampa le informazioni sulla versione." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Mostra questo aiuto." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Uso: %s [OPZIONE]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Confronta due file byte per byte." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "SKIP1 e SKIP2 sono il numero di byte da saltare in ogni file." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"I valori di SKIP possono essere seguiti dai seguenti suffissi " +"moltiplicativi:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, e così via per T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Se un FILE è '-' o è mancante, legge lo standard input." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"Lo stato d'uscita è 0 quando gli input sono identici, 1 quando sono " +"differenti, 2 quando si riscontrano dei problemi." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "valore '%s' non valido per --bytes" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "operando mancante dopo '%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "extra operando '%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s differenza: byte %s, riga %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s differenza: byte %s, riga %s è %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF in %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "lunghezza di contesto '%s' non valida" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "paginazione non supportata su questo host" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "troppe opzioni di etichetta" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "larghezza '%s' non valida" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "opzioni di larghezza in conflitto" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "lunghezza di orizzonte '%s' non valida" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "lunghezza di tabulazione '%s' non valida" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "opzioni di lunghezza di tabulazione in conflitto" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "--from-file e --to-file specificati entrambi" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Confronta i file riga per riga." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" +"-i --ignore-case Ignora differenze in maiuscole e minuscole nel\n" +" contenuto del file." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Ignora differenze in maiuscole e minuscole\n" +" confrontando nomi di file." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Considera differenze in maiuscole e minuscole\n" +" confrontando nomi di file." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Ignora differenze causate dall'espansione\n" +" delle tabulazioni." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Ignora differenze nel numero di spazi." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Ignora tutti gli spazi." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines Ignora differenze in righe vuote." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I ER --ignore-matching-lines=ER Ignora differenze che corrispondono\n" +" all'espressione regolare ER." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "" +"--strip-trailing-cr Elimina i ritorni a capo a fine riga in input." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Leggi e scrivi in modalità binaria." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Considera tutti i file come testo." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C NUM --context[=NUM] Mostra NUM righe (predefinito 3) di contesto\n" +" copiato.\n" +"-u -U NUM --unified[=NUM] Mostra NUM righe (predefinito 3) di contesto\n" +" unificato.\n" +" --label ETICHETTA Usa ETICHETTA invece del nome del file.\n" +" -p --show-c-function Mostra in quale funzione C appare il " +"cambiamento.\n" +" -F ER --show-function-line=ER Mostra la più vicina riga che corrisponde\n" +" all'espressione regolare ER." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Segnala solo se i file sono diversi." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Mostra uno script per ed." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Mostra una diff normale." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Mostra una diff in formato RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Mostra in due colonne.\n" +" -W NUM --width=NUM Mostra al massimo NUM colonne (predefinito " +"130).\n" +" --left-column Mostra solo la colonna di sinistra per le righe\n" +" in comune.\n" +" --suppress-common-lines Non mostra le righe in comune." + +# Con questa opzione, i due file originali sono uniti in un unico file che +# viene stampato sullo standard output. Le differenze sono mostrate così: +# +# Testo comune. +# #ifndef NOME +# Questo è il file 1. +# #else /* NOME */ +# Questo è il file 2. +# #endif /* NOME */ +# Testo comune. +# +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NOME --ifdef=NOME Mostra le differenze in un unico file usando\n" +" '#ifdef NOME'." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT Simile, ma formatta i gruppi di input GTYPE\n" +" con GFMT." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LFMT Simile, ma formatta tutte le righe di input\n" +" con LFMT." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT Simile, ma formatta le righe di input LTYPE\n" +" con LFMT." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr " LTYPE è 'old', 'new', o 'unchanged'. GTYPE è LTYPE o 'changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT può contenere:\n" +" %< righe dal FILE1\n" +" %> righe dal FILE2\n" +" %= righe comuni a FILE1 e FILE2\n" +" %[-][LARGHEZZA][.[PREC]]{doxX}LETTERA formato in stile printf per " +"LETTERA\n" +" LETTERA può contenere (in maiuscolo per nuovi gruppi o in minuscolo\n" +" per vecchi):\n" +" F numero della prima riga\n" +" L numero dell'ultima riga\n" +" N numero di righe = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT può contenere:\n" +" %L contenuto della riga\n" +" %l contenuto della riga, ad esclusione di ogni andata a capo finale\n" +" %[-][LARGHEZZA][.[PREC]]{doxX}n formato in stile printf del\n" +" numero di riga di input" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" GFMT o LFMT possono contenere:\n" +" %% %\n" +" %c'C' il carattere C\n" +" %c'\\OOO' il carattere con codice ottale OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "" +"-l --paginate Passa l'output attraverso 'pr' per impaginarlo." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "" +"-t --expand-tabs Espande le tabulazioni in spazi nell'output." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Allinea le tabulazioni usando una tabulazione." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=NUM Stop di tabulazione ogni NUM colonne\n" +" (predefinito 8)." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "" +"-r --recursive Confronta ricorsivamente ogni sottodirectory\n" +" incontrata." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Considera i file mancanti come vuoti." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Considera i file mancanti in prima posizione\n" +" come vuoti." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Segnala quando due file sono identici." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "" +"-x MODELLO --exclude=MODELLO Esclude i file che corrispondono al MODELLO." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FILE --exclude-from=FILE Esclude i file che corrispondono a ogni\n" +" modello in FILE." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S FILE --starting-file=FILE Comincia con FILE quando si confrontano\n" +" directory." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FILE1 Confronta FILE1 con tutti gli operandi.\n" +" FILE1 può essere una directory." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FILE2 Confronta tutti gli operandi con FILE2.\n" +" FILE2 può essere una directory." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=NUM Mantiene NUM righe di prefisso e suffisso comune." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Minimizza il numero di differenze." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Assume file grandi e tante piccole differenze." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"FILES sono 'FILE1 FILE2' o 'DIR1 DIR2' o 'DIR FILE...' o 'FILE... DIR'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Se --from-file o --to-file sono usati, non ci sono restrizioni per FILES." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Se un FILE è '-', legge lo standard input." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Uso: %s [OPZIONE]... FILES\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "conflitto nell'opzione %s: valore '%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "opzioni di stile di output in conflitto" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Solo in %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "impossibile confrontare '-' con una directory" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "opzione -D non supportata con directory" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Sottodirectory in comune: %s e %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "File %s è un %s mentre file %s è un %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "I file %s e %s sono identici\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "opzioni incompatibili" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "'-' specificato per più di un file di input" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "lettura fallita" + +# Per mostrare i diversi output generati con le varie opzioni di diff3, +# ho usato i seguenti file: +# +# file1: Testo comune. +# Questo è il file 1. +# Altro testo comune. +# file2: Testo comune. +# Questo è il file 2. +# Altro testo comune. +# file3: Testo comune. +# Questo è il file 3. +# Altro testo comune. +# +# In questo caso mi sembra più corretto usare 'cambiamenti' invece che +# 'differenze'. +# +# Lo strano allineamento della seconda riga è corretto. +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Mostra cambiamenti da VECCHIOFILE a TUOFILE\n" +" in MIOFILE." + +# Questa opzione produce: +# +# diff3 -E file1 file2 file3 +# 2a +# ======= +# Questo è il file 3. +# >>>>>>> file3 +# . +# 1a +# <<<<<<< file1 +# . +# +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Mostra le differenze, tenendo separati i " +"conflitti." + +# Questa opzione produce: +# +# diff3 -A file1 file2 file3 +# 2a +# ||||||| file2 +# Questo è il file 2. +# ======= +# Questo è il file 3. +# >>>>>>> file3 +# . +# 1a +# <<<<<<< file1 +# . +# +# Lo strano allineamento della seconda riga è corretto. +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "" +"-A --show-all Mostra tutte le differenze, tenendo separati\n" +" i conflitti." + +# Questa opzione produce: +# +# diff3 -x file1 file2 file3 +# 2c +# Questo è il file 3. +# . +# +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Mostra le differenze che si sovrappongono." + +# Questa opzione produce: +# +# diff3 -X file1 file2 file3 +# 2a +# ======= +# Questo è il file 3. +# >>>>>>> file3 +# . +# 1a +# <<<<<<< file1 +# . +# +# Lo strano allineamento della seconda riga è corretto. +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "" +"-X Mostra le differenze che si sovrappongono,\n" +" tenendole separate." + +# Questa opzione, per i 3 file considerati, non produce niente. +# +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "" +"-3 --easy-only Mostra le differenze che non si sovrappongono." + +# Questa opzione produce: +# +# diff3 -m file1 file2 file3 +# Testo comune. +# <<<<<<< file1 +# Questo è il file 1. +# ||||||| file2 +# Questo è il file 2. +# ======= +# Questo è il file 3. +# >>>>>>> file3 +# Altro testo comune. +# +# Lo strano allineamento della seconda riga è corretto. +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Mostra le differenze in un file unico invece\n" +" che in uno script per ed (predefinito -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "" +"-L ETICHETTA --label=ETICHETTA Usa ETICHETTA invece del nome del file." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "" +"-i Aggiunge i comandi 'w' e 'q' agli script per ed." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAMMA Usa PROGRAMMA per confrontare i file." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Uso: %s [OPZIONE]... MIOFILE VECCHIOFILE TUOFILE\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Confronta tre file riga per riga." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"Lo stato d'uscita è 0 se c'è successo, 1 se c'è conflitto, 2 se sono stati\n" +"riscontrati dei problemi." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "errore interno: problema nel formato dei blocchi di diff" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff fallita: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "errore interno: tipo di diff non valido in process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "formato di diff non valido; separatore di modifica non valido" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "formato di diff non valido; ultima riga incompleta" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "programma accessorio '%s' non può essere chiamato" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "formato di diff non valido; caratteri incorretti a inizio riga" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "errore interno: il tipo di diff passato all'output non è valido" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "il file di input è rimpicciolito" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "impossibile confrontare i nomi dei file '%s' e '%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +# Lo strano allineamento della seconda riga è corretto. +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o FILE --output=FILE Lavora in modo interattivo, scrivendo l'output\n" +" in FILE." + +# Questa traduzione corrisponde a quella usata sopra per diff. +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "" +"-i --ignore-case Ignora differenze in maiuscole e minuscole." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Ignora tutti gli spazi." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w NUM --width=NUM Mostra al massimo NUM colonne (predefinito 130)." + +# Lo strano allineamento della seconda riga è corretto. +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "" +"-l --left-column Mostra solo la colonna di sinistra per le righe\n" +" in comune." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Non mostra le righe in comune." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Assume file grandi e tante piccole differenze." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Uso: %s [OPZIONE]... FILE1 FILE2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Mostra le differenze fianco a fianco." + +# Tobia Conforto: impossibile combinare in modo interattivo da standard input +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "impossibile combinare in modo interattivo con lo standard input" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "entrambi i file da confrontare sono directory" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tModifica e poi usa entrambe le versioni, ognuna decorata con una " +"intestazione.\n" +"eb:\tModifica e poi usa entrambe le versioni.\n" +"el:\tModifica e poi usa la versione di sinistra.\n" +"er:\tModifica e poi usa la versione di destra.\n" +"e:\tModifica una nuova versione.\n" +"l:\tUsa la versione di sinistra.\n" +"r:\tUsa la versione di destra.\n" +"s:\tInclude silenziosamente le righe in comune.\n" +"v:\tInclude prolissamente le righe in comune.\n" +"q:\tEsce.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: opzione illecita -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Questo è software libero; si veda il sorgente per le condizioni di " +#~ "copia.\n" +#~ "NON c'è alcuna garanzia; neppure di COMMERCIABILITA' o IDONEITA' AD UNO\n" +#~ "SCOPO PARTICOLARE.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Segnalare i bug a <bug-gnu-utils@gnu.org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "l'opzione '-%ld' è obsoleta; usare '-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "l'opzione '-%ld' è obsoleta; rimuoverla" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "programma accessorio '%s' non trovato" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "programma accessorio '%s' non riuscito" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "programma accessorio '%s' non riuscito (stato d'uscita %d)" diff --git a/po/ja.gmo b/po/ja.gmo new file mode 100644 index 0000000000000000000000000000000000000000..ab9ad59736f63e57515d30f3498e154cfa0993bc GIT binary patch literal 18273 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 E0_Jngi2wiq literal 0 HcmV?d00001 diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..5e94119 --- /dev/null +++ b/po/ja.po @@ -0,0 +1,1184 @@ +# Japanese messages GNU diffutils +# Copyright (C) 2002 Free Software Foundation, Inc. +# IIDA Yosiaki <iida@gnu.org>, 2002. +# This file is distributed under the same license as the diffutils package. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU diffutils 2.8.2\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2002-06-21 07:56+0900\n" +"Last-Translator: IIDA Yosiaki <iida@gnu.org>\n" +"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-JP\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "¥×¥í¥°¥é¥à¡¦¥¨¥é¡¼" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "¥¹¥¿¥Ã¥¯¡¦¥ª¡¼¥Ð¡¼¥Õ¥í¡¼" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "̤ÃΤΥ·¥¹¥Æ¥à¡¦¥¨¥é¡¼¤Ç¤¹" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "" + +#: lib/file-type.c:38 +#, fuzzy +msgid "regular file" +msgstr "Æɹþ¤ß¼ºÇÔ" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "" + +#: lib/file-type.c:70 +#, fuzzy +msgid "weird file" +msgstr "Æɹþ¤ß¼ºÇÔ" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó¡Ö%s¡×¤ÏÛ£Ëæ¤Ç¤¹\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó¡Ö--%s¡×¤Ï°ú¿ô¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó¡Ö%c%s¡×¤Ï°ú¿ô¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó¡Ö%s¡×¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: ǧ¼±¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥ó¡Ö--%s¡×¤Ç¤¹\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: ǧ¼±¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥ó¡Ö%c%s¡×¤Ç¤¹\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ̵¸ú¤Ê¥ª¥×¥·¥ç¥ó¤Ç¤¹ -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó¤Ï°ú¿ô¤òÍ׵ᤷ¤Þ¤¹ -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó¡Ö-W %s¡×¤ÏÛ£Ëæ¤Ç¤¹\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó¡Ö-W %s¡×¤Ï¡¢°ú¿ô¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó¡Ö%s¡×¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "À®¸ù" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "°ìÃפ·¤Þ¤»¤ó" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "̵¸ú¤ÊÀµµ¬É½¸½¤Ç¤¹" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "̵¸ú¤ÊÀ°Îóʸ»ú¤Ç¤¹" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "̵¸ú¤Êʸ»ú¥¯¥é¥¹Ì¾¤Ç¤¹" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "¸å³¤¹¤ëµÕ¼ÐÀþ" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "̵¸ú¤ÊµÕ»²¾È" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Äà¤ê¹ç¤ï¤Ê¤¤[¤ä[^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Äà¤ê¹ç¤ï¤Ê¤¤(¤ä\\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Äà¤ê¹ç¤ï¤Ê¤¤\\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "̵¸ú¤Ê\\{\\}¤ÎÆâÍÆ" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "̵¸ú¤ÊÈϰϽªÎ»" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "²¾ÁÛ¥á¥â¥ê¤ò»È¤¤²Ì¤¿¤·¤Þ¤·¤¿" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "̵¸ú¤ÊÀè¹ÔÀµµ¬É½¸½" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "ͽ´ü¤»¤ÌÀµµ¬É½¸½¤Î½ªÎ»" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Â礭¤¹¤®¤ëÀµµ¬É½¸½" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Äà¤ê¹ç¤ï¤Ê¤¤)¤ä\\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Á°¤ÎÀµµ¬É½¸½¤¬¤¢¤ê¤Þ¤»¤ó" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "²¾ÁÛ¥á¥â¥ê¤ò»È¤¤²Ì¤¿¤·¤Þ¤·¤¿" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "̤ÃΤΥ·¥¹¥Æ¥à¡¦¥¨¥é¡¼¤Ç¤¹" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "̵¸ú¤Ê--bytes¤ÎÃÍ¡Ö%s¡×" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "̵¸ú¤Ê²£Éý¡Ö%s¡×" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "(C)" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, fuzzy, c-format +msgid "Written by %s.\n" +msgstr "ºîÀ®¤Ï¡¢Thomas Lord¡£" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "ºîÀ®¤Ï¡¢Randy Smith¡£" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "ºîÀ®¤Ï¡¢Randy Smith¡£" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "¥Õ¥¡¥¤¥ë%s¤È%s¤Ï°ã¤¤¤Þ¤¹\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "¥Ð¥¤¥Ê¥ê¡¼¡¦¥Õ¥¡¥¤¥ë%s¤È%s¤Ï°ã¤¤¤Þ¤¹\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "¥Õ¥¡¥¤¥ëËöÈø¤Ë²þ¹Ô¤¬¤¢¤ê¤Þ¤»¤ó" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "¡Ö%s --help¡×¤Ç¡¢¤è¤ê¾ÜºÙ¤Ê¾ðÊó¤òÄ´¤Ù¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£" + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "̵¸ú¤Ê--ignore-initial¤ÎÃÍ¡Ö%s¡×" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "¥ª¥×¥·¥ç¥ó-l¤È-s¤ÏξΩ¤·¤Þ¤»¤ó" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "½ñ¹þ¤ß¼ºÇÔ" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "ɸ½à½ÐÎÏ" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes °Û¤Ê¤ë¥Ð¥¤¥È¤òɽ¼¨¡£" + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i SKIP --ignore-initial=SKIP ÆþÎϤÎÀèƬSKIP¥Ð¥¤¥È¤ò¥¹¥­¥Ã¥×¡£" + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr " FILE1¤ÎSKIP1¥Ð¥¤¥È¤ÈFILE2¤ÎSKIP2¥Ð¥¤¥È¤ò¥¹¥­¥Ã¥×¡£" + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose ¤¹¤Ù¤Æ¤Î°Û¤Ê¤ë¥Ð¥¤¥È¤Î»Ø¿ô¤ÈÃͤò½ÐÎÏ¡£" + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LIMIT --bytes=LIMIT ¹â¡¹LIMIT¥Ð¥¤¥È¤òÈæ³Ó¡£" + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent ½ÐÎϤʤ·¡£½ªÎ»¥¹¥Æ¡¼¥¿¥¹¤Î¤ß¡£" + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤ò½ÐÎÏ¡£" + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help ¤³¤ÎÀâÌÀ¤ò½ÐÎÏ¡£" + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "" +"»ÈÍÑË¡: %s [¥ª¥×¥·¥ç¥ó]... ¥Õ¥¡¥¤¥ë1 [¥Õ¥¡¥¤¥ë2 [¥¹¥­¥Ã¥×1 [¥¹¥­¥Ã¥×2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "2¤Ä¤Î¥Õ¥¡¥¤¥ë¤ò¥Ð¥¤¥È¤´¤È¤ËÈæ³Ó¤·¤Þ¤¹¡£" + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "¡Ö¥¹¥­¥Ã¥×1¡×¤È¡Ö¥¹¥­¥Ã¥×2¡×¤Ï¡¢³Æ¥Õ¥¡¥¤¥ë¤ò¥¹¥­¥Ã¥×¤¹¤ë¥Ð¥¤¥È¿ô¡£" + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"¥¹¥­¥Ã¥×¤ÎÃͤˤϡ¢¼¡¤Î·¸¿ô¤ò³¤±¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£\n" +"kB 1000¡¢K 1024¡¢MB 1,000,000¡¢M 1,048,576¡¢\n" +"GB 1,000,000,000¡¢G 1,073,741,824¡¢¤Þ¤¿T¡¢P¡¢E¡¢Z¡¢Y¤Ë¤Ä¤¤¤Æ¤âƱÍÍ¡£" + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "¤â¤·¥Õ¥¡¥¤¥ë¤¬¤Ê¤¤¤«¡Ö-¡×¤Î¤È¤­¡¢É¸½àÆþÎϤòÆɤߤޤ¹¡£" + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "̵¸ú¤Ê--bytes¤ÎÃÍ¡Ö%s¡×" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "¡Ö%s¡×¤Î¸å¤Î¥ª¥Ú¥é¥ó¥É¤¬¤¢¤ê¤Þ¤»¤ó" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr ";·×¤Ê¥ª¥Ú¥é¥ó¥É¡Ö%s¡×" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s °Û¤Ê¤ê¤Þ¤¹: ¥Ð¥¤¥È %s¡¢¹Ô %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s °Û¤Ê¤ê¤Þ¤¹: ¥Ð¥¤¥È %s¡¢¹Ô %s %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: ¥Õ¥¡¥¤¥ë%s¤ÎËöÈø\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "̵¸ú¤ÊÁ°¸å¤ÎÉý¡Ö%s¡×" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "¤³¤Î¥Û¥¹¥È¤Ç¤Ï¥Ú¡¼¥¸³äÉÕ¤±¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "¥Õ¥¡¥¤¥ë¡¦¥é¥Ù¥ë¡¦¥ª¥×¥·¥ç¥ó¤¬Â¿¤¹¤®¤Þ¤¹" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "̵¸ú¤ÊÉý¡Ö%s¡×" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "Éý¤Î¥ª¥×¥·¥ç¥ó¤¬¾×Æͤ·¤Æ¤¤¤Þ¤¹" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "̵¸ú¤Ê²£Éý¡Ö%s¡×" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "̵¸ú¤Ê¥¿¥ÖÉý¡Ö%s¡×" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "¥¿¥ÖÉý¤Î¥ª¥×¥·¥ç¥ó¤¬¾×Æͤ·¤Æ¤¤¤Þ¤¹" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "--from-file¤È--to-file¤ÎξÊý¤ò»ØÄꤷ¤Þ¤·¤¿" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "2¤Ä¤Î¥Õ¥¡¥¤¥ë¤ò¹Ô¤´¤È¤ËÈæ³Ó¤·¤Þ¤¹¡£" + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case ¥Õ¥¡¥¤¥ëÆâÍƤÎÂçʸ»ú¾®Ê¸»ú¤ò̵»ë¡£" + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "--ignore-file-name-case ¥Õ¥¡¥¤¥ë̾¤ÎÂçʸ»ú¾®Ê¸»ú¤ò̵»ë¡£" + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "--no-ignore-file-name-case ¥Õ¥¡¥¤¥ë̾¤ÎÂçʸ»ú¾®Ê¸»ú¤ò¶èÊÌ¡£" + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "-E --ignore-tab-expansion ¥¿¥ÖŸ³«¤Îº¹¤ò̵»ë¡£" + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change ¶õÇò¿ô¤Îº¹¤ò̵»ë¡£" + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Á´¶õÇò¤ò̵»ë¡£" + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines ¶õÇò¤À¤±¤Î¹Ô¤Îº¹¤ò̵»ë¡£" + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "-i RE --ignore-matching-lines=RE RE¤Ë°ìÃפ¹¤ë¤¹¤Ù¤Æ¤Î¹Ô¤Îº¹¤ò̵»ë¡£" + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr ÆþÎϤ«¤é¹ÔËö¥­¥ã¥ê¥Ã¥¸¡¦¥ê¥¿¡¼¥ó¤òºï½ü¡£" + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary ¥Ð¥¤¥Ê¥ê¡¼¡¦¥â¡¼¥É¤ÇÆɤ߽ñ¤­¡£" + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text ¤¹¤Ù¤Æ¥Æ¥­¥¹¥È¤È¤·¤Æ½èÍý¡£" + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C NUM --context[=NUM] ¥³¥Ô¡¼¤·¤¿Á°¸åNUM¹Ô (´ûÄê¤Ï3) ¤ò½ÐÎÏ¡£\n" +"-u -U NUM --unified[=NUM] Åý¹ç¤·¤¿Á°¸åNUM¹Ô (´ûÄê¤Ï3) ¤ò½ÐÎÏ¡£\n" +" --label LABEL ¥Õ¥¡¥¤¥ë̾¤ÎÂå¤ï¤ê¤ËLABEL¤ò»ÈÍÑ¡£\n" +" -p --show-c-function ³ÆÊѹ¹¤ò´Þ¤àC¤Î´Ø¿ô̾¤òɽ¼¨¡£\n" +" -F RE --show-function-line=RE RE¤È°ìÃפ¹¤ëľ¶á¤Î¹Ô¤òɽ¼¨¡£" + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief ¥Õ¥¡¥¤¥ë¤¬°Û¤Ê¤ë¤«¤É¤¦¤«¤À¤±¤ò½ÐÎÏ¡£" + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed ed¥¹¥¯¥ê¥×¥È¤ò½ÐÎÏ¡£" + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal ɸ½àŪ¤Êº¹Ê¬¤ò½ÐÎÏ¡£" + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs RCS·Á¼°¤Îº¹Ê¬¤ò½ÐÎÏ¡£" + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side ½ÄÎó½ÐÎÏ¡£\n" +" -W NUM --width=NUM ¹â¡¹NUM (´ûÄê¤Ï130) °õ»ú·å¤Ç½ÐÎÏ¡£\n" +" --left-column ¶¦Ä̹ԤϺ¸Îó¤À¤±½ÐÎÏ¡£\n" +" --suppress-common-lines ¶¦Ä̹ԤνÐÎϤòÍ޻ߡ£" + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "-D NAME --ifdef=NAME º¹Ê¬¤ò¡Ö#ifdef NAME¡×¤Ç¼¨¤¹Ê»¹ç¥Õ¥¡¥¤¥ë¤ò½ÐÎÏ¡£" + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "--GTYPE-group-format=GFMT ƱÍͤÀ¤¬¡¢GTYPE¤ÎÆþÎÏ·²¤òGFMT¤ÇÀ°·Á¡£" + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "--line-format=LFMT ƱÍͤÀ¤¬¡¢Á´ÆþÎϹԤòLFMT¤ÇÀ°·Á¡£" + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "--LTYPE-line-format=LFMT ƱÍͤÀ¤¬¡¢LTYPEÆþÎϹԤòLFMT¤ÇÀ°·Á¡£" + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" ¤³¤³¤ÇLTYPE¤Ï¡Öold¡×¡Önew¡×¡Öunchanged¡×¡£GTYPE¤ÏLTYPE¤«¡Öchanged¡×¡£" + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT¤Ë¤Ï°Ê²¼¤ò»ØÄê¤Ç¤­¤Þ¤¹:\n" +" %< FILE1¤Î¹Ô\n" +" %> FILE2¤Î¹Ô\n" +" %= FILE1¤ÈFILE2¤Î¶¦Ä̹Ô\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printfÉ÷»ØÄê¤Ç¤ÎLETTER\n" +" LETTER¤Ï¡¢°Ê²¼¤Îʸ»ú¤Ç¿·¤·¤¤Êý¡¢¾®Ê¸»ú¤Ç¸Å¤¤Êý:\n" +" F ºÇ½é¤Î¹ÔÈÖ¹æ\n" +" L ºÇ¸å¤Î¹ÔÈÖ¹æ\n" +" N ¹Ô¿ô = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT¤Ë¤Ï°Ê²¼¤ò»ØÄê¤Ç¤­¤Þ¤¹:\n" +" %L ¹ÔÆâÍÆ\n" +" %l ¸å³¤¹¤ë²þ¹Ô¤ò¤Î¤¾¤¤¤¿¹ÔÆâÍÆ\n" +" %[-][WIDTH][.[PREC]]{doxX}n printfÉ÷»ØÄê¤Ç¤ÎÆþÎϹԿô" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" GFMT¤äLFMT¤Ë¤Ï°Ê²¼¤ò»ØÄê¤Ç¤­¤Þ¤¹:\n" +" %% %\n" +" %c'C' ʸ»úC°ìʸ»ú\n" +" %c'\\OOO' 8¿Ê¥³¡¼¥ÉOOO¤Îʸ»ú" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate ½ÐÎϤò¡Öpr¡×¤Ç¥Ú¡¼¥¸Ê¬³ä¡£" + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs ½ÐÎϤΥ¿¥Ö¤ò¶õÇò¤ËŸ³«¡£" + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "-T --initial-tab ¥¿¥Ö¤Ç»Ï¤Þ¤ë¹Ô¤Ï¡¢Á°¤Ë¥¿¥Ö¤òÃÖ¤¤¤Æ·¤¨¤ë¡£" + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=NUM ¥¿¥Ö¤ÏNUM (´ûÄê¤Ï8) ¥«¥é¥à¡£" + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive ¸«¤Ä¤«¤Ã¤¿²¼°Ì¥Ç¥£¥ì¥¯¥È¥ê¡¼¤òºÆµ¢Åª¤ËÈæ³Ó¡£" + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file ¸ºß¤·¤Ê¤¤¥Õ¥¡¥¤¥ë¤Ï¶õ¤È¤ß¤Ê¤¹¡£" + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "--unidirectional-new-file ¸ºß¤·¤Ê¤¤Á°¼Ô¤Î¥Õ¥¡¥¤¥ë¤Ï¶õ¤È¤ß¤Ê¤¹¡£" + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files ξ¥Õ¥¡¥¤¥ë¤¬Æ±¤¸¤È¤­¤ËÊó¹ð¡£" + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x PAT --exclude=PAT PAT¤È°ìÃפ¹¤ë¥Õ¥¡¥¤¥ë¤ò½ü³°¡£" + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FILE --exclude-from=FILE FILEÆâ¤Î³Æ¥Ñ¥¿¡¼¥ó¤È°ìÃפ¹¤ë¥Õ¥¡¥¤¥ë¤ò½ü³°¡£" + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S FILE --starting-file=FILE ¥Ç¥£¥ì¥¯¥È¥ê¡¼¤òÈæ³Ó¤¹¤ëºÝ¡¢FILE¤«¤é»Ï¤á¤ë¡£" + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FILE1 Á´¥ª¥Ú¥é¥ó¥É¤ÈFILE1¤òÈæ³Ó¡£FILE1¤Ï¥Ç¥£¥ì¥¯¥È¥ê¡¼¤â²Ä¡£" + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FILE2 FILE2¤ÈÁ´¥ª¥Ú¥é¥ó¥É¤òÈæ³Ó¡£FILE2¤Ï¥Ç¥£¥ì¥¯¥È¥ê¡¼¤â²Ä¡£" + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "--horizon-lines=NUM ÀèƬ¤ÈËöÈø¤Ë¤¢¤ë¶¦Ä̤ÊNUM¹Ô¤ò³ÎÊÝ¡£" + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal ¤Ç¤­¤ë¤À¤±¤¬¤ó¤Ð¤Ã¤Æ¡¢¾®¤µ¤¤º¹Ê¬¤ò¸«¤Ä¤±¤ë¡£" + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "--speed-large-files µðÂç¤Ê¥Õ¥¡¥¤¥ë¤Ëʬ»¶¤·¤¿Êѹ¹¤¬¤¢¤ë¤È²¾Äê¡£" + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "FILES¤Ï¡¢¡ÖFILE1 FILE2¡×¡ÖDIR1 DIR2¡×¡ÖDIR FILE...¡×¡ÖFILE... DIR¡×¡£" + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "--from-file¤ä--to-file¤ò»ØÄꤹ¤ì¤Ð¡¢FILES¤ÎÀ©¸Â¤Ï¤¢¤ê¤Þ¤»¤ó¡£" + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "¥Õ¥¡¥¤¥ë¤¬¡Ö-¡×¤Î¤È¤­¡¢É¸½àÆþÎϤòÆɤߤޤ¹¡£" + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "»ÈÍÑË¡: %s [¥ª¥×¥·¥ç¥ó]... FILES\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "%s¥ª¥×¥·¥ç¥ó¤ÎÃÍ¡Ö%s¡×¤¬¾×Æͤ·¤Æ¤¤¤Þ¤¹" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "½ÐÎÏ»ØÄꥪ¥×¥·¥ç¥ó¤¬¾×Æͤ·¤Æ¤¤¤Þ¤¹" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "%s¤À¤±¤Ëȯ¸«: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "¡Ö-¡×¤Ï¥Ç¥£¥ì¥¯¥È¥ê¡¼¤ÈÈæ³Ó¤Ç¤­¤Þ¤»¤ó" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "-D¥ª¥×¥·¥ç¥ó¤Ï¥Ç¥£¥ì¥¯¥È¥ê¡¼¤Ç¤Î¥µ¥Ý¡¼¥È¤ò¤·¤Æ¤¤¤Þ¤»¤ó" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "¶¦Ä̤β¼°Ì¥Ç¥£¥ì¥¯¥È¥ê¡¼: %s¤È%s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "¥Õ¥¡¥¤¥ë%s¤Ï%s¡¢¥Õ¥¡¥¤¥ë%s¤Ï%s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "¥Õ¥¡¥¤¥ë%s¤È%s¤ÏƱ°ì\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +#, fuzzy +msgid "Randy Smith" +msgstr "ºîÀ®¤Ï¡¢Randy Smith¡£" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "ξΩ¤·¤Ê¤¤¥ª¥×¥·¥ç¥ó" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤Ë¡Ö-¡×¤¬Ê£¿ô²ó»ØÄꤵ¤ì¤Þ¤·¤¿" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "Æɹþ¤ß¼ºÇÔ" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "-e --ed OLDFILE¤«¤éYOURFILE¤Ø¤ÎMYFILE¤Ë¤¿¤¤¤¹¤ë̤ʻ¹ç¤ÎÊѹ¹¤ò½ÐÎÏ¡£" + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "-E --show-overlap ¾×Æͤò¤¯¤¯¤ê¡¢Ì¤Ê»¹ç¤ÎÊѹ¹¤ò½ÐÎÏ¡£" + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all ¾×Æͤò¤¯¤¯¤ê¡¢Á´Êѹ¹¤ò½ÐÎÏ¡£" + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only ½ÅÊ£¤·¤¿Êѹ¹¤ò½ÐÎÏ¡£" + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X ¾×Æͤò¤¯¤¯¤ê¤Ê¤¬¤é¡¢Êѹ¹¤ò½ÐÎÏ¡£" + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only ¾×Æͤ·¤Æ¤¤¤Ê¤¤¡¢Ì¤Ê»¹ç¤ÎÊѹ¹¤ò½ÐÎÏ¡£" + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge ed¥¹¥¯¥ê¥×¥È¤ÎÂå¤ï¤ê¤Ë¡¢Ê»¹ç¤·¤¿¥Õ¥¡¥¤¥ë¤ò½ÐÎÏ (´ûÄê¤Ï-A)¡£" + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L LABEL --label=LABEL ¥Õ¥¡¥¤¥ë̾¤ÎÂå¤ï¤ê¤ËLABEL¤ò»ÈÍÑ¡£" + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i ed¥¹¥¯¥ê¥×¥È¤Î¸å¤Ë¡Öw¡×¤È¡Öq¡×¥³¥Þ¥ó¥É¤òÄɲá£" + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAM ¥Õ¥¡¥¤¥ë¤ÎÈæ³Ó¤ËPROGRAM¤ò»ÈÍÑ¡£" + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "»ÈÍÑË¡: %s [¥ª¥×¥·¥ç¥ó]... MYFILE OLDFILE YOURFILE\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "3¤Ä¤Î¥Õ¥¡¥¤¥ë¤ò¹Ô¤´¤È¤ËÈæ³Ó¤·¤Þ¤¹¡£" + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "ÆâÉô¥¨¥é¡¼: º¹Ê¬¥Ö¥í¥Ã¥¯¤Î·Á¼°¤Ë¥Ï¥Þ¤ë" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff¼ºÇÔ: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "ÆâÉô¥¨¥é¡¼: process_diffÆâ¤Ç̵¸ú¤Êº¹Ê¬·¿" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "̵¸ú¤Êº¹Ê¬·Á¼°; ̵¸ú¤ÊÊѹ¹¶èÀÚ¤ê" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "̵¸ú¤Êº¹Ê¬·Á¼°; ºÇ½ª¹Ô¤¬Ì¤½ªÃ¼" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, fuzzy, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "²¼°Ì¥×¥í¥°¥é¥à¡Ö%s¡×¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "̵¸ú¤Êº¹Ê¬·Á¼°; ÉÔÀµ¤Ê¹ÔƬʸ»ú·²" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "ÆâÉô¥¨¥é¡¼: ½ÐÎϤËÅϤµ¤ì¤ë̵¸ú¤Êº¹Ê¬·¿" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬½Ì¤ó¤À" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "¥Õ¥¡¥¤¥ë̾¡Ö%s¡×¤È¡Ö%s¡×¤òÈæ³Ó¤Ç¤­¤Þ¤»¤ó" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +#, fuzzy +msgid "Thomas Lord" +msgstr "ºîÀ®¤Ï¡¢Thomas Lord¡£" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "-o FILE --output=FILE ÂÐÏÃŪ¤ËÁàºî¤·¡¢½ÐÎϤÏFILE¤Ø¡£" + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case ¥Õ¥¡¥¤¥ëÆâÍƤÎÂçʸ»ú¾®Ê¸»ú¤òƱ°ì»ë¡£" + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Á´¶õÇò¤ò̵»ë¡£" + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "-w NUM --width=NUM ¹ÔÅö¤ê¹â¡¹NUM (´ûÄê¤Ï130) ·å¤Ç½ÐÎÏ¡£" + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column ¶¦Ä̹ԤϺ¸Îó¤À¤±½ÐÎÏ¡£" + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines ¶¦Ä̹ԤνÐÎϤòÍ޻ߡ£" + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "-H --speed-large-files µðÂç¤Ê¥Õ¥¡¥¤¥ë¤Ëʬ»¶¤·¤¿Êѹ¹¤¬¤¢¤ë¤È²¾Äê¡£" + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "»ÈÍÑË¡: %s [¥ª¥×¥·¥ç¥ó]... ¥Õ¥¡¥¤¥ë1 ¥Õ¥¡¥¤¥ë2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "¥Õ¥¡¥¤¥ëº¹Ê¬¤Î2ÃÊÁÈÊ»¹ç" + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "ɸ½à½ÐÎϤÏÂÐÏÃŪ¤ËÊ»¹ç¤Ç¤­¤Þ¤»¤ó" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "Èæ³ÓÂоݤÏξÊý¤È¤â¥Ç¥£¥ì¥¯¥È¥ê¡¼" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tξÊý¤ÎÈǤ˥إåÀ¡¼¤Ç¾þ¤Ã¤Æ¡¢ÍøÍѤ·¡¢ÊÔ½¸¡£\n" +"eb:\tÎÈǤò»ÈÍѤ·¤ÆÊÔ½¸¡£\n" +"el:\tº¸Â¦¤ÎÈǤò»ÈÍѤ·¤ÆÊÔ½¸¡£\n" +"er:\t±¦Â¦¤ÎÈǤò»ÈÍѤ·¤ÆÊÔ½¸¡£\n" +"e:\t¿·ÈǤòÊÔ½¸¡£\n" +"l:\tº¸Â¦¤ÎÈǤò»ÈÍÑ¡£\n" +"r:\t±¦Â¦¤ÎÈǤò»ÈÍÑ¡£\n" +"s:\t¶¦Ä̹Ԥò²ÉÌۤ˴ޤࡣ\n" +"v:\t¶¦Ä̹ԤòñÁÀå¤Ë´Þ¤à¡£\n" +"q:\t½ªÎ»¡£\n" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the file named COPYING." +#~ msgstr "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the file named COPYING.\n" +#~ "-- °Ê²¼¤Ï»²¹ÍÌõ¤Ç¤¹¡£Ë¡Åª¤Ê»ö¹à¤Ë¤Ä¤¤¤Æ¤Ï¾å¤Îµ­½Ò¤Ë¤·¤¿¤¬¤Ã¤Æ¤¯¤À¤µ¤¤¡£\n" +#~ "Ë¡¤Îµö¤¹ÈϰϤˤª¤¤¤Æ¡¢°ìÀÚ¤ÎÊݾڤϤ¢¤ê¤Þ¤»¤ó¡£¤¢¤Ê¤¿¤Ï¡¢¤³¤Î¥×¥í¥°¥é¥à\n" +#~ "¤ÎÊ£À½¤ò¡¢GNU General Public License¤Ë´ð¤Å¤¤¤ÆºÆÈÒÉۤǤ­¤Þ¤¹¡£¤³¤ì¤é¤Î\n" +#~ "»ö¹à¤Ë¤Ä¤¤¤Æ¤Î¾Ü¤·¤¤¾ðÊó¤Ï¡¢COPYING¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó¤Ç¤¹ -- %c\n" + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr "ºîÀ®¤Ï¡¢Torbjorn Granlund¤ÈDavid MacKenzie¡£" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "¥Ð¥°¤ò¸«¤Ä¤±¤¿¤é<bug-gnu-utils@gnu.org>¤ËÊó¹ð¤·¤Æ¤¯¤À¤µ¤¤¡£" + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ "ºîÀ®¤Ï¡¢Paul Eggert¡¢Mike Haertel¡¢David Hayes¡¢\n" +#~ "Richard Stallman¡¢Len Tower¡£" + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "¡Ö-%ld¡×¥ª¥×¥·¥ç¥ó¤Ï¡¢»þÂåÃÙ¤ì¤Ç¤¹¡£¡Ö-%c %ld¡×¤ò»È¤¤¤Þ¤·¤ç¤¦" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "¡Ö-%ld¡×¥ª¥×¥·¥ç¥ó¤Ï¡¢»þÂåÃÙ¤ì¤Ç¤¹¡£¾Êά¤·¤Þ¤·¤ç¤¦" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "²¼°Ì¥×¥í¥°¥é¥à¡Ö%s¡×¤¬¼ºÇÔ" + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "²¼°Ì¥×¥í¥°¥é¥à¡Ö%s¡×¤¬¼Â¹ÔÉÔǽ¤Ç¤¹" diff --git a/po/lv.gmo b/po/lv.gmo new file mode 100644 index 0000000000000000000000000000000000000000..8a0b2ed40628ca023f9df559c5094955418d0997 GIT binary patch literal 22223 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 literal 0 HcmV?d00001 diff --git a/po/lv.po b/po/lv.po new file mode 100644 index 0000000..a160bfe --- /dev/null +++ b/po/lv.po @@ -0,0 +1,1235 @@ +# Latvian translation of diffutils. +# Copyright (C) 2009 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils package. +# Rihards PriedÄ«tis <rprieditis@gmail.com>, 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils-2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2009-07-30 16:10+0100\n" +"Last-Translator: Rihards PriedÄ«tis <rprieditis@gmail.com>\n" +"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "programmas kļūda" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "steka pārplÅ«Å¡ana" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Nezināma sistēmas kļūda" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "parasts tukÅ¡s fails" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "parasts fails" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "direktorija" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "Ä«paÅ¡ais bloka fails" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "Ä«paÅ¡aias rakstzÄ«mes fails" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "simboliskā saite" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "sokets" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "ziņu rinda" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semafors" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "koplietots atmiņas objekts" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "tipa atmiņas objekts" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "dÄ«vains fails" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: opcija \"%s\" ir divdomÄ«ga\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: opcija \"--%s\" neatļauj argumentu\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: opcija \"%c%s\" neatļauj argumentu\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: opcijai \"%s\" nepiecieÅ¡ams arguments\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: neatpazÄ«ta opcija \"--%s\"\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: neatpzÄ«ta opcija \"%c%s\"\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: nderÄ«ga opcija -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: opcijai nepiecieÅ¡ams arguments -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: opcija \"-W %s\" ir divdomÄ«ga\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: opcija \"-W %s\" neatļauj argumentus\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: opcijai \"%s\" nepiecieÅ¡ams arguments\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "VeiksmÄ«gi" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Nav sakritÄ«bu" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "NederÄ«ga regulārā izteiksme" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "NederÄ«ga salÄ«dzināmā rakstzÄ«me" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "NederÄ«gs rakstzÄ«mju klases nosaukums" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Atkārtojošās otrādās slÄ«psvÄ«tras" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "NederÄ«ga aizmugures atsauce" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "NesakrÄ«toÅ¡s [ vao [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "NesakrÄ«toÅ¡s ( vai \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "NesakrÄ«toÅ¡s \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "NederÄ«gs saturs iekÅ¡ \\{\\}" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "NederÄ«gas apgabala beigas" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Izskausta atmiņa" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "NederÄ«ga iepriekšējā regulārā izteiksme" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "PriekÅ¡laicÄ«gas beigas regulārai izteiksmei" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Pārāk liela regulārā izteiksme" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "NesakrÄ«toÅ¡s ) vai \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Nav iepriekšējas regulārās izteiksmes" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "atmiņa izskausta" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Nezināma sistēmas kļūda" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "nederÄ«ga --bytes vērtÄ«ba \"%s\"" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "nederÄ«gs horizontālais garums \"%s\"" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "SarakstÄ«ja %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "SarkstÄ«ja %s un %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "SarkstÄ«ja %s, %s un %s\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 "" +"SarkstÄ«ja %s, %s, %s\n" +"un %s\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"SarkstÄ«ja %s, %s, %s,\n" +"%s un %s\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"SarkstÄ«ja %s, %s, %s,\n" +"%s, %s un %s\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"SarkstÄ«ja %s, %s, %s,\n" +"%s, %s, %s un %s\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"SarkstÄ«ja %s, %s, %s,\n" +"%s,%s, %s, %s,\n" +"un %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"SarkstÄ«ja %s, %s, %s,\n" +"%s,%s, %s, %s,\n" +"%s un %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"SarkstÄ«ja %s, %s, %s,\n" +"%s,%s, %s, %s,\n" +"%s, %s un citi.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Faili %s un %s atÅ¡Ä·iras\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Faili %s un %s atÅ¡Ä·iras\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Nav jaunu rindu faila beigās" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Mēģiniet \"%s --help\" , lai iegÅ«tu vairāk informācijas." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "nederÄ«ga --ignore-initial vērtÄ«ba \"%s\"" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "opcijas -l un -s nav savstarpēji saderÄ«gas" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "rakstÄ«Å¡ana neizdevās" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "standarta izvads" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Drukāt atÅ¡Ä·irÄ«gos bitus." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i IZLAIST --ignore-initial=IZLAIST Izlaists pirmos IZLAIŽAMOS baitus " +"ievadā." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i IZLAIST1:IZLAIST2 --ignore-initial=IZLAIST1:IZLAIST2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +"Izalist pirmo IZLAIST1 baitus no FAILA1 un pirmos IZLAIST2 baitus no FAILA2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose IzvadÄ«t baita numurus un vērtÄ«bas visiem atÅ¡Ä·irÄ«gajiem " +"baitiem." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n ROBEŽA --bytes=ROBEŽA SalÄ«dzināt lÄ«dz ROBEŽAS baitiem." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent Izvada neko, izdod tikai izejas stāvokli." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Izvada versijas informāciju." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Izvada Å¡o palÄ«dzÄ«bu." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "IzmantoÅ¡ana: %s [OPCIJAS]... FAILS1 [FAILS2 [IZLAIST1 [IZLAIST2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "SalÄ«dzināt divus faili baitu pa baitam." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "IZLAIST1 un IZLAIST2 ir cipari, cik baitus izlaist katrā failā." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"IZLAIST vērtÄ«bas var sekot vairāki piedēkļi:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, un tā tālāk T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Ja FAILAM ir \"-\" vai trÅ«kst, tad lasÄ«t standarta ievadu." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"Izejas stāvoklis ir 0, ja ievads ir tāds pats, 1 ja tas ir atÅ¡Ä·irÄ«gs, 2 ja " +"ir neptikÅ¡anas." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "nederÄ«ga --bytes vērtÄ«ba \"%s\"" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "trÅ«kst operands pēc \"%s\"" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "papildus operands \"%s\"" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s atÅ¡Ä·iras: baits %s, rinda %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s atÅ¡Ä·iras: baits %s, rinda %s ir %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF uz %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "nederÄ«gs konteksta garums \"%s\"" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "lapoÅ¡ana netiek atbalstÄ«ta uz Å¡Ä« resursdatora" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "pārāk daudz faila etiÄ·eÅ¡u opciju" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "nederÄ«gs platums \"%s\"" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "konfliktējoÅ¡as platuma opcijas" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "nederÄ«gs horizontālais garums \"%s\"" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "nederÄ«gs tabulācijas izmērs \"%s\"" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "konfliktējoÅ¡as tabulācijas izmēru opcijas" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "--from-file un --to-file abi norādÄ«ti" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "SalÄ«dzina failu rindu pa rindai" + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case Ignorē reÄ£istra atÅ¡Ä·irÄ«bas faila saturā." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Ignorēt reÄ£istru, kad salÄ«dzina faila nosaukumus." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Neignorēt reÄ£istru kad salÄ«dzina faila " +"nosaukumus." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Ignorēt izmaiņas, dēļ tabulācijas izpleÅ¡anās." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Ignorēt izmaiņas, dēļ atstarpēm." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Ignorēt visas atstarpes." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines Ignorēt izmaiņas rindās, kur viss ir tukÅ¡s." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RE --ignore-matching-lines=RE Ignorēt izmaiņas rindās, kuras sakrÄ«t ar " +"RE." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Noņemt atkārtojoÅ¡o rakstatgrieze ievadā." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary LasÄ«t un rakstÄ«t datus binārajā režīmā." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Izturēties pret visiem failiem, kā teksta." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C NUM --context[=NUM] Izvada NUM (noklusētais 3) rinfas no kopētā " +"konteksta.\n" +"-u -U NUM --unified[=NUM] Izvada NUM (noklusētais 3) rinfas no unificēta " +"konteksta.\n" +" --label ETIĶETE Izmanto ETIĶETES faila nosaukumos.\n" +" -p --show-c-function Rāda C funkcijas, kurās ir izmaiņas.\n" +" -F RE --show-function-line=RE Rāda nesenāko skarÄ«toÅ¡o RE rindu." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Izvadit tikai, ja faili atÅ¡Ä·iras." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Izvada ed skriptā." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Izvada parastu diff." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Izvada RCS diff formātā." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Izvada divas kolonas.\n" +" -W NUM --width=NUM Izvada lÄ«dz NUM (noklusētais 130) drukas kolonas.\n" +" --left-column Izvada tikai kreisās kolonas no kopējām rindām.\n" +" --suppress-common-lines Neizvada kopējās rindas." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NOSAUKUMS --ifdef=NOSAUKUMS Izvads sapludināts failā, lai rāda \"#ifdef " +"NOSAUKUMS\" diffs." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT LÄ«dzigs, bet formāts GTYPE ievades grupām ar GFMT." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "--line-format=LFMT LÄ«dzÄ«gs, bet formāts visam ievades rindām ar LFMT." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT LÄ«dzÄ«gs, bet formāts LTYPE ievades rindām ir LFMT." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE ir \"old\", \"new\", vai \"unchanged\". GTYPE ir LTYPE vai \"changed" +"\"." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT var saturēt:\n" +" %< rindas no FAILA1\n" +" %> rindas no FAILA2\n" +" %= rindas kopÄ«gas FAILĀ1 un FAILĀ2\n" +" %[-][PLATUMS][.[PREC]]{doxX}BURTS printf-style specifikācija BURTAM\n" +" BURTS ir šāds jaunai grupai, mazais reÄ£istrs vecais grupai:\n" +" F pirmās rindas numurs\n" +" L pēdējās rindas numurs\n" +" N rindu skaits = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT var saturēt:\n" +" %L rindas saturs\n" +" %l rindas saturs, izņemot atkārtojošās jaunās rindas\n" +" %[-][PLATUMS][.[PREC]]{doxX}n printf-style specifikācija ievades rindu " +"numuriem" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Gan GFMT, gan LFMT var saturēt:\n" +" %% %\n" +" %c'C' vienu rakstzÄ«mi C\n" +" %c'\\OOO' rakstzÄ«mi ar oktālo kodu OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Izlaist izvadu caur \"pr\", lai lapotu to." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Izplest tabulācijas atstarpi izvadā." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "-T --initial-tab Pacelt tabulācijas rindu pirm tabulācijas." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=NUMURS Tabulāciju apstāšanāss ir katru NUMURU (noklusētais ir 8) " +"drukas kolonas." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "" +"-r --recursive RekursÄ«vā salÄ«dzināšana jebkurai atrastai apakÅ¡direktorijai." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Izturēties pret trÅ«kstoÅ¡iem faili, kā tukÅ¡iem failiem." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Izturēties pret trÅ«kstoÅ¡iem failiem kā tukÅ¡iem." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Ziņot, kad divi faili ir vienādi." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x PAT --exclude=PAT Izslēgt failus, kuri atbilst PAT." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FAILS --exclude-from=FAILS Izslēgt failus, kuri atbilst jebkuram " +"paternam FAILĀ." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S FAILS --starting-file=FAILS Sākt ar FAILU, kad salÄ«dzina direktorijas." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FAILS1 SalÄ«dzini FAILU1 ar visiem operandiem. FAILS1 nevar bÅ«t " +"direktorija." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FAILS2 SalÄ«dzini visus operandus ar FAILU2. FAILS2 nevar bÅ«t " +"direktorija." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=SKAITS Uzturēt SKAITU lÄ«niju kopējiem prefiksiem un " +"sufiksiem." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Mēģināt smagi atrast paÅ¡as mazākas izmaiņu kopas." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Pieņemt, ka faili ir lieli un satur daudzas mazas " +"izmaiņas." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"FAILI ir \"FAILS1 FAILS2\" vai \"DIREKTORIJA1 DIREKTORIJA2\" vai " +"\"DIREKTORIJA FAILS...\" vai \"FAILS... DIREKTORIJA\"." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Ja --from-file vai --to-file ir dots, nav nekādu ierobežojumu uz FAILIEM." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Ja FAILS ir \"-\", lasÄ«t standarta ievadu" + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "IzmantoÅ¡ana: %s [OPCIJAS]... FAILI\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "konfliktējoÅ¡a %s opcijas vērtÄ«ba \"%s\"" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "konfliktējoÅ¡a izvades stila opcijas" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Tikai iekÅ¡ %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "nevar salÄ«dzināt \"-\" ar direktoriju" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "-D opcija netik atbalstÄ«ta ar direktorijām" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Kopējās apakÅ¡direktorijas: %s un %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Fails %s ir %s kamēr fails %s ir %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Fails %s un %s ir identiski\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "savstarpēji nesaderÄ«gas opcijas" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "\"-\" norādÄ«ts vairāk par vienu ievades failu" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "lasÄ«Å¡ana neizdevās" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Izvada nesapludinātas izmaiņas no VECĀFAILĀ uz JŪSUFAILU iekÅ¡ " +"MANAFAILA." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Izvada nesapludinātās izmaiņas, ieliekot iekavās " +"konfliktus." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Izvada visas izmaņas, ieliekot iekavās konfliktus." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Izvada pārklājuÅ¡as izmaiņas." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Izvada pārklājuÅ¡as izmaiņas, ieliekot iekavās tās." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Izvada nesapludinātās nepārklājušās izmaiņas." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Izvada sapludinātu failu nevis ed skriptu (noklusētais ir -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L ETIĶETE --label=ETIĶETE Izmantot ETIĶETI nevis faila nosaukumu." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Apvienot `w' un `q' komandas ed skriptā." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" +"--diff-program=PROGRAMMA Izmantot PROGRAMMU, lai salÄ«dzinātu divus failus." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "IzmantoÅ¡ana: %s [OPCIJAS]... MANSFAILS VECAISFAILS JŪSUFAILS\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "SalÄ«dzināt trÄ«s failus rindiņu pa rindiņai." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"Izejas stāvoklis ir 0, ja tas ir veiksmÄ«gs, 1 ja ir konflikts, 2 ja ir " +"nepatikÅ¡anas." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "iekšējā kļūda: grÄ«stē saieÅ¡ana diff bloku formātā" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff neizdevās:" + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "iekšējā kļūda: nederÄ«gs diff veids iekÅ¡ process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "nederÄ«gs diff formāts; nederÄ«gs izmaiņu atdalÄ«tājs" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "nederÄ«gs diff formāts; nepilnÄ«ga pēdējā rindiņa" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "nevarēja izsaukt palÄ«gprogrammu \"%s\"" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "nederÄ«gs diff formāts; nederÄ«gas rindas ievades rakstzÄ«mes" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "iekšējā kļūda: nederÄ«gs uz izvadu padotais diff veids" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "ievades fails saruka" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "nevar salÄ«dzināt faila nosaukumus \"%s\" un \"%s\"" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o FAILS --output=FAILS Darboties interaktÄ«vi, izvadot izvadu uz FAILU." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "" +"-i --ignore-case UzskatÄ«t ka augšējais un apkšējais reÄ£istrs ir viens un " +"tas pats." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Ignorēt visas atstarpes." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w NUMURS --width=NUMURS Izvada lÄ«dz NUMURAM (noklusētais 130) drukas " +"kolonas." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column IzvadÄ«t tikai kreiso kolonu no kopējām rindām." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines NeizvadÄ«t kopējās rindas." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Pieņemt, ka faili ir lieli un satur daudzas mazas " +"izmaiņas." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "IzmantoÅ¡ana: %s [OPCIJAS]... FAILS1 FAILS2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Plecu-pie-pleca failu atÅ¡Ä·irÄ«bu sapludināšana" + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "nevar interaktÄ«vi sapludināt standarta ievadu" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "abi salÄ«dzināmie faili ir direktorijas" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tRediģēt tad izmantot abas versijas, katra izrotāta ar virsrakstu.\n" +"eb:\tRediģēt un tad izmantot abas versijas.\n" +"el:\tRediģēt un tad izmantot kreiso versiju.\n" +"er:\tRediģēt un tad izmantot labo versiju.\n" +"e:\tRediģēt jauno versiju.\n" +"l:\tIzmantot kreiso versiju.\n" +"r:\tIzmantot labo versiju.\n" +"s:\tKlusi iekļaut kopējās rindas.\n" +"v:\tDetalizēti iekļaut kopējās rindas.\n" +"q:\tIziet.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: neatļauta opcija -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Å Ä« ir brÄ«va programmatÅ«ra; apskaties izejas kodu autortiesÄ«bu " +#~ "nosacÄ«jumiem.\n" +#~ "NAV nekāda garantijas; pat TIRGOÅ ANAS vai DERĪBA KONKRĒTAM MĒRĶIM.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Ziņot par kļūdam uz <bug-gnu-utils@gnu.org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "`-%ld' opcija ir novecojusi; izmantojiet `-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "`-%ld' opcija ir novecojusi; nelietojiet to" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "netika atrasta palÄ«gprogramma \"%s\"" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "neizdevās izpildÄ«t palÄ«gprogrammu \"%s\"" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "neizdevās izpildÄ«t palÄ«gprogrammu \"%s\" (izejas stauss %d)" diff --git a/po/ms.gmo b/po/ms.gmo new file mode 100644 index 0000000000000000000000000000000000000000..a64ebf560f4ca1d459bf2a39e00109026af867b6 GIT binary patch literal 21581 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 literal 0 HcmV?d00001 diff --git a/po/ms.po b/po/ms.po new file mode 100644 index 0000000..32322a1 --- /dev/null +++ b/po/ms.po @@ -0,0 +1,1229 @@ +# Diffutils Bahasa Melayu (Malay) (ms). +# Copyright (C) 2003 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils package. +# Sharuzzaman Ahmat Raslan <sharuzzaman@myrealbox.com>, 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2005-03-29 19:43+0800\n" +"Last-Translator: Sharuzzaman Ahmat Raslan <sharuzzaman@myrealbox.com>\n" +"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.5\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "ralat program" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "stack melimpah" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Ralat sistem tidak diketahui" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "fail kosong biasa" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "fail biasa" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "direktori" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "fail khas blok" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "fail khas aksara" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "pautan simbolik" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "soket" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "barisan mesej" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semaphore" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "objek ingatan dikongsi" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "objek memori berjenis" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "fail pelik" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: pilihan `%s' adalah kabur\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: pilihan `--%s' tidak mengizinkan hujah\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: pilihan `%c%s' tidak mengizinkan hujah\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: pilihan `%s' memerlukan hujah\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: pilihan tidak dikenali `--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: pilihan tidak dikenali `%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: pilihan tidak sah -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: pilihan memerlukan hujah -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: pilihan `-W %s' adalah kabur\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: pilihan `-W %s' tidak mengizinkan hujah\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: pilihan `%s' memerlukan hujah\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Berjaya" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Tiada padanan" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Regular expression tidak sah" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Aksara pengumpulsemakan tidak sah" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Nama kelas aksara tidak sah" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Slash dibelakang" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Rujukan belakang tidak sah" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "[ atau [^ tidak sepadan" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "( atau \\( tidak sepadan" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "\\{ tidak sepadan" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Kandungan \\{\\} tidak sah" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Julat akhir tidak sah" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Kehabisan memori" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Regular expression awalan tidak sah" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Regular expression tamat tiba-tiba" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Regular expression terlalu besar" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr ") atau \\) tidak sepadan" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Tiada regular expression terdahulu" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "kehabisan memori" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Ralat sistem tidak diketahui" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "nilai --bytes `%s' tidak sah" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "panjang horizon `%s' tidak sah" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Ditulis oleh %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Ditulis oleh %s and %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Ditulis oleh %s, %s, and %s.\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 "" +"Ditulis oleh by %s, %s, %s,\n" +"and %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Ditulis oleh %s, %s, %s,\n" +"%s, and %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Ditulis oleh %s, %s, %s,\n" +"%s, %s, and %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Ditulis oleh %s, %s, %s,\n" +"%s, %s, %s, and %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Ditulis oleh %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Ditulis oleh %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Ditulis oleh %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Fail %s dan %s berbeza\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Fail %s dan %s berbeza\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Tiada baris baru pada penghujung fail" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Cuba `%s --help' untuk maklumat lanjut." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "nilai `%s' --ignore-initial tidak sah" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "pilihan -l dan -s tidak sepadan" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "gagal menulis" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "keluaran piawai" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Cetak byte berbeza." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i LANGKAU --ignore-initial=LANGKAU Langkau LANGKAU byte pertama masukan." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i LANGKAU1:LANGKAU2 --ignore-initial=LANGKAU1:LANGKAU2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Langkau LANGKAU1 byte pertama untuk FAIL1 dan LANGKAU2 byte pertama untuk " +"FAIL2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose Keluarkan nombor byte dan nilai semua byte berbeza." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n HAD --bytes=HAD Banding paling banyak HAD byte." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "" +"-s --quiet --silent Tiada keluaran; hasilkan status keluaran sahaja." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Keluarkan maklumat versi." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Keluarkan bantuan ini." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Penggunaan: %s [PILIHAN]... FAIL1 [FAIL2 [LANGKAU1 [LANGKAU2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Banding dua fail setiap byte." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "" +"LANGKAU1 dan LANGKAU2 adalah jumlah byte untuk dilangkau dalam setiap fail." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Nilai LANGKAU boleh diikuti dengan akhiran pekali berikut:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, dan seterusnya untuk T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Jika FAIL adalah `-' atau tiada, baca masukan piawai." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"Status keluar adalah 0 jika masukan adalah sama, 1 jika berbeza, 2 jika " +"bermasalah." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "nilai --bytes `%s' tidak sah" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "operan hilang selepas `%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "operan tambahan `%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s berbeza: byte %s, baris %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s berbeza: byte %s, baris %s adalah %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF pada %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "panjang konteks `%s' tidak sah" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "pagination tidak disokong pada hos ini" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "terlalu banyak pilihan label fail" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "lebar `%s' tidak sah" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "pilihan lebar berkonflik" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "panjang horizon `%s' tidak sah" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "saiz tab `%s' tidak sah" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "pilihan saiz tab berkonflik" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "--from-file dan --to-file kedua-duanya dinyatakan" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Banding fail setiap baris." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case Abai perbezaan case dalam kandungan fail." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "--ignore-file-name-case Abai case apabila membanding nama fail." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Ambil kira case ketika membanding nama fail." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Abai perubahan diakibatkan oleh pengembangan tab." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Abai perubahan dalam jumlah ruang putih." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Abai semua ruang putih." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B --ignore-blank-lines Abai perubahan dimana baris adalah kesemuanya " +"kosong." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RE --ignore-matching-lines=RE Abai perubahan dimana baris semua sepadan " +"RE." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Buang enter penghujung pada masukan." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Baca dan tulis data dalam mod binari." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Layan semua fail sebagai teks." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C NOM --context[=NOM] Keluarkan NOM (default 3) baris konteks yang " +"disalin.\n" +"-u -U NOM --unified[=NOM] Keluarkan NOM (default 3) baris konteks " +"tergabung.\n" +" --label LABEL Guna LABEL selain daripada nama fail.\n" +" -p --show-c-function Papar fungsi C yang mana dalam setiap perubahan.\n" +" -F RE --show-function-line=RE Papar baris terbaru sepadan RE." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Keluaran hanya jika fail berbeza." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Keluarkan skrip ed." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Keluarkan diff normal." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Keluarkan diff format RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Keluaran dalam dua lajur.\n" +" -W NOM --width=NOM Keluarkan paling banyak NOM (default 130) lajur " +"cetakan.\n" +" --left-column Keluarkan hanya lajur kiri pada baris sama.\n" +" --suppress-common-lines Jangan keluarkan baris sama." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NAMA --ifdef=NAMA Keluarkan fail tergabung untuk menunjukkan perbezaa " +"`#ifdef NAMA'." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT Hampir sama, tetapi format masukan GTYPE " +"dikumpulkan dengan GFMT." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LFMT Hampir sama, tetapi format semua baris masukan dengan " +"LFMT." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT Hampir sama, tetapi format baris masukan LTYPE " +"dengan LFMT." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE adalah `old', `new', atau `unchanged'. GTYPE adalah LTYPE atau " +"`changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT boleh mengandungi:\n" +" %< baris dari FAIL1\n" +" %> baris dari FAIL2\n" +" %= baris yang sama pada FAIL1 dan FAIL2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER spec gaya-printf untuk LETTER\n" +" LETTER adalah seperti berikut untuk kumpulan baru, huruf kecil untuk " +"kumpulan lama:\n" +" F nombor baris pertama\n" +" L nombor baris terakhir\n" +" N jumlah baris = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT boleh mengandungi:\n" +" %L kandungan baris\n" +" %l kandungan baris, tidak termasuk baris baru dipenghujung\n" +" %[-][WIDTH][.[PREC]]{doxX}n spec gaya-printf untuk nombor baris masukan" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Sama ada GFMT atau LFMT boleh mengandungi:\n" +" %% %\n" +" %c'C' satu aksara C\n" +" %c'\\OOO' aksara dengan kod oktal OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Salur keluaran menerusi `pr' untuk paginate." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Kembang tab kepada ruang dalam keluaran." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "-T --initial-tab Jadikan tab sebaris dengan menambah awalan tab." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=NOM Hentian tab setial NOM (default 8) lajur cetakan." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "" +"-r --recursive Banding berulang-ulang sebarang subdirektori yang dijumpai." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Anggap fail tidak wujud sebagai kosong." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "--unidirectional-new-file Anggap fail tidak wujud sebagai kosong." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Lapor apabila dua fail adalah sama." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x PAT --exclude=PAT Asing fail yang sepadan PAT." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FAIL --exclude-from=FAIL Asing fail yang sepadan sebarang corak dalam " +"FAIL." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S FAIL --starting-file=FAIL Mula dengan FAIL apabila membanding direktori." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FAIL1 Banding FAIL1 kepada semua operan. FAIL1 boleh jadi " +"direktori." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FAIL2 Banding semua operan kepada FAIL2. FAIL2 boleh jadi " +"direktori." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "--horizon-lines=NOM Pastikan NOM baris prefix dan suffix sama." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Cuba cari dengan tekun set perbezaan yang kecil." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Anggap fail besar dan banyak perubahan kecil tersebar." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"FAIL-FAIL adalah `FAIL1 FAIL2' atau `DIR1 DIR2' atau `DIR FAIL...' atau " +"`FAIL... DIR'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "Jika --from-file atau --to-file diberi, tiada sekatan pada FAIL." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Jika FAIL adalah `-', baca masukan piawai." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Penggunaan: %s [PILIHAN]... FAIL\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "nilai pilihan %s berkonflik `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "pilihan gaya keluaran berkonflik" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Hanya dalam %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "tidak dapat membandingkan `-' kepada direktori" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "pilihan -D tidak disokong dengan direktori" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Subdirektori umum: %s dan %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Fail %s adalah %s manakala fail %s adalah %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Fail %s dan %s adalah serupa\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "pilihan tidak sepadan" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "`-' dinyatakan untuk lebih daripada satu fail masukan" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "gagal membaca" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Keluarkan perubahan tidak digabung daripada OLDFILE ke YOURFILE " +"kedalam MYFILE." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Keluarkan perubahan tidak digabung, kurungkan konflik." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Keluarkan semua perubahan, kurungkan konflik." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Keluarkan perubahan bertindih." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Keluarkan perubahan bertindih, kurungkan mereka." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "" +"-3 --easy-only Keluarkan perubahan tidak digabung dan tidak bertindih." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Keluarkan fail tergabung selain daripada skrip ed (default -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L LABEL --label=LABEL Guna LABEL selain daripada nama fail." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Tambah arahan `w' dan `q' kepada skrip ed." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAM Guna PROGRAM untuk membanding fail." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Penggunaan: %s [PILIHAN]... MYFILE OLDFILE YOURFILE\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Banding tiga fail tiap-tiap baris." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"Status keluar adalah 0 jika berjaya, 1 jika konflik, 2 jika bermasalah." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "ralat dalaman: kerosakan dalam format blok diff" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff gagal: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "ralat dalaman: jenis diff tidak sah dalam process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "format diff tidak sah; pengasing perbezaan tidak sah" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "format diff tidak sah; baris akhir tidak lengkap" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "program subsidiari `%s' tidak dapat dilaksanakan" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "format diff tidak sah; aksara awal baris tidak betul" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "ralat dalaman: jenis diff tidak sah diberikan kepada keluaran" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "fail masukan mengecil" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "tidak dapat membandingkan fail bernama `%s' dan `%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o FAIL --output=FAIL Operasi secara interaktif, hantar keluaran ke FAIL." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Anggap huruf besar dan kecil sebagai sama." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Abai semua ruang putih." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w NOM --width=NOM Keluarkan paling banyak NOM (default 130) lajur cetakan." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Keluarkan hanya lajur kiri baris yang sama." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Jangan keluarkan baris sama." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Anggap fail besar dan banyak perubahan kecil " +"tersebar." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Penggunaan: %s [PILIHAN]... FAIL1 FAIL2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Gabung bersebelahan perbezaaan fail." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "tidak dapat menggabung masukan piawai secara interaktif" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "kedua-dua fail yang akan dibanding adalah direktori" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tSunting kemudian guna kedua-dua versi, setiap satu ditambah dengan " +"header.\n" +"eb:\tSunting kemudian guna kedua-dua versi.\n" +"el:\tSunting kemudian guna versi kiri.\n" +"er:\tSunting kemudian guna versi kanan.\n" +"e:\tSunting versi baru.\n" +"l:\tGuna versi kiri.\n" +"r:\tGuna versi kanan.\n" +"s:\tSertakan baris sama dengan senyap.\n" +"v:\tSertakan baris sama dengan berjela.\n" +"q:\tKeluar.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: pilihan salah -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Ini adalah perisian bebas; lihat sumber untuk syarat menyalin. TIADA " +#~ "jaminan disediakan;\n" +#~ "tidak juga untuk KEBOLEHDAGANGAN atau KEUPAYAAN UNTUK SESUATU TUJUAN " +#~ "KHUSUS.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Lapor pepijat kepada <bug-gnu-utils@gnu.org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "pilihan `-%ld' tidak lagi digunakan; guna `-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "pilihan `-%ld' tidak lagi digunakan; abaikannya" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "program subsidiari `%s' tidak dijumpai" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "program subsidiari `%s' gagal" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "program subsidiari `%s' gagal (status keluar %d)" diff --git a/po/nl.gmo b/po/nl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..bd7e3a097011fa0420d8878576eaef0066fe0372 GIT binary patch literal 27752 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 Z8>DG1AcB3(^eK5Wa>-hBUfTj;{~xZwbAA8- literal 0 HcmV?d00001 diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..0bce4dd --- /dev/null +++ b/po/nl.po @@ -0,0 +1,1252 @@ +# Dutch translations for diffutils. +# Copyright (C) 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils package. +# +# Elros Cyriatan <cyriatan@fastmail.fm>, 2004. +# Benno Schulenberg <benno@vertaalt.nl>, 2007, 2008, 2010. +msgid "" +msgstr "" +"Project-Id-Version: diffutils-2.9\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2010-04-04 12:18+0200\n" +"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n" +"Language-Team: Dutch <vertaling@vrijschrift.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "programmafout" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "stack-overloop" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Onbekende systeemfout" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "leeg normaal bestand" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "normaal bestand" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "map" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "blok-apparaat" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "byte-apparaat" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "symbolische koppeling" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "socket" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "berichtenwachtrij" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semafoor" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "gedeeld geheugenobject" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "zelfstandig geheugenobject" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "merkwaardig bestand" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: optie '%s' is niet eenduidig\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: optie '--%s' staat geen argument toe\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: optie '%c%s' staat geen argument toe\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: optie '%s' vereist een argument\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: onbekende optie '--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: onbekende optie '%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ongeldige optie -- '%c'\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: optie vereist een argument -- '%c'\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: optie '-W %s' is niet eenduidig\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: optie '-W %s' staat geen argument toe\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: optie '%s' vereist een argument\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "‘" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "’" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Gelukt" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Geen overeenkomsten" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Ongeldige reguliere expressie" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Ongeldig samengesteld teken" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Ongeldige tekenklassenaam" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Backslash aan het eind" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Ongeldige terugverwijzing" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Ongepaarde [ of [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Ongepaarde ( of \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Ongepaarde \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Ongeldige inhoud van \\{\\}" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Ongeldig bereikeinde" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Onvoldoende geheugen beschikbaar" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Ongeldige voorafgaande reguliere expressie" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Voortijdig einde van reguliere expressie" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Reguliere expressie is te groot" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Ongepaarde ) of \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Geen eerdere reguliere expressie" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "onvoldoende geheugen beschikbaar" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "standaardinvoer" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "standaarduitvoer" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "standaardfoutuitvoer" + +#: lib/xfreopen.c:38 +msgid "unknown stream" +msgstr "onbekende stroom" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "opnieuw openen van '%s' met modus %s is mislukt" + +#: lib/xstrtol-error.c:63 +#, c-format +msgid "invalid %s%s argument `%s'" +msgstr "ongeldig argument '%3$s' van %1$s%2$s" + +#: lib/xstrtol-error.c:68 +#, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "ongeldige suffix in argument '%3$s' van %1$s%2$s" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "argument '%3$s' van %1$s%2$s is te groot" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "In pakketvorm gebracht door %s (%s)\n" + +#: lib/version-etc.c:77 +#, c-format +msgid "Packaged by %s\n" +msgstr "In pakketvorm gebracht door %s\n" + +#. 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:84 +msgid "(C)" +msgstr "©" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" +"\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 "Geschreven door %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Geschreven door %s en %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Geschreven door %s, %s en %s.\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 "" +"Geschreven door %s, %s, %s\n" +"en %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Geschreven door %s, %s, %s,\n" +"%s en %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Geschreven door %s, %s, %s,\n" +"%s, %s en %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Geschreven door %s, %s, %s,\n" +"%s, %s, %s en %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Geschreven door %s, %s, %s,\n" +"%s, %s, %s, %s\n" +"en %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Geschreven door %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s en %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Geschreven door %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s en anderen.\n" + +#. 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 "" +"\n" +"Rapporteer gebreken in het programma aan <%s>;\n" +"meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n" + +#: lib/version-etc.c:247 +#, 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 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Webpagina van %s: <%s>\n" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "Webpagina van %s: <http://www.gnu.org/software/%s/>\n" + +#: lib/version-etc.c:256 +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" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Bestanden %s en %s zijn verschillend\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Bestanden %s en %s zijn verschillend\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Geen regeleindeteken (LF) aan einde van bestand" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjörn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "David MacKenzie" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Typ '%s --help' voor meer informatie." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "ongeldige waarde '%s' voor '--ignore-initial'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "opties '-l' en '-s' gaan niet samen" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "schrijven is mislukt" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "standaarduitvoer" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Bytes tonen die verschillen." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i OVERSLAAN --ignore-initial=OVERSLAAN De eerste OVERSLAAN bytes van\n" +" de invoer overslaan." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i OVERSLAAN1:OVERSLAAN2 --ignore-initial=OVERSLAAN1:OVERSLAAN2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" De eerste OVERSLAAN1 bytes van BESTAND1 en de eerste OVERSLAAN2 bytes\n" +" van BESTAND2 overslaan." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose Bytenummers en -waarden tonen van bytes die verschillen." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n AANTAL --bytes=AANTAL Maximaal AANTAL bytes vergelijken." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent Niets tonen; alleen een afsluitwaarde leveren." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Versie-informatie tonen." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Deze hulptekst tonen." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "" +"Gebruik: %s [OPTIE]... BESTAND1 [BESTAND2 [OVERSLAAN1 [OVERSLAAN2]]]\n" +"\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Twee bestanden byte-voor-byte vergelijken." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "" +"De waarden OVERSLAAN1 en OVERSLAAN2 zijn het aantal bytes dat in elk " +"bestand\n" +" moet worden overgeslagen." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Deze waarden voor OVERSLAAN mogen worden gevolgd door de volgende\n" +" vermenigvuldigende achtervoegsels:\n" +" kB 1000, K 1024, MB 1.000.000, M 1.048.576,\n" +" GB 1.000.000.000, G 1.073.741.824, enzovoort voor T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "" +"Als een BESTAND ontbreekt of '-' is, wordt er van standaardinvoer gelezen." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"\rDe afsluitwaarde is 0 als de invoeren gelijk zijn, 1 als ze verschillen,\n" +"\r en 2 bij problemen." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "ongeldige waarde '%s' voor --bytes" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "ontbrekend argument na '%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "overtollig argument '%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s verschillen: byte %s, regel %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s verschillen: byte %s, regel %s, is %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: einde-van-bestand op %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "Paul Eggert" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "Mike Haertel" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "David Hayes" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "Richard Stallman" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "Len Tower" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "ongeldige contextlengte '%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "het in pagina's indelen is op deze computer niet mogelijk" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "te veel bestandslabel-opties" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "ongeldige breedte '%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "conflicterende breedte-opties" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "ongeldige horizonlengte '%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "ongeldige tabgrootte '%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "conflicterende tabgrootte-opties" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "zowel '--from-file' als '--to-file' zijn opgegeven" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Bestanden regel-voor-regel vergelijken." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" +"-i --ignore-case Verschil tussen hoofd- en kleine letters negeren in\n" +" bestandsinhoud." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Verschil tussen hoofd- en kleine letters negeren " +"bij\n" +" vergelijken van bestandsnamen." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Onderscheid maken tussen hoofd- en kleine " +"letters\n" +" bij vergelijken van bestandsnamen." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "-E --ignore-tab-expansion Omzettingen van tabs in spaties negeren." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "" +"-b --ignore-space-change Wijzigingen in hoeveelheid witruimte negeren." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Alle witruimte negeren." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B --ignore-blank-lines Wijzigingen waarvan regels leeg zijn negeren." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RE --ignore-matching-lines=RE Wijzigingen waarvan alle regels\n" +" overeenkomen met expressie RE negeren." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "" +"--strip-trailing-cr Enter-tekens (CR's) aan einde van regels weglaten." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Gegevens in binaire modus lezen en schrijven." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Alle bestanden als tekst behandelen." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C AANTAL --context[=AANTAL] AANTAL (standaard 3) regels van\n" +" gekopieerde context tonen.\n" +"-u -U AANTAL --unified[=AANTAL] AANTAL (standaard 3) regels van\n" +" geünificeerde context tonen.\n" +"--label LABEL Dit LABEL gebruiken in plaats van bestandsnaam.\n" +"-p --show-c-function Vermelden in welke C-functie elke wijziging is.\n" +"-F RE --show-function-line=RE Recentste regel overeenkomend met RE tonen." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Alleen aangeven of bestanden verschillen." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Een ed-script produceren." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Een gewone diff produceren." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Een diff in RCS-opmaak produceren." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Resultaat weergeven in twee kolommen.\n" +"-W AANTAL --width=AANTAL Maximaal AANTAL (standaard 130) kolommen tonen.\n" +"--left-column Van overeenkomende regels alleen de linker kolom tonen.\n" +"--suppress-common-lines Overeenkomende regels niet tonen." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NAAM --ifdef=NAAM Samengevoegd bestand tonen om verschillen in\n" +" '#ifdef NAAM' te laten zien." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GSOORT-group-format=GOPMAAK Iets dergelijks, maar dan invoergroepen van\n" +" soort GSOORT opmaken met GOPMAAK." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LOPMAAK Iets dergelijks, maar dan alle invoerregels opmaken\n" +" met LOPMAAK." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LSOORT-line-format=LOPMAAK Iets dergelijks, maar dan invoerregels van\n" +" soort LSOORT opmaken met LOPMAAK." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LSOORT is 'old' (oud), 'new' (nieuw), of 'unchanged' (ongewijzigd).\n" +" GSOORT is LSOORT of 'changed' (gewijzigd)." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GOPMAAK mag bevatten:\n" +" %< regels van BESTAND1\n" +" %> regels van BESTAND2\n" +" %= regels overeenkomend in BESTAND1 en BESTAND2\n" +" %[-][BREEDTE][.[PREC]]{doxX}LETTER printf-stijl specificatie voor " +"LETTER\n" +" LETTERs zijn als volgt voor nieuwe groep, kleine letter voor oude " +"groep:\n" +" F eerste regelnummer\n" +" L laatste regelnummer\n" +" N aantal regels = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LOPMAAK mag bevatten:\n" +" %L inhoud van regel\n" +" %l inhoud van regel, behalve evt. witregel aan einde\n" +" %[-][BREEDTE][.[PREC]]{doxX}n specificatie in printf-stijl voor\n" +" invoerregelnummer" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" GOPMAAK of LOPMAAK mogen bevatten:\n" +" %% %\n" +" %c'C' het enkele teken C\n" +" %c'\\OOO' het teken met octaalcode OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "" +"-l --paginate De uitvoer door 'pr' halen om deze in pagina's in te delen." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Tabs uitschrijven naar spaties in uitvoer." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Tabs uitlijnen door een tab aan het begin in te voegen." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=AANTAL Tab-stops op elke AANTAL posities (standaard 8)." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" +"--suppress-blank-empty Spatie of tab onderdrukken voor lege uitregels." + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Recursief elke gevonden submap vergelijken." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Afwezige bestanden als leeg behandelen." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Alleen bestanden die afwezig zijn in de eerste " +"map\n" +" als leeg behandelen." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "" +"-s --report-identical-files Vermelden of twee bestanden hetzelfde zijn." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "" +"-x PATROON --exclude=PATROON Bestanden uitsluiten als ze overeenkomen met\n" +" PATROON." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X BESTAND --exclude-from=BESTAND Bestanden uitsluiten die overeenkomen " +"met\n" +" een patroon in BESTAND." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S BESTAND --starting-file=BESTAND Beginnen met BESTAND bij vergelijken " +"van\n" +" mappen." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=BESTAND1 BESTAND1 met alle argumenten vergelijken;\n" +" BESTAND1 mag een map zijn." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=BESTAND2 Alle argumenten met BESTAND2 vergelijken;\n" +" BESTAND2 mag een map zijn." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=AANTAL Dit AANTAL regels met identieke kop en staart\n" +" bij vergelijkingsproces meenemen." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "" +"-d --minimal Moeite doen om een kleinere verzameling wijzigingen te vinden." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Aannemen dat bestanden groot zijn en veel kleine,\n" +" verspreide wijzigingen hebben." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"\rBESTANDEN is 'BESTAND1 BESTAND2' of 'MAP1 MAP2' of\n" +"\r 'MAP BESTAND...' of 'BESTAND... MAP'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Als '--from-file' of '--to-file' gegeven is, mag BESTANDEN van alles zijn." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Als een BESTAND '-' is, wordt er van standaardinvoer gelezen." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "" +"Gebruik: %s [OPTIE]... BESTANDEN\n" +"\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "conflicterende waarde '%2$s' van optie %1$s" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "conflicterende uitvoerstijl-opties" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Alleen in %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "kan '-' niet met een map vergelijken" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "optie '-D' is niet mogelijk bij mappen" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Gemeenschappelijke submappen: %s en %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Bestand %s is een %s terwijl bestand %s een %s is\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Bestanden %s en %s zijn identiek\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "Randy Smith" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "niet-samengaande opties" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "'-' opgegeven voor meer dan één invoerbestand" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "lezen is mislukt" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Niet-samengevoegde wijzigingen van OUDBESTAND naar UWBESTAND\n" +" in MIJNBESTAND tonen." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Niet-samengevoegde wijzigingen tonen, met rechte haken " +"om\n" +" de conflicten." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "" +"-A --show-all Alle wijzigingen tonen, met rechte haken om de conflicten." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Overlappende wijzigingen tonen." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Overlappende wijzigingen tonen, tussen rechte haken." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "" +"-3 --easy-only Niet-samengevoegde niet-overlappende wijzigingen tonen." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Samengevoegd bestand tonen (standaard met -A) i.p.v. ed-script." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "" +"-L LABEL --label=LABEL Dit LABEL gebruiken in plaats van bestandsnaam." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i De opdrachten 'w' en 'q' toevoegen aan het einde van ed-scripts." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" +"--diff-program=PROGRAMMA PROGRAMMA gebruiken om bestanden te vergelijken." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "" +"Gebruik: %s [OPTIE]... MIJNBESTAND OUDBESTAND UWBESTAND\n" +"\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Drie bestanden regel-voor-regel vergelijken." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"De afsluitwaarde is 0 bij succes, 1 bij een conflict, en 2 bij problemen." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "*interne fout*: opmaak van diff-blokken is verhaspeld" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff is mislukt: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "*interne fout*: ongeldig soort diff in process_diff()" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "ongeldige diff-opmaak: ongeldig scheidingsteken voor veranderingen" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "ongeldige diff-opmaak: incomplete laatste regel" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "hulpprogramma '%s' kan niet worden aangeroepen" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "ongeldige diff-opmaak: onjuiste tekens aan begin van regel" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "*interne fout*: ongeldig soort diff naar uitvoer gestuurd" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "invoerbestand is gekrompen" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "kan bestandsnamen '%s' en '%s' niet vergelijken" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "%s: oneindige lus in de mappen" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "Thomas Lord" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o BESTAND --output=BESTAND Interactief werken; het resultaat opslaan in\n" +" BESTAND." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Hoofd- en kleine letters als hetzelfde zien." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Alle witruimte negeren." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w AANTAL --width=AANTAL Maximaal AANTAL kolommen tonen (standaard 130)." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Bij gelijke regels alleen de linkerkolom tonen." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Gelijke regels niet tonen." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Aannemen dat bestanden groot zijn met\n" +" veel verspreide kleine wijzigingen." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "" +"Gebruik: %s [OPTIE]... BESTAND1 BESTAND2\n" +"\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Twee bestanden naast elkaar weergeven." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "kan standaardinvoer niet interactief samenvoegen" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "de te vergelijken bestanden zijn allebei mappen" + +#: src/sdiff.c:868 +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed: Bewerken en daarna beide versies gebruiken, beide met een kop.\n" +"eb: Bewerken en daarna beide versies gebruiken.\n" +"el / e1: Bewerken en daarna de linker versie gebruiken.\n" +"er / e2: Bewerken en daarna de rechter versie gebruiken.\n" +"e: Een nieuwe versie bewerken.\n" +"l / 1: De linker versie gebruiken.\n" +"r / 2: De rechter versie gebruiken.\n" +"s: Overeenkomende regels stilzwijgend invoegen.\n" +"v: Overeenkomende regels invoegen en tonen.\n" +"q: Afsluiten.\n" diff --git a/po/pl.gmo b/po/pl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..58bb653a3434db89ece51b82223985d2358f411a GIT binary patch literal 26546 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 literal 0 HcmV?d00001 diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..0f48d96 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,1239 @@ +# Polish translations for the GNU diffutils messages +# Copyright (C) 1996, 2002, 2004, 2009, 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils package. +# Rafał Maszkowski <rzm@icm.edu.pl>, 1996, 2002, 2004, 2009, 2010. +# Contributions: +# Paweł Krawczyk <kravietz@pipeta.chemia.pk.edu.pl>, 1996. +# 23 corrections - Jakub Bogusz <qboosh@pld-linux.org>, 2004. +# my „smart" mutt needs this line +# +msgid "" +msgstr "" +"Project-Id-Version: GNU diffutils 2.9\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2010-02-13 17:30+0100\n" +"Last-Translator: Rafał Maszkowski <rzm@icm.edu.pl>\n" +"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "błąd programu" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "przepełnienie stosu" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Nieznany błąd systemu" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "zwykły pusty plik" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "zwykły plik" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "katalog" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "specjalny plik blokowy" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "specjalny plik znakowy" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "dowiązanie symboliczne" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "gniazdo" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "kolejka komunikatów" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semafor" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "obiekt w pamięci dzielonej" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "obiekt w pamięci z określeniem typu" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "dziwny plik" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: opcja '%s' nie jest jednoznaczna\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: opcja '--%s' nie może mieć argumentu\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: opcja '%c%s' nie może mieć argumentu\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: opcja '%s' wymaga argumentu\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: nierozpoznana opcja '--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: nierozpoznana opcja '%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: błędna opcja -- '%c'\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: opcja wymaga argumentu -- '%c'\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: opcja '-W %s' jest niejednoznaczna\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: opcja '-W %s' nie może mieć argumentu\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: opcja '%s' wymaga argumentu\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "„" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "”" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Powodzenie" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Nie pasuje" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Błędne wyrażenie regularne" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Znak błędny dla bieżącego uporządkowania" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Błędne nazwa klasy znaków" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Końcowy ukośnik odwrotny" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Błędny odnośnik wstecz" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Nie sparowany [ lub [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Nie sparowany ( lub \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Nie sparowany \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Błędna zawartość \\{\\}" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Błędny koniec zakresu" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Brak pamięci" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Błędne poprzedzające wyrażenie regularne" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Przedwczesny koniec wyrażenia regularnego" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Wyrażenia regularne jest za duże" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Nie sparowany ) lub \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Brak poprzedniego wyrażenia regularnego" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "brak pamięci" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "standardowe wejście" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "standardowe wyjście" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "standardowe wyjście błędu" + +#: lib/xfreopen.c:38 +msgid "unknown stream" +msgstr "nieznany strumień" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "nie udało się ponownie otworzyć %s z uprawnieniami %s" + +#: lib/xstrtol-error.c:63 +#, c-format +msgid "invalid %s%s argument `%s'" +msgstr "błędny argument %s%s: `%s'" + +#: lib/xstrtol-error.c:68 +#, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "błędny przyrostek argumentu %s%s: `%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "argument %s%s `%s' jest za duży" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "Pakowane przez %s (%s)\n" + +#: lib/version-etc.c:77 +#, c-format +msgid "Packaged by %s\n" +msgstr "Pakowane przez %s\n" + +#. 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:84 +msgid "(C)" +msgstr "(C)" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" +"\n" +"Licencja GPLv3+: GNU GPL wersja 3 albo późniejsza http://gnu.org/licenses/" +"gpl.html\n" +"To jest wolne oprogramowanie: masz prawo je zmieniać i rozpowszechniać.\n" +"Autorzy nie dają Å»ADNYCH GWARANCJI w granicach dozwolonych prawem.\n" +"\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Autor: %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Autorzy: %s i %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Autorzy: %s, %s i %s.\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 "" +"Autorzy: %s, %s, %s\n" +"i %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Autorzy: %s, %s, %s,\n" +"%s i %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Autorzy: %s, %s, %s,\n" +"%s, %s i %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Autorzy: %s, %s, %s,\n" +"%s, %s, %s i %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Autorzy: %s, %s, %s,\n" +"%s, %s, %s, %s\n" +"i %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Autorzy: %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s i %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Autorzy: %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s i inni.\n" + +#. 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 "" +"\n" +"O błędach programu poinformuj %s\n" +"O błędach tłumaczenia poinformuj translation-team-pl@lists.sourceforge.net\n" + +#: lib/version-etc.c:247 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "Raporty o błędach %s wysyłaj do %s\n" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "strona domowa %s: %s\n" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "strona domowa %s: http://www.gnu.org/software/%s/\n" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "Pomoc w używaniu oprogramowania GNU: http://www.gnu.org/gethelp/\n" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Pliki %s i %s różnią się\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Pliki %s i %s różnią się\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Brak znaku nowej linii na końcu pliku" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjörn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "David MacKenzie" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Napisz `%s --help' żeby dowiedzieć się więcej." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "błędna wartość --ignore-initial `%s'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "sprzeczne opcje -l i -s" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "zapis nieudany" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "standardowe wyjście" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-chars Wypisanie różniących się bajtów." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i OMIŃ --ignore-initial=OMIŃ Przeskoczenie pierwszych OMIŃ bajtów." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SKOK1:SKOK2 --ignore-initial=SKOK1:SKOK2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr " Przeskoczenie pierwszych SKOK1 bajtów PLIKU1 i SKOK2 bajtów PLIKU2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-I --verbose Wypisanie położeń i kodów wszystkich różniących się bajtów." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LIMIT --bytes=LIMIT Porównanie najwyżej LIMIT bajtów." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "" +"-s --quiet --silnet Bez wypisania wyników; tylko przekazanie statusu." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Wypisanie informacji o wersji." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Wypisanie tego opisu." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Składnia: %s [OPCJA]... PLIK1 [PLIK2 [SKOK1 [SKOK2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Porównanie plików bajt po bajcie." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "SKOK1 i SKOK2 to liczby bajtów do pominięcia w każdym z plików." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Po wartości SKOKU mogą być dodane następujące przyrostki:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, i tak dalej dla T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Jeżeli PLIK to `-' lub go brak, czytane jest standardowe wejście." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"Status wyjściowy ma wartość 0 gdy pliki wejściowe są takie same, 1 - jeżeli\n" +"różne, 2 - jeżeli są problemy." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "błędna wartość --bytes `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "brakujący argument po `%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "nadmiarowy argument `%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s różnią się: bajt %s, linia %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s różnią się: bajt %s, linia %s zawiera %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF przy %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "Paul Eggert" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "Mike Haertel" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "David Hayes" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "Richard Stallman" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "Len Tower" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "błędna długość kontekstu `%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "stronicowanie nie jest możliwe na tej maszynie" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "za dużo opcji etykietowania plików" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "błędna szerokość `%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "sprzeczne opcje szerokości" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "błędna długość horyzontu `%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "błędny rozmiar tabulacji `%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "sprzeczne opcje rozmiarów TAB-a" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "równocześnie podane --from-file i --to-file" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Porównanie plików kolejnymi liniami." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" +"-i --ignore-case Ignorowanie różnic między wielkimi i małymi literami." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-space-change Zignorowanie wielkości liter przy porównywaniu\n" +" nazw plików." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Uwzględnianie wielkości liter przy porównywaniu\n" +" nazw plików." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Zignorowanie zmian spowodowanych rozwinięciem\n" +" TAB-ów." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Zignorowanie zmian ilości znaków odstępu." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Zignorowanie znaków odstępu." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines Zignorowanie zmian liczby pustych linii." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RE --ignore-matching-lines=RE Zignorowanie zmian w liniach pasujących\n" +" do RE." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Pominięcie znaków nowej linii na wejściu." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Czytanie i zapisywanie danych binarnie." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Traktowanie plików jako tekstowych." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C ILE --context[=ILE] Skopiowanie ILE (domyślnie 2) linii kontekstu.\n" +"-u -U ILE --unified[=ILE] ILE (domyślnie 2) linii zunifikowanego " +"kontekstu.\n" +" --label ETYKIETA Użycie ETYKIETY zamiast nazwy pliku.\n" +" -p --show-c-function Wskazanie funkcji C, w których są zmiany.\n" +" -F RE --show-function-line=RE Pokazanie ostatniej linii pasującej do RE." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Wypisanie wyniku tylko gdy pliki się różnią." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Wynik w postaci poleceń ed-a" + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Wynik w postaci zwykłego diff-a." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Wynik w postaci diff-a z RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Wynik w dwóch kolumnach.\n" +" -W ILE --width=ILE Wypisanie najwyżej ILE (domyślnie 130) znaków w " +"linii.\n" +" --left-column Wypisanie tylko lewej kolumny dla wspólnych linii.\n" +" --suppress-common-lines Bez wypisywania wspólnych linii." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NAZWA --ifdef=NAZWA Wypisanie połączonego pliku dla pokazania różnic\n" +" w `#ifdef NAZWA'." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--TYPG-group-format=GFMT Podobnie, ale z użyciem GFMT do sformatowania " +"grup\n" +" wejściowych typu TYPG" + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LFMT Podobnie, ale z użyciem LFMT do sformatowania linii\n" +" wejściowych." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--TYPL-group-format=LFMT Podobnie, ale z użyciem LFMT do sformatowania " +"grup\n" +" wejściowych typu TYPL" + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "TYPL to `old', `new' albo `unchanged'. TYPG to TYPL albo `changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT może zawierać:\n" +" %< linie z PLIKU1\n" +" %> linie z PLIKU2\n" +" %= linie wspólne dla PLIKU1 i PLIKU2\n" +" %[-][SZER][.[DOKŁ]]{doxX}LITERA specyfikacja w stylu printf dla LITERY\n" +" LITERY są następujące dla nowej grupy (małe dla starej grupy):\n" +" F numer pierwszej linii\n" +" L numer ostatniej linii\n" +" N ilość linii = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT może zawierać:\n" +" %L zawartość linii\n" +" %l zawartość linii z wyłączeniem znaku nowej linii\n" +" %[-][SZER][.[DOKŁ]]{doxX}n specyfikację numeru linii w stylu printf" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" GFMT i LFMT mogą zawierać:\n" +" %% %\n" +" %c'C' pojedynczy znak C\n" +" %c'\\OOO' znak o kodzie ósemkowym OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-I --paginate Przepuszczenie wyniku przez `pr' żeby go stronnicować." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Rozwinięcie TAB-ów w spacje w wyniku." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "-T --initial-tab Wyrównanie linii przez użycie TAB-ów." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=ILE TAB-y co ILE (domyślnie 8) kolumn." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" +"--suppress-blank-empty Bez wypisywania spacji i znaków TAB przed\n" +" pustymi liniami." + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Porównanie podkatalogów rekurencyjnie." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Traktowanie brakujących plików jak pustych." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Traktowanie brakujących pierwszych plików\n" +" w pierwszym zestawie jako pustych." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "" +"-s --report-identical-files Informowanie gdy dwa pliki są takie same." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x WZÓR --exclude=WZÓR Wykluczenie plików pasujących do WZORU." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X PLIK --exclude-from=PLIK Pominięcie plików pasujących do wzorców w " +"PLIKU." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S PLIK --starting-file=PLIK Zacznij od PLIKU przy porównywaniu katalogów." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=PLIK1 Porównanie PLIKU1 z wszystkimi argumentami.\n" +" PLIK1 może być katalogiem." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=PLIK2 Porównanie wszystkich argumentów z PLIKIEM2.\n" +" PLIK2 może być katalogiem." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=ILE Zostawienie ILE linii wspólnego przedrostka i " +"przyrostka." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Usiłowanie znalezienia mniejszego zbioru zmian." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "--speed-large-files Założenie: duże pliki i rozrzucone małe zmiany." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"PLIKI to `PLIK1 PLIK2' albo `KATALOG1 KATALOG2' albo `KATALOG PLIK...' albo\n" +"PLIK... KATALOG'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Jeżeli użyta jest opcja --from-file albo --to-file, nie ma ograniczeń co do\n" +"PLIKÓW." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Jeżeli PLIK to `-', czytane jest standardowe wejście." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Składnia: %s [OPCJA]... PLIKI\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "sprzeczna wartość opcji %s: `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "sprzeczne opcje stylu wyniku" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Tylko w %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "nie można porównać `-' z katalogiem" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "opcja -D nie działa dla katalogów" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Wspólne podkatalogi: %s i %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Plik %s jest %s, podczas gdy plik %s jest %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Pliki %s i %s są identyczne\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "Randy Smith" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "niezgodne opcje" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "`-' podany dla więcej niż jednego pliku wejściowego" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "nieudany odczyt" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Wypisanie niezłączonych zmian między STARY_PLIK a NOWY_PLIK do\n" +" MÓJ_PLIK." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Wypisanie niezłączonych zmian, konflikty w nawiasach." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Wypisanie wszystkich zmian, konflikty w nawiasach." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Wypisanie nachodzących zmian." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Wypisanie nachodzących zmian w nawiasach." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Wypisanie niezłączonych nienachodzących zmian." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m -merge Wypisanie połączonych plików zamiast komend ed-a (domyślnie -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L ETYKIETA --label=ETYKIETA Użycie ETYKIETY zamiast nazwy pliku." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Dodanie komendy `w' i `q' do komend ed-a." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAM Użycie PROGRAMU do porównania plików." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Składnia: %s [OPCJA]... MÓJ_PLIK STARY_PLIK TWÓJ_PLIK\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Porównanie trzech plików linia po linii." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"Status wyjściowy ma wartość 0 gdy polecenie wykonało się z prawidłowym\n" +"wynikiem, 1 - jeżeli są konflikty, 2 - jeżeli są problemy." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "bład wewnętrzny: spieprzony format bloków diff" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff nie zadziałał: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "błąd wewnętrzny: błędny typ diff w process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "błędny format diff; błędny separator zmian" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "błędny format diff; niekompletna ostatnia linia" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "nie mógł być wywołany program pomocniczy `%s'" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "błędny format diff; nieprawidłowe znaki na początku linii" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "błąd wenwętrzny: błędny typ diff-a przekazany na wyjście" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "plik wejściowy się zmniejszył" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "nie można porównać nazw plików `%s' i `%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "%s: rekurencyjne zapętlenie katalogów" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "Thomas Lord" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "-o PLIK --output=PLIK Tryb interakcyjny, wyniki wysyłane do PLIKU." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Traktowanie małych i wielkich liter tak samo." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Ignorowanie wszystkich znaków odstępu." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "-w ILE --width=ILE Wypisanie najwyżej ILE (domyślnie 130) kolumn." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-I --left-column Wypisanie tylko lewej kolumny dla wspólnych linii." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Bez wypisania wspólnych linii." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "-H --speed-large-files Duże pliki i rozrzucone małe zmiany." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Składnia: %s [OPCJA]... PLIK1 PLIK2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Interaktywne połączenie plików." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "nie mogę interakcyjnie łączyć standardowego wejścia" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "oba mające być porównane pliki to katalogi" + +#: src/sdiff.c:868 +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tEdycja i użycie obu wersji, każdej z nagłówkiem.\n" +"eb:\tEdycja i użycie obu wersji.\n" +"el albo e1:\tiUżycie wersji po lewej.\n" +"er albo e2:\tEdycja i użycie wersji po prawej.\n" +"e:\tUsunięcie obu wersji i edycja nowej.\n" +"l albo 1:\tUżycie wersji po lewej.\n" +"r albo 2:\tUżycie wersji po prawej.\n" +"s:\tDołączenie wspólnych linii bez informowania o tym.\n" +"v:\tDołączenie wspólnych linii z podaniem informacji.\n" +"q:\tZakończenie.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: nielegalna opcja -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Ten program jest darmowy; warunki kopiowania są opisane w źródłach.\n" +#~ "Autorzy nie dają Å»ADNYCH gwarancji, w tym również gwarancji PRZYDATNOŚCI\n" +#~ "DO SPRZEDAÅ»Y LUB DO KONKRETNYCH CELÓW.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Informacje o błędach: bug-gnu-utils@gnu.org ." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "opcja `-%ld' jest przestarzała, użyj `-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "opcja `-%ld' jest przestarzała, opuść ją" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "nie znaleziono programu pomocniczego `%s'" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "nie zadziałał program pomocniczy `%s'" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "" +#~ "program pomocniczy `%s' zakończył się z błędem (status wyjściowy %d)" diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo new file mode 100644 index 0000000000000000000000000000000000000000..ae55728f586251cc2ab7f5f46937c5f07fe8ce41 GIT binary patch literal 23168 zcmchf4RBo7b>E*IIf`IgmgUdHwtQt-CK+KN5R^;`5@doTNWlUK1^_L|BrQJdJ^)YL z-M8AeOORCMI8Njyjaxf$9Jg-#m5G};X`5s^&A4`2PpVGiOx@OrJ=08^am%_BRf?65 zQIn<~P2J!B-22|{0t=8zoW9}3|9#xgbI(2J+;h+J8#i9_(TMBkNpB>Lz9fqND|pWc zf4DyX@+f*Q_%FcLi=ybj^-=UsdH&ohqUb32;0;kU3w{cGGx#((4qo@lDB@o<$)E25 z=fFAe1o%$y6JQ1WpWvO~Yj2FA-QXOkd|mMS!G8@N0sjDe2YB<VqUaD9gL?l9ptTFC zAJ@G)il)FNa2ot6Q0;v!yuax+jDhFV;9cNH!NcHx1T~&lz1H{R-QYo<e-u=E{|1}~ zuYFw<-4C7wRnKR@QSd*5YUkS5`+66_+j;&VD0=)RsB+JOZw2pSaL2&+fP27y1ilOU zeigin=Us1zqMN`NRKE9t8qb%(d%zJUYYaRFs{iLf_2Ubm==2nL54h`1Q8WYAK#k*< z!CS#+!8^fM(TK)93#z^kgZF}83iy9PwL1lo4}d=m?gKv$-U5CL)HrW&em)L@dVT`D z1N`UUAA-+-R2BX1&CDVAr~F|k(T#8M&to7}MJGVbV+(v6_ythqE`yNR8rApL)A(L+ z1ysJD0hyxciy%Xfeh*are*&u9OCh@GehYtKx#&Ld2f%lOux!)?zYqKX$P`2$0@d#4 zKv+HcGDua??}IA$JoxM2>mcS7_&eY(@LD=^EqFT!%SQV_(fgesEEu&wwf{uGj|Kc3 z_%hyq5oD;*mqF3*k3fybQMu-43j9H^4yyi-f#RQE21VDegZzvBBD}weMJ2l22WlJ- zgAU9Bei#&;ejU`f|2=pe_!Ox6{|vkayoN^9|LZ{Y|0ZxRI1WyLE1>xNqoC;XZ$Z)P zGN}4rLZ`WnZU$BEeo*WGaZulX1yudN4XWKg05vav0wQ{%=r&*P^`Pjp2NYfBKz(n6 zF9qKRs{98*(eqQ_b>Ke+RsU~*-wXab@Otp~K+)wgsCxbkRDZq$j(~4qQK_D{fuDX6 zybqq^`RjE4d7ck4DgTG(DF&Z_`x)Gaz)yg5J*q&QN$^4NmEcD}ibbCVXTV<skAu&G z{EO~kaUBISkS;{O0saX1-$BiP4W@V}_!02O!Eb=~fom-09|M04yc@jp?NM|Qd=%`0 ze*``P#`}GJUjdsuA7@dk{eKBw0AF^Oe|`e|HJ-l?YTlk;5N+^R!42>&H1ZhuaqySG z*CK2VfnNgEpBJ+zTHyWQd%@oX-vQozudnAZ@K<^MV{jh)Bp);ITOdtFrw<~-UmQh0 z3##2`sGO>!Gl!$-x4@5sIe7Yrr^8o4(d8kCs&W1T$dp8{fS4+O5LCbZ8TdZ%c~Ikh z{Fs+(e*vog+sX7Uunx|GPl65b<vggLj|Kc4P~&+WjVj**pvr#+)cbFMKLp-%zwcKI z?C|_W@HQA=e9p`3(^Psh?|%Y(EBGs**6&xrTfx5se;B-pNveRK1eO0Qpw`zPgH##a zxZvgVdqDBgr$N>CHSjj@FTvg5TTl4)KM(4C6MQrH@$mi&;0-+g7w|^#Tj1^BcfdD- zw=*ccp98fH9}f6_@OOFsEGT+xEc$-@7I-bs{|kI2_&hicUccn)dj}|aaXR2ez@G+R z!~1^%vgD#C!GqwRf*SYUWv{<Zg8O*>Nl<k85;y@~1~uMSpY-{rK;_Fp(d8FG2Yv<A zIGzRH2HwEri!S@Yo4_h~9r%9mRp1A~Yrs!~uLeI0z6tySsQP~&WGO{2d%(-N8So7} zZ-8p|BcSU4JSe&FKR{SJdh>&x?^i(e<L5y2>q+o6;2(lFfX@ef`9r?mn?Ui&WWcka z@_iuS$3T_;CGZvCzXHDx{12e!{Xc=4pZ^W2+;_m2fj7L{&)1tk&HwG7zCR4Ao)-8b zP}c=go%B6=;QC3D>ii7p<D`ouUEfPmUvz1V8A*Mql75z?^>dV@D<O%#_me(FDz59f z`Tp<#DeQVlz#2G4+D~ed#0Nh^S|Ux7it9bxJWe_hUa(Z7e@L1py)?W-tQmdY4zg6E zQ=}g!Jx0<6yF`${c<es#Z;^C;kR(3WoUD-?Nf%_bOT5%3{RrvB_6FGjo+XLDZY2F6 zN!KpYF;cDvuAe8JA&rwhK+-&{le#2b;v?9vylyV<{LK@9=2q9oJVbvF?2!IWc>V$K z66xnicZPQh;E$2ck;KD4L6S^*g!F0BDCs=u?~@iuhe^5)lC(B-y__^d+8}*`6q8<0 zLR^?!1ERmHKjG5aJ5IWbG!@<<3hinI{M!KqpCp|o9U$FCdIRahq~f}Un@7V#TD%00 zkUm0sxbK~A-_rN|-f+JP{uF61X&>qRBwe!}%+7iT_dgw;KMLMJ`ccwIcqe!tX%Fd* zq}P#jeTeiANVn^O>s}A`_YVFplWrlckQ$`OxtX-Hp0wSuqw~uyYr8pNBfjXWS+f(T z&B+nRb?dDpe^=dgc$agOae3NYt0%6y9=GFahdK@yIZiJuEQCzGuNySvvT7%;Q+F+K z<e_<McWZn1I9E@bN$ytLS;HNjotxR~E5CQkhY9~-s`yaN8jY;!I+-u#;%3e6LcUX# zGp8PyJ+ge?nNwq@PAtwGK6B==T6W>V$LD62muD88Yqis6XSI@dE;6{hl~moT=we^3 zDHk4c7q=4^)5ok{&o+c@*Gx9tT085uMjh`UN;S?C`;ygb{);E6$a>Vd)wG>=Y^<)? zZLB2i&;*Szpm>{a$6d(nveiJSDK}R+dYh+`>YkzcO7C%=3UAvR@pt$H)0$>HX?F6W zPEXhR)(@jDxlpZlYs^2?z34jaIAylhG<eOLFSsqCo7>SiZMM1tv`}}KA38DP(%hYe ze!E89S=s=g^x19`=4!4bwOwQIQIXFV(D(8y)hwM$TgJ4W-b?q-p4jVFE_UEBC}{j; zj3U17WtkYvGBFn2nmhj0($&?ZJ!xNgW~v!AHzQa0u5sMDFH;pBRAADobF0uWsZF|Q z_u)NJrDEf$7$;TWt47?JvZdmd(nea3+oNs;TKO-<;EjA%BzLyjRAP+Ej3yOzvZ%|r zU}#-|;N?_=s#HK#t)$JkebKqaB(537Hri<?akaP;yR_-T=LQR0xkac-tDUX2<Hpp9 z#f4*w(=g&mRz&f@GG)QGw31dKK(10+^A$Z=1C>fA^G_=o5=1L9T}_i(f5s_4gYIys z%0E(fT(7&Vm9!B8Ib7o3S7SO#<q*D|R6AMwqFP-~>MiFMx*aiLXPv3i8~c*A(@R;? z2$)YDKgkg8Pm-3?orr2YB+dz<r`1kY(+k%5yt~S+DoNLxSsVH@tV%O(Boz}3Zq{CV zDY3DhGy^rXnv4R<YDBrZ+0%G?%V^WwHM8w{aX4${X|0e}JNAQ7G!Wqhp<)+aXsR_% z<|nCD;LtTc*xb44JnuFVq#5u0EE{bak{x+9?w~u8n#-vc)nH57Mx1xrX{%BQmrAwG zGS;h}ys5_Rb{bP@JLz=WO^4XG!K)vgcqLCSC4Rb=;}w^8vX&Rw$@v5p*6i)BC983_ z-f;)^c)1Vx>)l4v+7E1JyfxuU-s)$mLd#49-kM+{hw)aonR;GJvu0ecAj3RIyXAHg zcN|?s@CLzS%Rp)+X|y`x%ze&PDoLDQtYpnPOE0i!x7kP_XpISIW{jvFw_0MG9tEdW zFkjC$D(Z7lu8+zH5mfiNq+{i>=4w5yb~N@wDj7I-r5-oWdER#=yZTvj8|xWs*{=ap zhO}e(spE({K0S{XqM}vEJmsH4=R?<x#aX86q&s_yWwc_uOem@=M_9id$i^@`F7LKl zS-ZoaO}-WDH%;=W;+yiTjLEMg7g{k~P07u@u5}Yl9GOsLArmcG1xBtw&XQy$sRM1d zrQ3Z*@$c3On01T&gF**X*O{pxhxDzG9>b=Csjw1M!r<oI-1MOtw0woNxsueU!lPud zzfGHYM?xKaSV|rW9#@fV85W7%&#Fr%VT}l#xGlCaKDQ;L)yq3Sa}vaG&w#w^n@!qX zRxN2W?W8OiO_iIE&oOVT6|Zi)E%Yy|HfbeIZ;I$6B_FVoo)KVnBvM>WN?M8iH`b-I z>^=D(Ea!R1G8&j_WPHO4Soi6lw}TLLXsj^E88eLvIoDZddHZRQv}>8Llaw+-QCF<a zc9IJnSI7eTSBe0AAQOWxm!tK%;u*0VRNzb1D?Jo9vM%z3nH(Ic)noQ;#oIpagpA!_ z&qxT^Yg(+*;$ah!v}}gqh0ZC-(laHo2IS|yJv~iW&045uBq`=3-5;rRsqAD?8KO|y z`)Vr-*?YB#6vn{?LtlY|F-9xs^&kkVl~v3}lP7LTLI(m>*WF=PzD{DE19`Cl(&m_I zI2x9siH9PuEyO9UL#s-ZZ)8~P7!?xd5{rKBMOj;gHFcx`SDOl5Mhmfds!15FrfgGU zuLRM<d1BKS=9LM7fnhhw2LXzj;VG}855*yyKW~;;ejl|kcf>fC_8wX|xoG#yf9B>N z(mnO0Y9<JNZ=jT>0iri)S4?x;&c+)s6vmX&&~q%6p*0jjDn`_J%Q<OQksC0p2^wP* z_8q?PG|fPYvm3jtsk4vnl1YTEP|HQ9a?n1z4Eeq;2YE5&Uk@?*dj@@BD5TCd1C#oT zmM=%&U)5g!HL9RR;l5<G!<vwtP)>(wW>G;OgAt+i7c4^4kc`jDx8gO7XatZu5$6nw zQdwbjvU6NpcV}DeT^ekeGu0ehVHEv}bZ)^1TCia+h$Mz^=i_?UTcnb7p5FZ{yP+YN z`Yr3|SH^u>pd@wAOsY)pp(6~tQfXJQ?0U?&czCJUjRZ@u>E>qVXHAToRGA8og^e!3 zsMX?M7lOy{+SP!kNsy`wvf&vi+{z6L_<T~oILb2dqQ9V@FHIL8RShfcG+8Y>X;XyC zf!^&PVLf%oj%mq=l4`e|Q?qtA;TC&~DYWg0S*zWZJ}t$7yUiNKp+u$fXg6iia+71? zv-}I<V7EwX-|a4@2`+%-LW&*Ji921k4cK!<ar79LO$95w*-5MDJg)@kir#x&+1Zew zFrCYOsc+F)2V@+zlRSqv<pC*7wj-IDPJu+57}7dyMo`TxX8Z=Sh!9EAv#_A48(XWs z0=j!%gM<&gZMEQ8w|GvQs~LGVlqblMtI@$5PU?g*8)>bx?v3_PbHOJA`eyIG@vRp7 z1yvAq_@J#kM6uJ!3+}|U@n=xuQ}(#60_Q7*Fu*m%wFDJvSWdK*FB4SkAfz@P`0Ec# z)%?{(j+Oo^FvcOj&G*c9tCuW*UoayPYgj(Ed|)|D%C8~bkt2j0y-mGWg;;BngJb2l z&U!m33?);RTXU2QZ*q?B!m&u&YRTMhXLY;Rtf`4z<`z0KySUf!r}t=I$HvC|chhuZ zW6H9Nn&f7n->CXnh&{jyjl1vdh-EX^j~|~kT`twFp9?z8t}=N&cLrXmo;QOQ*AO<% zQ7vRS5=qSr<3amgGf^ZUtnW)>5jDkjZ@#dK4W*Ih^1+T$2D=@Z(yYmv2%2qkiS4pA z(HLpXt*{ZKBK%s?&e3dmjRg|CyH&iAxsyMl_YucuY{pcXt?!$86Qu-CKX&@@@;xG| znwY)bPS(2k1hfZ}*kY$vX2M^?t{&mud$Tq3eA2*mL-F;v%hsh99nZYErJLZ2bVv`G z6Jb-MFEn;O&5*uB+F#HHn{_O&oVfTzJHdGGGBcr)A!Qb~^bEO)Rg|tpW`+cXEFU+P zlJ^y(TH$30aQ`d?-M|l#w%CC~QFM^^93}bW$hkvq@A&xmsJkDWxMS4K^I}wQ?CrcB z?l>@d=l-{kjvVX%WS@`e^ZtFK`|sF0dO)Sc!FeXulD~R+)SVc0Go$X^qwb+G>+xR8 z;_V?ZrMl^T(;}lOYSRpIsX{9=n6+Ri-7glsjS&dnZ}^d~Tg3p(qvgVJEauDMuXSEs zbZ1$I-XFKi`p7g(^Lu9}Y%&&|Y@Tao8wj9_Onk#7?RM7YrERpJ?QRKz)4TiL?6Eg{ z`re$<n^W)Udvp4+=wyyJ$>i9ng%iuO3&+nOHf-4i5i_!5mQ#`~6Yi8*lpZF|oH?^o zp{4CUdXwB0CVOG8k3?r#{G}7LM;~^Ya)60Ya$ssgqLq5aqPEPq?EEYFP<3b89frgp zkf3Js0g?NRn+Q*qTrT0eQ?u9ueNNNOIaI632b}e{=D~dDrpPy7yE)GugF-7R#mHc% ztBuyAn^`z2rq!}!$6&51EgN_xIEZYaS<?d<g5l%Ob9~l(AcIUDJcXf}!Ea`clwS(+ zT#VS*wqxF#XW6&8nyzM1+BAA~(iLb?G}fCD99@XEb7aGe#S`c`cak~tLRfmkbuP9v ziwLSrtK?z5yowSn#52>#9QhG%DZ*wk*}!W;)#2QL#c3@XpX3zqy})v|laW4x_C5up zE^LqdcEb~($P+gHY=xR@Fq?RxtlFCMt=~;YM67y(U0<GbZJ)D^;$Tyas?)Tay&!h! zb$e6Yek^2>D#;U=JjT^u*1ztZ`a^qJaKu2@JuBF&#%9ffk6x0)J=#sWNfh*Q$sX~l zPDia|U<t=&PI8!?gO*)C*F<5{x7Fnd^ZR27c1=+@R0*Qb3;=(E6qPDU?qk2`i&rKA za#UK2(I-(3`QVr^nr!6}2pr{zj0EV&9+2I<%5Gne-na<7m0xVEWaui*!?{TM&b;|1 z0=##oVE&CH#U`<q{ZUcq=81Nu_A0Zr%Dent!XJcnJ83<46JrO)_Ko<xPh~z|OKX)w z-L<^3oN?;bU9*EF%Xx6E*&WN;Ya=HXmMe$lO^0xmBkUC?-Ng9b@yhs}mGOOU@BYd0 zy|;}|jE|GCvWNvBd!x)ZK2aHedu8GdH-6XT`2J%Yfmim8%yIf!K}9vuOmNPmyN{hr za*<tobv>zOPG{J4RCS6ZxM$tIwX%ch+8A6tw$i?r3Yu$O*rKwW#EnUJs2yM8oD?yA zf*oCVjct13?y1*WY*Y`f#FyeWC7aMBJs+2K%+Jox^a!+fY<%RfKc=lLBPJ%DTx_?u z>T%k<TVAU+j-#pBrG?6Y19#rV@o$+~!@#zy%&_LPfF|96m9#VRVC7iS)Ye+#yZ?|p z!)|=+uCY5uI5hP!0bPG&+|rr7E$#L;F#&9S3R`h=BtYLMh~uiy)zUTOlm!Fy#Q|(> z!^Z)va~e|1-1OoPot%Bw!ayXz;HQCD0DVep&)9ZarzvH5mlU^sF#&Vai^onbP7jF+ zSmYcf2^zN=KlM%dWtegz0v4y)U-?VSm|kL$NJSzJ8af#3SZ-c1X#3=23wG}rb7jGW zJdh)IXp;v1?pnre*@DZznT?jY8AT&bznxdHoI|d)cDF?d&VaIfFk{*rmNAAPYZ-QB z(RHE_n%_np!_hHHCv6x<v#{6WG7kp_y*%H>P-T3BIXEXMa@dKGsQ-du61Gl0jT*y! z8w%33UVFFV3fuA}L?z%yg|m9Bh+`E!3-3apfjShQu+607;2NB8sw@T<>QIMD>fo|z z$GmufOb`{}4L0;#I$|)$p*s-dKyyCIq0HWGuq<-vV8l5~grgh_gUBf86(6w?w6guR z6xTVFapE{X@!Ty<&n+($(GiS%VA*Y7752`ST8aRQUM)U`!Zz11w#*N0IElj;jHX!E zX57Llt}d&4dWXP@`g+zSu;O#k4q+AUs0CTXgy`6Ef|kXsdZJ5iT`8V|0E19VC#%8# z{4=JtsVS=SQ>5xP$5hP00W>Q+4ZSOJ)?&@C7JUW@39h)@PUT)38d!mt;$jO!(IUQL z+Dj5zlSHvP<2Ig3WW`t%qr<h+>NzM9o{DIT-U^@(G+E}FDj1^Rg~LVd<p+%p5>UJT zc`KO~%LP-E?8mb30DBXm(RnTm+DB;gmnrUNE~G0d#KTN+@gv<@EE)w1FC3R5pUP_< z83=)o_stGo0RlBRU(m)|H$iiVPNgSPR!o2J1{EHMiC5!G)K*J#4m_nEG}Af>Kq%z> z;@SsBmA%+>!?92yuA5M;nW05&dG{s^N8pwio}!kk;JkjG+ddZL=>Nab6tN`57<zb^ zxDK(g+4OkD{FXtUY(<}FN`}OlgyI%%0yh+NV@acYAttAB-L#{1S=TATQ-7Z1J91<z z!JcoDpQRAj*OBnX3`62lLd%Qn3vA^MQ9tl;)@CHKq6k~bc5Hd~;l(}DFhOQ$ykSq` zUE@7Mad(21O<pP{4|aiAFs2dS$!9KqG=tc=y;fXne>0mppyQoF0u<|<Q?cSISNhh) zEgPp$6%$vr(kI-uD}CE|8KQ7}q|#=kRZcd(K&W<wnWe88YV%TR%X@QxO)*+92p0BC zGU{-F!d9$GueF}yR$uaLMW;7;3gw~Srm&m7+KTE*?a-^JXSwy~@7;^KNCm7OJRcqI zypTbvW8kup5NB>1wG-k5=zOn1JT;|u%8@nHVpB*&5L*OQM*z>l{EUttLI96FS(gG? z;4`mG0&&n$Y-Q_R*<d^Jn?ik9lB>Q2cH%k_t-D*2I$I)i9U%hnZ?<d4N;H7pcu;3( z8u30IZvsy%T8NF7)`6%e=Z&e7tB4iaGR;-kO6wmRz0R_<sG)D}JVu%=*CW(4LJme3 z6|)<tIWQb!tiW<t=8YYgV!Mze8vm{dN&<R^ipp6x^B^JC$Bc)3K#sX+*?$JD?7#0g z%@#heWkUM67a`3A;~vUe8BEpKv9|xFF6p=d4xwi{fM9aw+~U`kPtGmaS(}AN70=$D z3Qw%{^T{P`MWvmEf&Zxj`=UQis+e2hpv>ALsl=Uq(rBrWqN)&srZ0>tm`FPgaJHFN zr8{B$vZB~_pxy$kWgI;9)&f1ZBhcW_^O06%=cmnl-7NF)UbeGZ_mXY3x;xXmbO{Wo zC-h+2e70(~>^9+A>O(R0rM8hGeoDfxp~yw#6x}C$YrAXc!V<e6WxUY-^Q3X5)ip%W zK3GzgDH@0YyP6rY17_?K#!>Qu1eCY<UJy6OcpT$8MVN2X;P4XLdl(Z6g}y+dz96&B zr0V0%lFI$PA_9P;FEd-@Y7)V>k47seOs534v3m+Ph;>rEis1qNg-P6zi~A>dYt&jf zh}nj=t)7<NXC2x_CDPLn#ioTMy3l{Z&WK>+Dm7U6po3R`94RSZ_I_ux37sI?^zS3e z>UJNW+GmT<Pt2ZP9Gtq-i-Oy(JC;LA5IgX1s6!<gi-@{X=!I?M6~!KNxJ_^!b<g9c z)}E8O6qhQ*PU`uv+nv<*Xs>qJ8>uC+L!@0#XAFt9y9$L-ta`t@(*{guy$Z=Q2YtV; z*pUZ^tBS!8zLJExSrTuvQ+Z0_R}MT*(qTK>cVi*3chT~EgwV_@SPm8^C%*_5CTvVV z5@Lpiw_bjqgdfO90{UhZC5Md&<@u4s)f5g3-WF%g*P$bcHaf)SZ$~m=M+Cp@Cev6( zn73fy;44(&g>0y3qUWI9$MCntB$jk|0lV)jb-?xZ-`}-1-3!?9o8(T+)!A=WF!=4R zSu?dwkDxvzi8y#AY%*~QnncA0o{%<Blp2wa^6ZJ31`qM3?EMu8w5_KwL<C^&Y7#M$ zdrc8HsTPNZRhpAAd><BAS&q6`&V+>`2xZG_KWn?=T$+!Dd&b}u22mad&_@fWEF&z- z=5(XDOc<YV-1u3lj~UkarxC)jkIb~S?Mupdw2IjF`?$=3iV7`*JI6fi)WIZqO=bSl zKG&_O-z)ULEIgp*`a?Pgn(tF{#S#w-(hP)P%l5O$724mOa$d{U%xw+?-P9~L?=}t` z;zS`?hz+$pkx|13hw_ZE99)$!aO3iY6w}xuL}xtNC|r7^#mW9WvT#)(i`K9Pe58TS z(QIEkYW6PHX4BMlF|9U@JtL_<WOUPTW{EPzkae-=L9EAq+ilQ~O$RqellIkCjt+%n z!KS{4sxJi7`7P>>^H8W2c!}1A2cKG-5|4>@jW$`BccTX7gzAk18Q~*QG0Rp{{kFks z+b$NhpabgMY(i}%N@Eelho&ENobD8t+SfVOb?}o@L;o7x8lGCx(#NUF%||4Q_j}>b z3wk$f6A%-&f*IFf&}vzWZVCaTC|C0{$}y<L&YEU!DZEWIs|sJ$7G+p;s|s_?VZQ1F zreMkepPku{Mj5v|*!K#2rAI?TU44D!a0;K!fbpmRg@MhFRdr(e$l{Zx7kYuP_C`~L zYVjM#ewMFxAK}q9EIV>)|F+z*3-vA0=#VJdP5p-xYF#=X+?Qq>5>Bf%A7X@y0$`ZJ zp2#>}mU9^55Ut-7r^}l{YPVJumik{u-SimQ8r&ud*G>?^BJHh%UfF1&Z;gc$Ad5sD zaxgYRWSs@5dm&ORB@TNzO~WqGky<H%`sdU0m|O;S*UQvtKhxLzrffwdFYIexg;Eqq zq#MC?GZqCIyQHIRceb<^3u}*9*6tt|o$Zg|9rCTPIDJg-<_v{MFJpWc3Lzyba8M}c zsYIAUr8a*WF?#zGvVv&V?=T}7B<!D&Kv&DsQ_4()j?&5_Ge*c`ak7Sx(I(h_$E+RR zsQD|`FC(6HwxCTC++R?QaLF=W!NUDgf=UP<vWPtDRc)D%8{miNI*2MQF{Gi~`a9LI zZINku!xsLTCf+3JjdrHERBSDJ_q02InV8`?S_qCXmI?6)=tcBM;qgfj5WTz^d5bTW zOZm;stKn|WsGqNSTR5@k;lT{ka=->3Ua@QEnXqEp<Mmah9-`OesWY2E=GK+#8mNFM zW6mETX}(502V-7hZu;aJ9gU9a6dhhF2iS`>kR2XE5K3ONDuxZ=>GLV|2WLFZ6k*6m z83F^eP-OW7wvIm<Mw6%QyekXmUt-(R+|0sWKqoM49^slC_lFNXfuC^d$x!u2p`2ls zp~*E1G|=yMu=FKCR$>lIzuPg&BSgc)9SoYj)QFgpIMIfBbF{LLR7m__`0;h07g*}1 zh}lSj$(?JS)NM^6b6G6@v1r~7ch-1cm&=7955b`4#ccON##s<EZsZJEscp{+XL_-p z>FA`z0<jH4I23Wr*8OZn$Ij-E=rc9Oq8ZKuwJ36qkeOv}a~uT(nK2<z2xex2w(wnu zY9989@a8Vz&BH#Oer(uV-)S8l7V*!&{p5m$KW`D(ge?1Lr=2pND#SZ+(0-achJffR zRj_nbjg)PKn|(e!x?i|@#xa^hVLT<pPKc+lVU5aH{3twaA$^OGY4RvGHjChyK^2F+ zhJ!{kV&;*p76e((u^zEi%JTeKeyCPtBEE+pYD%aZWzL})X>V%)fQ681dv6i7z3Rg; z(dKOrTpR`%^uUheEM!+?!Pb&E489=DZi26I*-0W5(bozHwg1V)WQv56KYg>#acefT z9AeD0XKvd|!`C{%)RNAlUbaq*17qFtm4{|fYG_{lKN4LQ+rZ}@Ig4-;ge2?I6N|u& zxM-~iwq<5gx=@a>#}CX6&Y*7Ejr79;Pu3>O!gzyh==oLNnhrEoJrJpVHDwg5EdgUv zA(;M~8q?^yGMJ=5EUF0Vz!t`jaHE34J?YDy6mi=&1zWxi`g}ZHym_z4FBwC0h*r(b zKcFN74U0}}BEa47S${;J74_a-)&@~9aa8tyOVNVsFc!??s0}KtUk2GJHd^OIJ5=FA zyHQMH*kFQj>`+i8(hBVxVTcMsqZB#(@P=~WV3vaM!rQ=Ggij9|2x2z%1)?e_yb-NR z?P#@>tQohS^FNY^F!{qOz>kE@=#3`LyGfRg=TgXNr}O->1GeFRnc{mm-G+yBc#bIc z3?#1d|KSdFSJaBSQcqHT#T1tUps<=O1Y+~s2u*XDDMRWJ5)NOm?u$WsamSKYGz_ug z>?g5*=w8+h@uT__*{-{gI_IBl60S;z)5gkkc#o*J6c6p^I{HKx3sFO3L2a`cMZprP VR(6nfIQ3gEMk?vT58z?2{|96fMgRZ+ literal 0 HcmV?d00001 diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..60da6f1 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,1280 @@ +# diffutils: Translation to Brazilian Portuguese (pt_BR). +# Copyright © 2002 Free Software Foundation, Inc. +# Halley Pacheco de Oliveira <halleypo@ig.com.br>, 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.3\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2002-06-24 09:07GMT -3\n" +"Last-Translator: Halley Pacheco de Oliveira <halleypo@ig.com.br>\n" +"Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.5\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "erro do programa" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "estouro da pilha" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Erro de sistema desconhecido" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "arquivo regular vazio" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "arquivo regular" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "diretório" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "arquivo do tipo especial de bloco" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "arquivo do tipo especial de caracter" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fila" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "vínculo simbólico" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "soquete" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "fila de mensagem" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semáforo" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "objeto em memória compartilhada" + +#: lib/file-type.c:68 +#, fuzzy +msgid "typed memory object" +msgstr "objeto em memória compartilhada" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "arquivo estranho" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: a opção `%s' é ambígua\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: a opção `--%s' não permite um argumento\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: a opção `%c%s' não permite um argumento\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: a opção `%s' requer um argumento\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: a opção `--%s' não é reconhecida\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: a opção `%c%s' não é reconhecida\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: a opção -- %c é inválida\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: a opção -- %c requer um argumento\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: a opção `-W %s' é ambígua\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: a opção `-W %s' não permite um argumento\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: a opção `%s' requer um argumento\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Sucesso" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Sem correspondente" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "A expressão regular não é válida" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "O caracter de classificação não é válido" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "O nome da classe de caracteres não é válido" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Contrabarra final" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "A referência retroativa não é válida" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "[ ou [^ sem correspondente" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "( or \\( sem correspondente" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "\\{ sem correspondente" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "O counteúdo de \\{\\} não é válido" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "O fim do intervalo não é válido" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Memória esgotada" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "A expressão regular precedente não é válida" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Fim prematuro da expressão regular" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "A expressão regular é muito grande" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr ") or \\) sem correspondente" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Sem expressão regular prévia" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "memória esgotada" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Erro de sistema desconhecido" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "valor inválido --bytes `%s'" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "comprimento do horizonte inválido `%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "©" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, fuzzy, c-format +msgid "Written by %s.\n" +msgstr "Escrito por Thomas Lord." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "Escrito por Randy Smith." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Escrito por Randy Smith." + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Os arquivos %s e %s são diferentes\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Os arquivos binários %s e %s são diferentes\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Falta o caracter nova linha no final do arquivo" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Utilize `%s --help' para obter mais informações." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "valor inválido --ignore-initial `%s'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "as opções -l e -s não são compatíveis" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "erro de escrita" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "saída padrão" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Imprimir os bytes diferentes." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i SALTO --ignore-initial=SALTO\n" +" Saltar os primeiros SALTO bytes da entrada." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SALTO1:SALTO2 --ignore-initial=SALTO1:SALTO2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Saltar os primeiros SALTO1 bytes do ARQUIVO1\n" +" e os primeiros SALTO2 bytes do ARQUIVO2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose Exibir os números dos bytes e os valores de " +"todos\n" +" os bytes diferentes." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LIMITE --bytes=LIMITE Comparar no máximo LIMITE bytes." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "" +"-s --quiet --silent Não exibir nada; retornar apenas o status de fim." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Exibir as informações da versão." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Exibir esta ajuda." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Utilização: %s [OPÇÃO]... ARQUIVO1 [ARQUIVO2 [SALTO1 [SALTO2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Comparar dois arquivos byte por byte." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "" +"SALTO1 e SALTO2 correspondem ao número de bytes saltados em cada arquivo." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Os valores do SALTO podem ser seguidos por um\n" +"dos sufixos multiplicadores mostrados abaixo:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824,\n" +"e assim por diante para T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Se ARQUIVO for igual a `-' ou for omitido, ler da entrada padrão." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "valor inválido --bytes `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "faltando operando após `%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "operando extra `%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s e %s são diferentes: byte %s, linha %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s e %s são diferentes: byte %s, linha %s é %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: Fim de arquivo (EOF) em %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "o comprimento do contexto não é válido `%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "este computador não suporta paginação" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "opções de rótulo de arquivo em número excessivo" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "largura inválida `%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "opções de largura conflitantes" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "comprimento do horizonte inválido `%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "tamanho de tabulação inválido `%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "opções de tamanho de tabulação conflitantes" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "ambos --from-file e --to-file especificados" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Comparar os arquivos linha por linha" + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" +"-i --ignore-case Não fazer distinção entre letras maiúsculas e\n" +" minúsculas no conteúdo do arquivo." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Não fazer distinção entre letras maiúsculas e\n" +" minúsculas nos nomes dos arquivos." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Fazer distinção entre letras maiúsculas e\n" +" minúsculas nos nomes dos arquivos." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Ignorar as diferenças causadas pela expansão\n" +" da tabulação." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "" +"-b --ignore-space-change Ignorar a diferença na quantidade de espaços\n" +" em branco." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Ignorar todos os espaços em branco." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B --ignore-blank-lines Ignorar diferenças nas linhas somente com " +"brancos." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I EXPREG --ignore-matching-lines=EXPREG\n" +" Ignorar as diferenças nas linhas que " +"correspondem\n" +" à EXPressão REGular." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "" +"--strip-trailing-cr Remover o caracter final de retorno de carro\n" +" (CR) da entrada." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Ler e escrever os dados em modo binário." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "" +"-a --text Considerar todos os arquivos como sendo de texto." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C N --context[=N] Exibir o contexto regular das diferenças\n" +" usando N linhas de contexto (N=3 por padrão).\n" +"-u -U N --unified[=N] Exibir o contexto unificado das diferenças\n" +" usando N linhas de contexto (N=3 por padrão).\n" +" --label RÓTULO Usar RÓTULO em vez do nome do arquivo.\n" +" -p --show-c-function Mostrar em qual função C (ed) está cada " +"diferença.\n" +" -F EXPREG --show-function-line=EXPREG\n" +" Exibir a linha mais recente que corresponde\n" +" à EXPressão REGular." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "" +"-q --brief Indicar apenas se os arquivos são diferentes." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Criar um script para o editor ed" + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Criar o diff no formato normal." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Criar o diff no formato RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Exibir em duas colunas.\n" +" -W N --width=N Exibir no máximo N colunas. (N=130 por padrão)\n" +" --left-column Exibir apenas a coluna da esquerda nas linhas\n" +" idênticas.\n" +" --suppress-common-lines Não exibir as linhas idênticas." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NOME --ifdef=NOME Exibir o arquivo mesclado incluindo\n" +" `#ifndef NOME original #else modificado'\n" +" nas diferenças." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "--GTYPE-group-format=GFMT Formata grupos de entrada GTYPE com GFMT." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LFMT Formata todas as linhas de entrada com LFMT." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT Formata todas as linhas de entrada LTYPE com " +"LFMT." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE pode ser `old', `new', ou `unchanged'.\n" +" GTYPE pode ser um dos valores de LTYPE ou `changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT pode conter:\n" +" %< linhas do ARQUIVO1\n" +" %> linhas do ARQUIVO2\n" +" %= linhas idênticas em ARQUIVO1 e ARQUIVO2\n" +" %[-][LARGURA][.[PREC]]{doxX}LETRA especificação para LETRA\n" +" utilizando a mesma notação do comando printf(). \n" +" Os códigos permitidos para LETRA são,\n" +" em maiúsculas para grupos novos,\n" +" em minúsculas para grupos antigos:\n" +" F número da primeira linha\n" +" L número da última linha\n" +" N número de linhas = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT pode conter:\n" +" %L conteúdo da linha\n" +" %l conteúdo da linha, excluindo o caracter final de nova linha\n" +" %[-][LARGURA][.[PREC]]{doxX}n especificação do número da linha da \n" +" entrada utilizando a mesma notação do comando printf()." + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" GFMT ou LFMT pode conter:\n" +" %% %\n" +" %c'C' o caracter C\n" +" %c'\\OOO' o caracter com código octal OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "" +"-l --paginate Passar a saída através da `pr' para paginar." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "" +"-t --expand-tabs Expandir as tabulações para espaços na saída." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Alinhar as diferenças introduzindo um\n" +" caracter de tabulação no início." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=NUM Parada de tabulação a cada NUM colunas\n" +" (padrão=8)." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "" +"-r --recursive Comparar recursivamente os subdiretórios\n" +" encontrados." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "" +"-N --new-file Considerar os arquivos ausentes como vazios." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Considerar os primeiros arquivos ausentes\n" +" como vazios." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "" +"-s --report-identical-files Indicar quando dois arquivos forem o idênticos." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "" +"-x PADRÃO --exclude=PADRÃO Não comparar os arquivos cujos nomes\n" +" correspondem ao PADRÃO." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X ARQUIVO --exclude-from=ARQUIVO\n" +" Excluir os arquivos com nomes que correspondem\n" +" a qualquer padrão contido em ARQUIVO." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S ARQUIVO --starting-file=ARQUIVO\n" +" Iniciar por ARQUIVO ao comparar dois diretórios." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=ARQUIVO1 Comparar ARQUIVO1 com todos os operandos.\n" +" ARQUIVO1 pode ser um diretório." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=ARQUIVO2 Comparar todos os operandos com ARQUIVO2.\n" +" ARQUIVO2 pode ser um diretório." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=N Manter N linhas de prefixo e sufixo idênticos." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "" +"-d --minimal Se esforçar para encontrar o menor conjunto\n" +" de diferenças." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Assumir arquivos grandes e muitas alterações\n" +" pequenas espalhadas." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"ARQUIVOS são `ARQUIVO1 ARQUIVO2' ou\n" +" `DIR1 DIR2' ou\n" +" `DIR ARQUIVO...' ou\n" +" `ARQUIVO... DIR'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Se --from-file ou --to-file for especificado, não há restrição em ARQUIVOS." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Se ARQUIVO for igual a `-', ler da entrada padrão." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Utilização: %s [OPÇÃO]... ARQUIVOS\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "conflitando %s valor da opção `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "opções de estilo de saída conflitantes" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Somente em %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "impossível comparar `-' com um diretório" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "a opção -D não é suportada com diretórios" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Subdiretórios idênticos: %s e %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "O arquivo %s é %s enquanto o arquivo %s é %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Os aquivos %s e %s são idênticos\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +#, fuzzy +msgid "Randy Smith" +msgstr "Escrito por Randy Smith." + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "opções incompatíveis" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "`-' especificado para mais de um arquivo de entrada" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "falha de leitura" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Criar um arquivo de ed para incorporar em\n" +" ARQUIVO1 as diferenças não mescladas\n" +" entre ARQUIVO2 e ARQUIVO3." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Exibir as diferenças sem mesclar,\n" +" conflitos entre parênteses." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "" +"-A --show-all Exibir todas as diferenças,\n" +" com os conflitos entre parênteses." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "" +"-x --overlap-only Exibir somente as diferenças que se sobrepõem." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "" +"-X Exibir as diferenças que se sobrepõem,\n" +" entre parênteses." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "" +"-3 --easy-only Exibir sem mesclar as diferenças sem " +"sobreposição." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Exibir o arquivo mesclado em vez do script do " +"ed\n" +" (implica -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L RÓTULO --label=RÓTULO Usar RÓTULO em vez do nome do arquivo." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "" +"-i Incluir os comandos `w' e `q' no script do ed." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAMA Usar o PROGRAMA para comparar os arquivos." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Utilização: %s [OPÇÃO]... ARQUIVO1 ARQUIVO2 ARQUIVO3\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Comparar três arquivos linha por linha." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "erro interno: confusão no formato dos blocos diff" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff falhou: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "erro interno: tipo de diff inválido em process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "formato de diff inválido; separador de diferença inválido" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "formato de diff inválido; a última linha não está completa" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, fuzzy, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "o programa auxiliar `%s' não foi encontrado" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "formato de diff inválido; caracteres incorretos na linha de início" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "erro interno: tipo de diff inválido passado para a saída" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "o arquivo de entrada diminuiu" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "impossível comparar os nomes dos arquivos `%s' e `%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +#, fuzzy +msgid "Thomas Lord" +msgstr "Escrito por Thomas Lord." + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o ARQUIVO --output=ARQUIVO Agir interativamente, direcionando a saída " +"para ARQUIVO." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "" +"-i --ignore-case Não fazer distinção entre letras maiúsculas\n" +" e minúsculas." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Ignorar todos os espaços em branco." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w NUM --width=NUM Limitar a saída a NUM colunas por linha (padrão " +"130)." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "" +"-l --left-column Exibir apenas a coluna da esquerda nas linhas\n" +" idênticas." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Não exibir as linhas em idênticas." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Assumir arquivos grandes e muitas alterações\n" +" pequenas espalhadas." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Utilização: %s [OPÇÃO]... ARQUIVO1 ARQUIVO2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Mesclagem lado a lado das diferenças dos arquivos." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "impossível mesclar interativamente a entrada padrão" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "os dois arquivos a serem comparados são diretórios" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tEditar e então usar ambas as versões, cada uma com seu cabeçalho.\n" +"eb:\tEditar e então usar ambas as versões.\n" +"el:\tEditar e então usar a versão da esquerda.\n" +"er:\tEditar e então usar a versão da direita.\n" +"e:\tEditar uma nova versão.\n" +"l:\tUsar a versão da esquerda.\n" +"r:\tUsar a versão da direita.\n" +"s:\tIncluir silenciosamente as linhas idênticas.\n" +"v:\tIncluir verbosamente as linhas idênticas.\n" +"q:\tSair.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: a opção -- %c é ilegal\n" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the files named COPYING." +#~ msgstr "" +#~ "Este programa não tem nenhum tipo de garantia, o tanto quanto\n" +#~ "é permitido por lei. Você pode redistribuir cópias deste\n" +#~ "programa sob os termos da Licença Pública Geral GNU. Para\n" +#~ "mais informações a este respeito, leia o arquivo COPYING." + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr "Escrito por Torbjörn Granlund e David MacKenzie." + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Relatar os problemas para <bug-gnu-utils@gnu.org>." + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ "Escrito por Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, e Len Tower." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "a opção `-%ld' está obsoleta; usar `-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "a opção `-%ld' está obsoleta; omita-a" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "o programa auxiliar `%s' falhou" + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "o programa auxiliar `%s' não é executável" diff --git a/po/quot.sed b/po/quot.sed new file mode 100644 index 0000000..0122c46 --- /dev/null +++ b/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/po/remove-potcdate.sin b/po/remove-potcdate.sin new file mode 100644 index 0000000..2436c49 --- /dev/null +++ b/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/po/ro.gmo b/po/ro.gmo new file mode 100644 index 0000000000000000000000000000000000000000..8e2dbd210e0b5f4b76bf8a71f4d403a8b4669fac GIT binary patch literal 20868 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 DhQ`D+ literal 0 HcmV?d00001 diff --git a/po/ro.po b/po/ro.po new file mode 100644 index 0000000..5f9c5ab --- /dev/null +++ b/po/ro.po @@ -0,0 +1,1242 @@ +# Mesajele în limba românã pentru diffutils-2.8.3 +# Copyright (C) 2003 Free Software Foundation, Inc. +# Acest fi?ier este distribuit sub aceea?i licen?? ca ?i pachetul diffutils +# Eugen Hoanca <eugenh@urban-grafx.ro>, 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.3\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2003-08-22 08:43+0300\n" +"Last-Translator: Eugen Hoanca <eugenh@urban-grafx.ro>\n" +"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "eroare de program" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "stivã plinã(overflow)" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Eroare de sistem necunoscutã" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "fiºier obiºnuit(regular) vid" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "fiºier obiºnuit" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "director" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "fiºier bloc special" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "fiºier caracter special" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "legãturã simbolicã" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "socket" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "coadã(queue) de mesaje" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semafor" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "obiect memorie globalã(shared memory)" + +#: lib/file-type.c:68 +#, fuzzy +msgid "typed memory object" +msgstr "obiect memorie globalã(shared memory)" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "fiºier ciudat" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: opþiunea `%s' este ambiguã\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: opþiunea `--%s' nu permite parametri\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: opþiunea `%c%s' nu permite parametri\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: opþiunea `%s' necesitã un parametru\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opþiune necunoscutã `--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opþiune necunoscutã `%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opþiune invalidã -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: opþiunea necesitã un parametru -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: opþiunea `-W %s' este ambiguã\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: opþiunea `-W %s' nu permite parametri\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: opþiunea `%s' necesitã un parametru\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Succes" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Nici o potrivire" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Expresie normalã(regular) invalidã" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Caracter de comparare invalid" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Nume clasã caracter invalidã" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Backslash de sfârºit de linie(trailing)" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Referinþã precedentã invalidã" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "[ sau [^ neînchise" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "( or \\( neînchise" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "\\{ neînchisã" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Conþinut invalid al \\{\\}" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Sfârºit de domeniu invalid" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Memorie plinã" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Expresie normalã de precedenþã invalidã" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Sfârºit prematur de expresie normalã" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Expresie normalã prea mare" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr ") or \\) nedeschise" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Nu a existat nici o expresie normalã antecedentã" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "memorie plinã" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Eroare de sistem necunoscutã" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "valoare --bytes invalidã `%s'" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "lungime de orizont invalidã `%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "(C)" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, fuzzy, c-format +msgid "Written by %s.\n" +msgstr "Scris de Thomas Lord." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "Scris de Randy Smith." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Scris de Randy Smith." + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Fiºierele %s ºi %s diferã\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Fiºierele binare %s ºi %s diferã\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Nici un element de linie nouã la sfârºitul fiºierului" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Încercaþi `%s --help' pentru mai multe informaþii." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "invalid --se ignorã valoarea iniþialã `%s'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "opþiunile -l ºi -s sunt incompatibile" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "scriere eºuatã" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "ieºire(output) standard" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Tipãreºte octeþii diferiþi." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i OMIS --ignore-initial=OMIS Omite primii octeþi OMISi din intrare(input)." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i OMIS1:OMIS2 --ignore-initial=OMIS1:OMIS2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Omite primii OMIS1 octeþi din FIªIER1 ºi primii OMIS2 octeþi din FIªIER2" + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose Tipãreºte numerele octeþilor ºi valorile octeþilor diferiþi." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LIMITà --bytes=LIMITà Comparã cel mult LIMITà octeþi." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "" +"-s --quiet --silent Nu tipãreºte nimic; anunþã(yield) doar starea de " +"ieºire." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Tipãreºte informaþii despre versiune." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Tipãreºte acest ajutor." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Folosire: %s [OPÞIUNE]... FIªIER1 [FIªIER2 [OMIS1 [OMIS2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Comparã douã fiºiere octet cu octet." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "" +"OMIS1 ºi OMIS2 sunt numerele de octeþi care sã fie omiºi din fiecare fiºier." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Valorile OMIS pot fi urmate de urmãtoarele sufixe multiplicative:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, ºi aºa mai departe pentru T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "" +"Dacã un FIªIER este `-' sau lipseºte, se citeºte intrarea(input) standard." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "valoare --bytes invalidã `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "lipseºte operandul dupã `%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "operand în plus(extra) `%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s diferã: octetul %s, linia %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s diferã: octetul %s, linia %s este %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF în %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "lungime invalidã de context `%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "paginaþie nesuportatã de acest host" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "prea multe opþiuni de etichete fiºier" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "lungime invalidã `%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "opþiuni de lungime în conflict" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "lungime de orizont invalidã `%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "mãrime tab invalidã `%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "opþiuni mãrime tab în conflict" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr " --from-file ºi --to-file sunt specificate împreunã" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Comparã fiºierele linie cu linie." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" +"-i --ignore-case Ignorã diferenþele de caz din conþinutul fiºierului." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Ignorã cazul când se comparã numele de fiºiere." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Ia în calcul cazul atunci când se comparã numele " +"de fiºiere." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Ignorã schimbãrile produse de modificarea tab-" +"ului." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Ignorã schimbãrile din spaþiul vid." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Ignorã tot spaþiul vid." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B --ignore-blank-lines Ignorã schimbãrile unde toate liniile sunt goale" +"(blank)." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RE --ignore-matching-lines=RE Ignorã schimbãrile la toate liniile care " +"se potrivesc RE-ului." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "" +"--strip-trailing-cr Eliminã returul de car(carriage return) final la intrare" +"(input)." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Citeºte ºi scrie date în mod binar." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Trateazã toate fiºierele ca text." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C NUM --context[=NUM] Tipãreºte NUM (implicit 3) linii de " +"contextcopiat.\n" +"-u -U NUM --unified[=NUM] Tipãreºte NUM (implicit 3) linii de " +"contextunificat.\n" +" --label ETICHETà Foloseºte ETICHETà în loc de nume fiºier.\n" +" -p --show-c-function Afiºeazã fiecare schimbare din fiecare funcþie C.\n" +" -F RE --show-function-line=RE Afiºeazã cele mai recente linii care se " +"potrivesc RE." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Afiºeazã doar dacã fiºierele diferã." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Afiºeazã un script ed." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Afiºeazã un diff normal." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Afiºeazã un diff în format RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Afiºeazã pe douã coloane.\n" +" -W NUM --width=NUM Afiºeazã cel mult NUM (implicit 130) coloane " +"tipãrite.\n" +" --left-column Afiºeazã doar coloana din stânga a liniilor comune.\n" +" --suppress-common-lines Nu afiºa liniile comune." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NUME --ifdef=NUME Afiºeazã fiºierul rezultat(merged) pentru a arãta " +"diff-urile`#ifdef NAME'." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT Similar, dar formatul de intrare GTYPE se " +"grupeazã cu GFMT." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "--line-format=LFMT Similar, dar formateazã toate liniile cu LFMT." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT Similar, dar formateazã liniile de intrare LTYPE " +"cu LFMT." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE este `old', `new', sau `unchanged'. GTYPE este LTYPE sau `changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT poate conþine:\n" +" %< linii din FIªIER1\n" +" %> linii din FIªIER2\n" +" %= linii comune lui FIªIER1 si FIªIER2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER specificaþii stil printf pentru " +"LETTER\n" +" LETTERs sunt dupã cum urmeazã pentru grup nou, literã micã pentru grup " +"vechi:\n" +" F primul numãr de linie\n" +" L ultimul numãr de linie\n" +" N numere de linii = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT poate conþine:\n" +" %L conþinut de linie\n" +" %l conþinut de linie, excluzând orice caracter de linie nouã final\n" +" %[-][WIDTH][.[PREC]]{doxX}n specificaþii stil printf-pentru " +"introducerea numãrului de linie" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Una din GFMT sau LFMT poate conþine:\n" +" %% %\n" +" %c'C' caracterul singular C\n" +" %c'\\OOO' caracterul cu codul octal OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "" +"-l --paginate Trimite ieºirea(output) prin `pr' pentru a fi paginatã." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Schimbã tab-urile în spaþii la ieºire(output)." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "-T --initial-tab Aliniazã tab-urile adãugând în faþã un tab." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=NUM Opririle tab-ului vor fi la fiecare NUM (implicit 8) coloane " +"tipãrite." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Comparã recursiv orice subdirector întâlnit." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Trateazã fiºierele lipsã ca vide." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "--unidirectional-new-file Trateazã primele fiºiere lipsã ca vide." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "" +"-s --report-identical-files Raporteazã când douã fiºiere sunt asemãnãtoare." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x TIP --exclude=TIP Exclude fiºierele care se potrivesc TIParului." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FIªIER --exclude-from=FIªIER Exclude fiºierele care se potrivesc " +"oricãrui tipar din FIªIER." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S FIªIER --starting-file=FIªIER Începe cu FIªIER în compararea " +"directoarelor." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FIªIER1 Comparã FIªIER1 cu toþi operanzii. FIªIER1 poate fi " +"director." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FIªIER2 Comparã toþi operanzii cu FIªIER2. FIªIER2 poate fi " +"director." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "--horizon-lines=NUM Reþine NUM linii de prefix ºi sufix comun." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "" +"-d --minimal Încearcã din greu sã gãseºti un set mai mic de schimbãri" + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Presupune fiºiere mari ºi multe modificãri mici " +"împrãºtiate." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"FIªIEREle sunt `FIªIER1 FIªIER2' sau `DIR1 DIR2' sau `DIR FIªIER...' or " +"`FIªIER... DIR'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Dacã --from-file sau --to-file sunt precizate, nu existã restricþii pe " +"FIªIERE." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Dacã FIªIER este `-', se citeºte intrarea(input) standard." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Folosire: %s [OPÞIUNE]... FIªIERE\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "Existã un conflict cu %s în valoarea opþiunii `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "Conflict în opþiunile stilului de afiºare(output)" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Doar în %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "nu se poate compara `-' cu un director" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "opþiunea -D nu este compatibilã cu directoarele" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Subdirectoare comune: %s ºi %s.\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Fiºierul %s este un %s pe când fiºierul %s este un %s.\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Fiºierele %s ºi %s sunt identice\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +#, fuzzy +msgid "Randy Smith" +msgstr "Scris de Randy Smith." + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "opþiuni incompatibile" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "`-' specificat pentru mai mult de un fiºier de intrare(input)" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "citire eºuatã" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Trimite(output) modificãrile nerezultate(unmerged) de la " +"FIªIER_VECHI la FIªIERUL_VOSTRU în FIªIERUL_MEU.." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Afiºeazã modificãrile nerezultate(unmerged), conflictele " +"de paranteze." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Afiºeazã toate modificãrile, conflictele de paranteze." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Afiºeazã toate schimbãrile de suprapunere." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Afiºeazã schimbãrile de suprapunere, punându-le în paranteze." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "" +"-3 --easy-only Afiºeazã schimbãrile nesuprapuse(nonoverlapping) ºi " +"nerezultate(unmerged)." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Afiºeazã fiºierul rezultat(merged) în loc de scriputl ed " +"(implicit -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "" +"-L ETICHETà --label=ETICHETà Foloseºte ETICHETà în loc de numele " +"fiºierului." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Adaugã comenzile `w' ºi `q' la scripturile ed." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAM Foloseºte PROGRAM pentru a compara fiºierele." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Folosire: %s [OPÞIUNE]... FIªIERUL_MEU FIªIER_VECHI FIªIERUL_TÃU\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Comparã trei fiºiere linie cu linie" + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "eroare internã: zãpãcealã în formatul blocurilor diff" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff eºuat: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "eroare internã: tip diff invalid în process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "format diff invalid; separator de modificare invalid" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "format diff invalid; ultimã-linie incompletã" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, fuzzy, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "programul subsidiar `%s' nu a fost gãsit" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "format diff invalid; caractere precedente liniei incorecte" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "eroare internã: tip invalid de diff trimis spre ieºire(output)" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "fiºier de intrare(input) micºorat" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "nu se pot compara numele de fiºiere `%s' ºi `%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +#, fuzzy +msgid "Thomas Lord" +msgstr "Scris de Thomas Lord." + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o FIªIER --output=FIªIER Opereazã interactiv, trimiþând outputul spre " +"FIªIER." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "" +"-i --ignore-case Considerã majusculele ºi minusculele ca fiind aceleaºi." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Ignorã tot spaþiul gol." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w NUM --width=NUM Afiºeazã cel mult NUM (implicit 130) coloane tipãrite." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Afiºeazã doar coloana din stânga a liniilor comune." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Nu afiºa liniile comune." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Presupune fiºiere mari ºi multe modificãri mici " +"împrãºtiate." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Folosire: %s [OPÞIUNE]... FIªIER1 FIªIER2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Analizã pas cu pas a diferenþelor de fiºiere." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "nu poate rezulta(merge) interactiv intrarea(input) standard" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "ambele fiºiere de comparat sunt directoare" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tEditeazã apoi foloseºte ambele versiuni, fiecare decoratã cu un cap de " +"tabel.\n" +"eb:\tEditeazã apoi foloseºte ambele versiuni.\n" +"el:\tEditeazã apoi foloseºte versiunea din stânga.\n" +"er:\tEditeazã apoi foloseºte versiunea din dreapta.\n" +"e:\tEditeazã o versiune nouã.\n" +"l:\tFoloseºte versiunea din stânga.\n" +"r:\tFoloseºte versiunea din dreapta.\n" +"s:\tInclude silenþios liniile comune.\n" +"v:\tInclude detaliat liniile comune.\n" +"q:\tIeºire.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: opþiune ilegalã -- %c\n" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the files named COPYING." +#~ msgstr "" +#~ "Acest program NU vine cu NICI O GARANÞIE, în mãsura permisã de lege.\n" +#~ "Puteþi redistribui copii ale acestui program\n" +#~ "sub termenii Licenþei Publice Generale GNU.\n" +#~ "Pentru mai multe informaþii despre aceste chestiuni, citiþi fiºierul " +#~ "numit COPYING." + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr "Scris de Torbjorn Granlund ºi David MacKenzie." + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Raportaþi erorile(bugs)la <bug-gnu-utils@gnu.org>." + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ "Scris de Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, ºi Len Tower." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "`-%ld' opþiunea este învechitã; folosiþi `-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "`-%ld' opþiunea este învechitã; omiteþi-o" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "programul subsidiar `%s' eºuat" + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "programul subsidiar `%s' nu este executabil" diff --git a/po/ru.gmo b/po/ru.gmo new file mode 100644 index 0000000000000000000000000000000000000000..106586fa08a29a2bb28cd7af71feb5034db48cb6 GIT binary patch literal 22536 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 ByCeVr literal 0 HcmV?d00001 diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..c54111f --- /dev/null +++ b/po/ru.po @@ -0,0 +1,1237 @@ +# ðÅÒÅ×ÏÄ ÓÏÏÂÝÅÎÉÊ diffutils +# Copyright (C) 1998 Free Software Foundation, Inc. +# Oleg S. Tihonov <ost@tatnipi.ru>, 1998, 2001, 2002, 2005, 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2007-02-13 07:13+0300\n" +"Last-Translator: Oleg S. Tihonov <ost@tatnipi.ru>\n" +"Language-Team: Russian <ru@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=koi8-r\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "ÏÛÉÂËÁ ÐÒÏÇÒÁÍÍÙ" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "ÐÅÒÅÐÏÌÎÅÎÉÅ ÓÔÅËÁ" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÓÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "ÏÂÙÞÎÙÊ ÐÕÓÔÏÊ ÆÁÊÌ" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "ÏÂÙÞÎÙÊ ÆÁÊÌ" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "ËÁÔÁÌÏÇ" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "ÓÐÅÃÉÁÌØÎÙÊ ÆÁÊÌ Ó ÐÏÂÌÏÞÎÙÍ ÄÏÓÔÕÐÏÍ" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "ÓÐÅÃÉÁÌØÎÙÊ ÆÁÊÌ Ó ÐÏÓÉÍ×ÏÌØÎÙÍ ÄÏÓÔÕÐÏÍ" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "ÏÞÅÒÅÄØ" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "ÓÉÍ×ÏÌØÎÁÑ ÓÓÙÌËÁ" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "ÓÏËÅÔ" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "ÏÞÅÒÅÄØ ÓÏÏÂÝÅÎÉÊ" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "ÓÅÍÁÆÏÒ" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔ" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "ÏÂßÅËÔ ÔÉÐÉÚÉÒÏ×ÁÎÎÏÊ ÐÁÍÑÔÉ" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "ÓÔÒÁÎÎÙÊ ÆÁÊÌ" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: ÎÅÏÄÎÏÚÎÁÞÎÙÊ ËÌÀÞ `%s'\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: ËÌÀÞ `--%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: ËÌÀÞ `%c%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: ËÌÀÞ `%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ c ÁÒÇÕÍÅÎÔÏÍ\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ `--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ `%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ÎÅ×ÅÒÎÙÊ ËÌÀÞ -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: ËÌÀÞ %c ÄÏÌÖÅÎ ÂÙ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ c ÁÒÇÕÍÅÎÔÏÍ\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: ÎÅÏÄÎÏÚÎÁÞÎÙÊ ËÌÀÞ `-W %s'\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: ËÌÀÞ `-W %s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: ËÌÀÞ `%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ c ÁÒÇÕÍÅÎÔÏÍ\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "õÓÐÅÈ" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "óÏ×ÐÁÄÅÎÉÊ ÎÅÔ" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "îÅ×ÅÒÎÏÅ ÒÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÄÌÑ ÓÏÒÔÉÒÏ×ËÉ ÓÉÍ×ÏÌ" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "îÅ×ÅÒÎÏÅ ÉÍÑ ËÌÁÓÓÁ ÓÉÍ×ÏÌÁ" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "ïÂÒÁÔÎÁÑ ËÏÓÁÑ ÞÅÒÔÁ ÓÔÏÉÔ ÐÏÓÌÅÄÎÅÊ" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "îÅ×ÅÒÎÁÑ ÓÓÙÌËÁ" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "îÅÐÁÒÎÁÑ [ ÉÌÉ [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "îÅÐÁÒÎÁÑ ( ÉÌÉ \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "îÅÐÁÒÎÁÑ \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "îÅ×ÅÒÎÏÅ ÓÏÄÅÒÖÉÍÏÅ \\{\\}" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "îÅ×ÅÒÎÙÊ ÎÉÖÎÉÊ ÐÒÅÄÅÌ" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "ïÐÅÒÁÔÉ×ÎÁÑ ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "îÅ×ÅÒÎÏÅ ÐÒÅÄÛÅÓÔ×ÕÀÝÅÅ ÒÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "ðÒÅÖÄÅ×ÒÅÍÅÎÎÙÊ ËÏÎÅà ÒÅÇÕÌÑÒÎÏÇÏ ×ÙÒÁÖÅÎÉÑ" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "òÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ ÓÌÉÛËÏÍ ×ÅÌÉËÏ" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "îÅÐÁÒÎÁÑ ) ÉÌÉ \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "òÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ ÎÅ ÂÙÌÏ ÚÁÄÁÎÏ ÒÁÎØÛÅ" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÓÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "ÎÅÄÏÐÕÓÔÉÍÏÅ ÚÎÁÞÅÎÉÅ --bytes `%s'" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "ÎÅÄÏÐÕÓÔÉÍÁÑ ÄÌÉÎÁ ÇÏÒÉÚÏÎÔÁ `%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "á×ÔÏÒ ÐÒÏÇÒÁÍÍÙ -- %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "á×ÔÏÒÙ ÐÒÏÇÒÁÍÍÙ -- %s É %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "á×ÔÏÒÙ ÐÒÏÇÒÁÍÍÙ -- %s, %s É %s.\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 "" +"á×ÔÏÒÙ ÐÒÏÇÒÁÍÍÙ -- %s, %s, %s\n" +"É %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"á×ÔÏÒÙ ÐÒÏÇÒÁÍÍÙ -- %s, %s, %s,\n" +"%s É %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"á×ÔÏÒÙ ÐÒÏÇÒÁÍÍÙ -- %s, %s, %s,\n" +"%s, %s É %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"á×ÔÏÒÙ ÐÒÏÇÒÁÍÍÙ -- %s, %s, %s,\n" +"%s, %s, %s É %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"á×ÔÏÒÙ ÐÒÏÇÒÁÍÍÙ -- %s, %s, %s,\n" +"%s, %s, %s, %s\n" +"É %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"á×ÔÏÒÙ ÐÒÏÇÒÁÍÍÙ -- %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s É %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"á×ÔÏÒÙ ÐÒÏÇÒÁÍÍÙ -- %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s É ÄÒÕÇÉÅ.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "æÁÊÌÙ %s É %s ÒÁÚÌÉÞÁÀÔÓÑ\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "æÁÊÌÙ %s É %s ÒÁÚÌÉÞÁÀÔÓÑ\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "÷ ËÏÎÃÅ ÆÁÊÌÁ ÎÅÔ ÎÏ×ÏÊ ÓÔÒÏËÉ" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "ôÏÒÂØ£ÒÎ çÒÁÎÌÕÎÄ" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "ðÏÐÒÏÂÕÊÔÅ `%s --help' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "ÎÅÄÏÐÕÓÔÉÍÏÅ ÚÎÁÞÅÎÉÅ --ignore-initial `%s'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "ËÌÀÞÉ -l É -s ÎÅÓÏ×ÍÅÓÔÉÍÙ" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "ÚÁÐÉÓØ ÎÅÕÓÐÅÛÎÁ" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "ÓÔÁÎÄÁÒÔÎÙÊ ×Ù×ÏÄ" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes ÷Ù×ÏÄÉÔØ ÒÁÚÌÉÞÁÀÝÉÅÓÑ ÂÁÊÔÙ." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i î --ignore-initial=î éÇÎÏÒÉÒÏ×ÁÔØ ÒÁÚÌÉÞÉÑ × ÐÅÒ×ÙÈ î ÂÁÊÔÁÈ ××ÏÄÁ." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i î1:î2 --ignore-initial=î1:î2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "ðÒÏÐÕÓÔÉÔØ ÐÅÒ×ÙÅ î1 ÂÁÊÔ ÆÁÊÌÁ æáêì1 É ÐÅÒ×ÙÅ î2 ÂÁÊÔ ÆÁÊÌÁ æáêì2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose ÷Ù×ÏÄÉÔØ ÎÏÍÅÒÁ É ÚÎÁÞÅÎÉÑ ×ÓÅÈ ÒÁÚÌÉÞÁÀÝÉÈÓÑ ÂÁÊÔ." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n ðòåäåì --bytes=ðòåäåì óÒÁ×ÎÉ×ÁÔØ ÎÅ ÂÏÌÅÅ ÕËÁÚÁÎÎÏÇÏ ÞÉÓÌÁ ÂÁÊÔ." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "" +"-s --quiet --silent îÅ ×Ù×ÏÄÉÔØ, ÔÏÌØËÏ ÓÏÏÂÝÉÔØ ×ÏÚ×ÒÁÝÁÅÍÏÅ ÚÎÁÞÅÎÉÅ." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version ðÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help ðÏËÁÚÁÔØ ÜÔÕ ÓÐÒÁ×ËÕ É ×ÙÊÔÉ." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþ]... æáêì1 [æáêì2 [î1 [î2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "ðÏÂÁÊÔÏ×Ï ÓÒÁ×ÎÉ×ÁÅÔ Ä×Á ÆÁÊÌÁ." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "î1 É î2 -- ÜÔÏ ÞÉÓÌÏ ÂÁÊÔ, ËÏÔÏÒÙÅ ÓÌÅÄÕÅÔ ÐÒÏÐÕÓÔÉÔØ × ËÁÖÄÏÍ ÆÁÊÌÅ." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"ë ÚÎÁÞÅÎÉÑÍ î ÍÏÖÎÏ ÐÒÉÐÉÓÙ×ÁÔØ ÏÄÉÎ ÉÚ ÓÌÅÄÕÀÝÉÈ ÍÎÏÖÉÔÅÌØÎÙÈ ÓÕÆÆÉËÓÏ×:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, É ÔÁË ÄÁÌÅÅ ÄÌÑ T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "åÓÌÉ æáêì ÎÅ ÚÁÄÁÎ ÉÌÉ ÚÁÄÁÎ ËÁË `-', ÞÉÔÁÅÔ ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"÷ÙÈÏÄÎÏÊ ÓÔÁÔÕÓ ÒÁ×ÅÎ 0, ÅÓÌÉ ×ÈÏÄÎÙÅ ÆÁÊÌÙ ÉÄÅÎÔÉÞÎÙ, 1 -- ÅÓÌÉ\n" +"ÒÁÚÌÉÞÁÀÔÓÑ, É 2 × ÓÌÕÞÁÅ ÎÅÐÏÌÁÄÏË." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "ÎÅÄÏÐÕÓÔÉÍÏÅ ÚÎÁÞÅÎÉÅ --bytes `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "ÐÒÏÐÕÝÅÎ ÏÐÅÒÁÎÄ ÐÏÓÌÅ `%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "ÉÚÌÉÛÎÉÊ ÏÐÅÒÁÎÄ `%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s ÒÁÚÌÉÞÁÀÔÓÑ: ÂÁÊÔ %s, ÓÔÒÏËÁ %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s ÒÁÚÌÉÞÁÀÔÓÑ: ÂÁÊÔ %s, ÓÔÒÏËÁ %s ÒÁ×ÅÎ %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: ËÏÎÅà ÆÁÊÌÁ × %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "ÎÅÄÏÐÕÓÔÉÍÁÑ ÄÌÉÎÁ ËÏÎÔÅËÓÔÁ `%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "ÒÁÚÂÉÅÎÉÅ ÎÁ ÓÔÒÁÎÉÃÙ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÎÁ ÄÁÎÎÏÊ ÍÁÛÉÎÅ" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ËÌÀÞÅÊ ÚÁÄÁÀÝÉÈ ÍÅÔËÉ ÆÁÊÌÏ×" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "ÎÅÄÏÐÕÓÔÉÍÁÑ ÛÉÒÉÎÁ `%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "ÐÒÏÔÉ×ÏÒÅÞÉ×ÙÅ ËÌÀÞÉ ÚÁÄÁÎÉÑ ÛÉÒÉÎÙ" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "ÎÅÄÏÐÕÓÔÉÍÁÑ ÄÌÉÎÁ ÇÏÒÉÚÏÎÔÁ `%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "ÎÅÄÏÐÕÓÔÉÍÁÑ ÛÉÒÉÎÁ ÔÁÂÕÌÑÃÉÉ `%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "ÐÒÏÔÉ×ÏÒÅÞÉ×ÙÅ ËÌÀÞÉ ÚÁÄÁÎÉÑ ÛÉÒÉÎÙ ÔÁÂÕÌÑÃÉÉ" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "ÎÅÏÂÈÏÄÉÍÏ ÚÁÄÁÔØ ËÁË --from-file, ÔÁË É --to-file" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "ðÏÓÔÒÏÞÎÏ ÓÒÁ×ÎÉ×ÁÅÔ Ä×Á ÆÁÊÌÁ." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case éÇÎÏÒÉÒÏ×ÁÔØ ÒÅÇÉÓÔÒ ÂÕË× × ÓÏÄÅÒÖÉÍÏÍ ÆÁÊÌÏ×." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "--ignore-file-name-case éÇÎÏÒÉÒÏ×ÁÔØ ÒÅÇÉÓÔÒ ÂÕË× × ÉÍÅÎÁÈ ÆÁÊÌÏ×." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "--no-ignore-file-name-case õÞÉÔÙ×ÁÔØ ÒÅÇÉÓÔÒ ÂÕË× × ÉÍÅÎÁÈ ÆÁÊÌÏ×." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion éÇÎÏÒÉÒÏ×ÁÔØ ÉÚÍÅÎÅÎÉÑ, ×ÙÚ×ÁÎÎÙÅ ÒÁÓËÒÙÔÉÅÍ " +"ÔÁÂÕÌÑÃÉÉ." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "" +"-b --ignore-space-change éÇÎÏÒÉÒÏ×ÁÔØ ÉÚÍÅÎÅÎÉÑ ÞÉÓÌÁ ÐÒÏÂÅÌØÎÙÈ ÓÉÍ×ÏÌÏ×." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space éÇÎÏÒÉÒÏ×ÁÔØ ×ÓÅ ÐÒÏÂÅÌØÎÙÅ ÓÉÍ×ÏÌÙ." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines éÇÎÏÒÉÒÏ×ÁÔØ ÉÚÍÅÎÅÎÉÑ ÞÉÓÌÁ ÐÕÓÔÙÈ ÓÔÒÏË." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I ò÷ --ignore-matching-lines=ò÷ éÇÎÏÒÉÒÏ×ÁÔØ ÉÚÍÅÎÅÎÉÑ, ÓÔÒÏËÉ ËÏÔÏÒÙÈ\n" +" ÐÏÌÎÏÓÔØÀ ÓÏÏÔ×ÅÔÓÔ×ÕÀÔ ÚÁÄÁÎÎÏÍÕ ÒÅÇÕÌÑÒÎÏÍÕ " +"×ÙÒÁÖÅÎÉÀ" + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr õÄÁÌÉÔØ ÎÁ ×Ù×ÏÄÅ ÚÁ×ÅÒÛÁÀÝÉÊ ×ÏÚ×ÒÁÔ ËÁÒÅÔËÉ." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary þÉÔÁÔØ É ÚÁÐÉÓÙ×ÁÔØ ÆÁÊÌÙ × Ä×ÏÉÞÎÏÊ ÆÏÒÍÅ." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text óÞÉÔÁÔØ ×ÓÅ ÆÁÊÌÙ ÔÅËÓÔÏ×ÙÍÉ." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C þéóìï --context[=þéóìï] ëÏÐÉÒÏ×ÁÔØ þéóìï (ÐÏ ÕÍÏÌÞÁÎÉÀ 3) ÓÔÒÏË " +"ËÏÎÔÅËÓÔÁ.\n" +"-u -U þéóìï --unified[=þéóìï] ÷Ù×ÏÄÉÔØ þéóìï (ÐÏ ÕÍÏÌÞÁÎÉÀ 3) ÓÔÒÏË\n" +" ÏÂßÅÄÉÎÅÎÎÏÇÏ ËÏÎÔÅËÓÔÁ.\n" +" -L íåôëá --label íåôëá éÓÐÏÌØÚÏ×ÁÔØ íåôëõ ×ÍÅÓÔÏ ÉÍÅÎÉ ÆÁÊÌÁ.\n" +" -p --show-c-function ðÏËÁÚÙ×ÁÔØ C-ÆÕÎËÃÉÀ, ÓÏÄÅÒÖÁÝÕÀ ÉÚÍÅÎÅÎÉÅ.\n" +" -F ò÷ --show-function-line=ò÷ ðÏËÁÚÙ×ÁÔØ ÐÒÅÄÛÅÓÔ×ÕÀÝÕÀ ÓÔÒÏËÕ, " +"ÓÏ×ÐÁÄÁÀÝÕÀ\n" +" Ó ÚÁÄÁÎÎÙÍ ÒÅÇÕÌÑÒÎÙÍ ×ÙÒÁÖÅÎÉÅÍ." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief îÁÐÅÞÁÔÁÔØ ÔÏÌØËÏ ÒÁÚÌÉÞÁÀÔÓÑ ÌÉ ÆÁÊÌÙ." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed ÷Ù×ÏÄÉÔØ ÓÃÅÎÁÒÉÊ ed." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal ÷Ù×ÏÄÉÔØ × ÏÂÙÞÎÏÍ ÆÏÒÍÁÔÅ diff." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs ÷Ù×ÏÄÉÔØ × ÆÏÒÍÁÔÅ RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side ÷Ù×ÏÄÉÔØ × Ä×Å ËÏÌÏÎËÉ.\n" +" -W þéóìï --width=þéóìï ÷Ù×ÏÄÉÔØ ÍÁËÓÉÍÕÍ ÚÁÄÁÎÎÏÅ þéóìï ÚÎÁËÏ× × " +"ÓÔÒÏËÅ.\n" +" (ÐÏ ÕÍÏÌÞÁÎÉÀ 130)\n" +" --left-column ÷Ù×ÏÄÉÔØ ÔÏÌØËÏ ÌÅ×ÕÀ ËÏÌÏÎËÕ ÏÂÝÉÈ ÓÔÒÏË.\n" +" --suppress-common-lines îÅ ×Ù×ÏÄÉÔØ ÏÂÝÉÅ ÓÔÒÏËÉ." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D éíñ --ifdef=éíñ ÷Ù×ÏÄÉÔØ ÚÁÐÌÁÔÙ, ÉÓÐÏÌØÚÕÀÝÉÅ ËÏÎÓÔÒÕËÃÉÀ `#ifdef éíñ'." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--çôéð-group-format=çæíô áÎÁÌÏÇÉÞÎÏ, ÎÏ ÆÏÒÍÁÔÉÒÏ×ÁÔØ ×ÈÏÄÎÙÅ ÇÒÕÐÐÙ ÔÉÐÁ " +"çôéð\n" +" × ÓÏÏÔ×ÅÔÓÔ×ÉÉ Ó ÆÏÒÍÁÔÏÍ çæíô." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=óæíô áÎÁÌÏÇÉÞÎÏ, ÎÏ ÆÏÒÍÁÔÉÒÏ×ÁÔØ ×ÓÅ ×ÈÏÄÎÙÅ ÓÔÒÏËÉ Ó óæíô." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--óôéð-group-format=óæíô áÎÁÌÏÇÉÞÎÏ, ÎÏ ÆÏÒÍÁÔÉÒÏ×ÁÔØ ×ÈÏÄÎÙÅ ÓÔÒÏËÉ ÔÉÐÁ " +"óôéð\n" +" × ÓÏÏÔ×ÅÔÓÔ×ÉÉ Ó ÆÏÒÍÁÔÏÍ óæíô." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" óôéð ÍÏÖÅÔ ÂÙÔØ `old', `new', ÉÌÉ `unchanged', çôéð -- ÔÏ ÖÅ É `changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" çæíô ÍÏÖÅÔ ÓÏÄÅÒÖÁÔØ:\n" +" %< ÓÔÒÏËÉ ÉÚ æáêìá1\n" +" %> ÓÔÒÏËÉ ÉÚ æáêìá2\n" +" %= ÓÔÒÏËÉ, ÏÂÝÉÅ ÄÌÑ æáêìá1 É æáêìá2\n" +" %[-][ûéòéîá][.[ôïþî]]{doxX}âõë÷á ÆÏÒÍÁÔ ÄÌÑ âõë÷ù × ÓÔÉÌÅ printf\n" +" âõë÷á ÐÒÉÎÉÍÁÅÔ ÓÌÅÄÕÀÝÉÅ ÚÎÁÞÅÎÉÑ ÄÌÑ ÎÏ×ÙÈ ÇÒÕÐÐ, ÄÌÑ ÓÔÁÒÙÈ " +"ÓÔÒÏÞÎÙÅ:\n" +" F ÎÏÍÅÒ ÐÅÒ×ÏÊ ÓÔÒÏËÉ\n" +" L ÎÏÍÅÒ ÐÏÓÌÅÄÎÅÊ ÓÔÒÏËÉ\n" +" N ÞÉÓÌÏ ÓÔÒÏË = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" óæíô ÍÏÖÅÔ ÓÏÄÅÒÖÁÔØ:\n" +" %L ÓÏÄÅÒÖÉÍÏÅ ÓÔÒÏËÉ\n" +" %l ÓÏÄÅÒÖÉÍÏÅ ÓÔÒÏËÉ, ÉÓËÌÀÞÁÑ ×ÓÅ ÎÏ×ÙÅ ÓÔÒÏËÉ × ËÏÎÃÅ\n" +" %[-][ûéòéîá][.[ôïþî]]{doxX}n ÆÏÒÍÁÔ ÎÏÍÅÒÁ ×ÈÏÄÎÏÊ ÓÔÒÏËÉ × ÓÔÉÌÅ printf" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" ïÂÁ çæíô É óæíô ÍÏÇÕÔ ÓÏÄÅÒÖÁÔØ:\n" +" %% %\n" +" %c'ó' ÏÄÉÎ ÓÉÍ×ÏÌ ó\n" +" %c'\\OOO' ÏÄÉÎ ÓÉÍ×ÏÌ Ó ×ÏÓØÍÅÒÉÞÎÙÍ ËÏÄÏÍ OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "" +"-l --paginate îÁÐÒÁ×ÉÔØ ×Ù×ÏÄ ÐÒÏÇÒÁÍÍÅ `pr' ÄÌÑ ÒÁÚÂÉÅÎÉÑ ÎÁ ÓÔÒÁÎÉÃÙ." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs òÁÓËÒÙ×ÁÔØ ÐÒÉ ×Ù×ÏÄÅ ÓÉÍ×ÏÌÙ ÔÁÂÕÌÑÃÉÉ × ÐÒÏÂÅÌÙ." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab ÷ÙÒÁ×ÎÉ×ÁÔØ ÔÁÂÕÌÑÃÉÀ ÄÏÂÁ×ÌÑÑ × ÎÁÞÁÌÏ ÓÉÍ×ÏÌ ÔÁÂÕÌÑÃÉÉ." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=þéóìï ôÁÂÕÌÑÃÉÑ ÞÅÒÅÚ ÚÁÄÁÎÎÏÅ þéóìï ÚÎÁËÏ× (ÐÏ ÕÍÏÌÞÁÎÉÀ 8)." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive òÅËÕÒÓÉ×ÎÏ ÓÒÁ×ÎÉ×ÁÔØ ÐÏÄËÁÔÁÌÏÇÉ." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file ÷ÏÓÐÒÉÎÉÍÁÔØ ÎÅÓÕÝÅÓÔ×ÕÀÝÉÅ ÆÁÊÌÙ ËÁË ÐÕÓÔÙÅ." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file ÷ÏÓÐÒÉÎÉÍÁÔØ ÎÅÓÕÝÅÓÔ×ÕÀÝÉÅ ÐÅÒ×ÙÅ ÆÁÊÌÙ ËÁË " +"ÐÕÓÔÙÅ." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files óÏÏÂÝÁÔØ Ï ÏÄÉÎÁËÏ×ÙÈ ÆÁÊÌÁÈ." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "" +"-x ïâòáúåã --exclude=ïâòáúåã éÓËÌÀÞÉÔØ ÆÁÊÌÙ, ÞØÉ ÉÍÅÎÁ ÓÏ×ÐÁÄÁÀÔ Ó " +"ïâòáúãïí." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X æáêì --exclude-from=æáêì éÓËÌÀÞÉÔØ ÆÁÊÌÙ, ÞØÉ ÉÍÅÎÁ ÓÏ×ÐÁÄÁÀÔ Ó ËÁËÉÍ-" +"ÌÉÂÏ\n" +" ÏÂÒÁÚÃÏÍ ÉÚ ÚÁÐÉÓÁÎÎÙÈ × æáêìå." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "-S æáêì --starting-file=æáêì ðÒÉ ÓÒÁ×ÎÅÎÉÉ ËÁÔÁÌÏÇÏ× ÎÁÞÁÔØ Ó æáêìá." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=æáêì1 óÒÁ×ÎÉÔØ æáêì1 ÓÏ ×ÓÅÍÉ ÏÐÅÒÁÎÄÁÍÉ.\n" +" æáêì1 ÍÏÖÅÔ ÂÙÔØ ËÁÔÁÌÏÇÏÍ." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=æáêì2 óÒÁ×ÎÉÔØ ×ÓÅ ÏÐÅÒÁÎÄÙ Ó æáêìïí2. æáêì2 ÍÏÖÅÔ ÂÙÔØ " +"ËÁÔÁÌÏÇÏÍ." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=þéóìï ÷Ù×ÏÄÉÔØ þéóìï ÏÂÝÉÈ ÓÔÒÏË ÄÏ É ÐÏÓÌÅ ÒÁÚÌÉÞÁÀÝÉÈÓÑ." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal ðÙÔÁÔØÓÑ ÎÁÊÔÉ ÎÁÉÍÅÎØÛÉÊ ÎÁÂÏÒ ÉÚÍÅÎÅÎÉÊ." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files ðÒÅÄÐÏÌÁÇÁÔØ, ÞÔÏ ÆÁÊÌÙ ÂÏÌØÛÉÅ ÓÏ ÍÎÏÇÉÍÉ\n" +" ÒÁÚÂÒÏÓÁÎÎÙÍÉ ÍÅÌËÉÍÉ ÉÚÍÅÎÅÎÉÑÍÉ." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"æáêìù ÜÔÏ `æáêì1 æáêì2', ÉÌÉ `ëáôáìïç1 ëáôáìïç2', ÉÌÉ `ëáôáìïç æáêì...',\n" +"ÉÌÉ `æáêì... ëáôáìïç'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "åÓÌÉ ÚÁÄÁÎ --from-file ÉÌÉ --to-file, ÎÁ æáêìù ÎÅÔ ÏÇÒÁÎÉÞÅÎÉÊ." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "åÓÌÉ æáêì ÚÁÄÁÎ ËÁË `-', ÞÉÔÁÅÔ ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþ]... æáêìù\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "ÐÒÏÔÉ×ÏÒÅÞÉ×ÏÅ ÚÎÁÞÅÎÉÅ %s ÄÌÑ ËÌÀÞÁ `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "ÐÒÏÔÉ×ÏÒÅÞÉ×ÙÅ ËÌÀÞÉ ÚÁÄÁÎÉÑ ÓÔÉÌÑ ×Ù×ÏÄÁ" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "ôÏÌØËÏ × %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÒÁ×ÎÉÔØ `-' Ó ËÁÔÁÌÏÇÏÍ" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "-D option not supported with directories" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "ïÂÝÉÅ ÐÏÄËÁÔÁÌÏÇÉ: %s É %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "æÁÊÌ %s ÜÔÏ %s, ÔÏÇÄÁ ËÁË ÆÁÊÌ %s -- %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "æÁÊÌÙ %s É %s ÉÄÅÎÔÉÞÎÙ\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "ÎÅÓÏ×ÍÅÓÔÉÍÙÅ ËÌÀÞÉ" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "`-' ÚÁÄÁÎ ÄÌÑ ÂÏÌÅÅ ÏÄÎÏÇÏ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "ÞÔÅÎÉÅ ÎÅÕÓÐÅÛÎÏ" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed ÷Ù×ÏÄÉÔØ ÎÅ ÏÂßÅÄÉÎÅÎÎÙÅ ÉÚÍÅÎÅÎÉÑ × óôïòïí-æáêìå ÉÚ ÷áûåçï-æáêìá\n" +" × íïê-æáêì." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap ÷Ù×ÏÄÉÔØ ÎÅ ÏÂßÅÄÉÎÅÎÎÙÅ ÉÚÍÅÎÅÎÉÑ,\n" +" ÚÁËÌÀÞÁÑ ËÏÎÆÌÉËÔÎÙÅ ÍÅÓÔÁ × ÓËÏÂËÉ." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "" +"-A --show-all ÷Ù×ÏÄÉÔØ ×ÓÅ ÉÚÍÅÎÅÎÉÑ, ÚÁËÌÀÞÁÑ ËÏÎÆÌÉËÔÎÙÅ ÍÅÓÔÁ × ÓËÏÂËÉ." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only ÷Ù×ÏÄÉÔØ ÐÅÒÅËÒÙ×ÁÀÝÉÅÓÑ ÉÚÍÅÎÅÎÉÑ." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X ÷Ù×ÏÄÉÔØ ÐÅÒÅÓÅËÁÀÝÉÅÓÑ ÉÚÍÅÎÅÎÉÑ, ÚÁËÌÀÞÁÑ ÉÈ × ÓËÏÂËÉ." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only ÷Ù×ÏÄÉÔØ ÎÅ ÏÂßÅÄÉÎÅÎÎÙÅ ÎÅÐÅÒÅÓÅËÁÀÝÉÅÓÑ ÉÚÍÅÎÅÎÉÑ." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge ÷Ù×ÏÄÉÔØ ÏÂßÅÄÉÎÅÎÎÙÊ ÆÁÊÌ ×ÍÅÓÔÏ ÓÃÅÎÁÒÉÑ ed (ÐÏ ÕÍÏÌÞÁÎÉÀ -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L íåôëá --label=íåôëá éÓÐÏÌØÚÏ×ÁÔØ íåôëõ ×ÍÅÓÔÏ ÉÍÅÎÉ ÆÁÊÌÁ." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i äÏÂÁ×ÉÔØ ËÏÍÁÎÄÙ `w' É `q' × ËÏÎÅà ÓÃÅÎÁÒÉÑ ed." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" +"--diff-program=ðòïçòáííá éÓÐÏÌØÚÏ×ÁÔØ ÄÌÑ ÓÒÁ×ÎÉÑ ÆÁÊÌÏ× ÕËÁÚÁÎÎÕÀ " +"ðòïçòáííõ." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþ]... íïê-æáêì óôáòùê-æáêì ÷áû-æáêì\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "ðÏÓÔÒÏÞÎÏ ÓÒÁ×ÎÉ×ÁÅÔ ÔÒÉ ÆÁÊÌÁ." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"÷ÙÈÏÄÎÏÊ ÓÔÁÔÕÓ ÒÁ×ÅÎ 0 × ÓÌÕÞÁÅ ÕÓÐÅÈÁ, 1 × ÓÌÕÞÁÅ ËÏÎÆÌÉËÔÏ× É 2 ×\n" +"ÓÌÕÞÁÅ ÎÅÐÏÌÁÄÏË." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ: ÐÏ×ÒÅÖÄÅÎÎÙÊ ÆÏÒÍÁÔ ÂÌÏËÏ× ÚÁÐÌÁÔÙ" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: ÐÏÉÓË ÒÁÚÌÉÞÉÊ ÎÅÕÓÐÅÛÅÎ: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ: ÎÅ×ÅÒÎÙÊ ÔÉÐ ÚÁÐÌÁÔÙ × ÆÕÎËÃÉÉ `process_diff'" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "ÎÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ ÚÁÐÌÁÔÙ; ÎÅ×ÅÒÎÙÊ ÒÁÚÄÅÌÉÔÅÌØ ÉÚÍÅÎÅÎÉÑ" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "ÎÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ ÚÁÐÌÁÔÙ; ÎÅÐÏÌÎÁÑ ÐÏÓÌÅÄÎÑÑ ÓÔÒÏËÁ" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÐÕÓÔÉÔØ ×ÓÐÏÍÏÇÁÔÅÌØÎÕÀ ÐÒÏÇÒÁÍÍÕ `%s'" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "ÎÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ ÚÁÐÌÁÔÙ; ÎÅÐÒÁ×ÌØÎÙÅ ÐÅÒ×ÙÅ ÓÉÍ×ÏÌÙ ÓÔÒÏËÉ" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ: ÎÁ ×ÙÈÏÄ ÐÅÒÅÄÁÎ ÎÅ×ÅÒÎÙÊ ÔÉÐ ÚÁÐÌÁÔÙ" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "×ÈÏÄÎÏÊ ÆÁÊÌ ÕÍÅÎØÛÉÌÓÑ" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÒÁ×ÎÉÔØ ÉÍÅÎÁ ÆÁÊÌÏ× `%s' É `%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "-o æáêì --output=æáêì òÁÂÏÔÁÔØ ÉÎÔÅÒÁËÔÉ×ÎÏ, ÚÁÐÉÓÙ×ÁÑ ×Ù×ÏÄ × æáêì." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case éÇÎÏÒÉÒÏ×ÁÔØ ÒÅÇÉÓÔÒ ÂÕË×." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space éÇÎÏÒÉÒÏ×ÁÔØ ×ÓÅ ÐÒÏÂÅÌØÎÙÅ ÓÉÍ×ÏÌÙ." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w þéóìï --width=þéóìï ÷Ù×ÏÄÉÔØ ÍÁËÓÉÍÕÍ ÚÁÄÁÎÎÏÅ þéóìï ÚÎÁËÏ× × ÓÔÒÏËÅ.\n" +" (ÐÏ ÕÍÏÌÞÁÎÉÀ 130)" + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column ÷Ù×ÏÄÉÔØ ÔÏÌØËÏ ÌÅ×ÕÀ ËÏÌÏÎËÕ ÏÂÝÉÈ ÓÔÒÏË." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines îÅ ×Ù×ÏÄÉÔØ ÏÂÝÉÅ ÓÔÒÏËÉ." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files ðÒÅÄÐÏÌÁÇÁÔØ, ÞÔÏ ÆÁÊÌÙ ÂÏÌØÛÉÅ ÓÏ ÍÎÏÇÉÍÉ\n" +" ÒÁÚÂÒÏÓÁÎÎÙÍÉ ÍÅÌËÉÍÉ ÉÚÍÅÎÅÎÉÑÍÉ." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþ]... æáêì1 æáêì2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "éÎÔÅÒÁËÔÉ×ÎÏ ÓÌÉ×ÁÅÔ ÒÁÚÌÉÞÉÑ ÆÁÊÌÏ×." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÉÎÔÅÒÁËÔÉ×ÎÏ ÓÌÉ×ÁÔØ ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "ÏÂÁ ÓÒÁ×ÎÉ×ÁÅÍÙÈ ÆÁÊÌÁ -- ËÁÔÁÌÏÇÉ" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tòÅÄÁËÔÉÒÏ×ÁÔØ É ÉÓÐÏÌØÚÏ×ÁÔØ ÏÂÅ ×ÅÒÓÉÉ, ×ËÌÀÞÉ× × ËÁÖÄÕÀ ÚÁÇÏÌÏ×ÏË.\n" +"eb:\tòÅÄÁËÔÉÒÏ×ÁÔØ É ÉÓÐÏÌØÚÏ×ÁÔØ ÏÂÅ ×ÅÒÓÉÉ.\n" +"el:\tòÅÄÁËÔÉÒÏ×ÁÔØ É ÉÓÐÏÌØÚÏ×ÁÔØ ÌÅ×ÕÀ ×ÅÒÓÉÀ.\n" +"er:\tòÅÄÁËÔÉÒÏ×ÁÔØ É ÉÓÐÏÌØÚÏ×ÁÔØ ÐÒÁ×ÕÀ ×ÅÒÓÉÀ.\n" +"e:\téÓÐÏÌØÚÏ×ÁÔØ ÎÏ×ÕÀ ×ÅÒÓÉÀ.\n" +"l:\téÓÐÏÌØÚÏ×ÁÔØ ÌÅ×ÕÀ ×ÅÒÓÉÀ.\n" +"r:\téÓÐÏÌØÚÏ×ÁÔØ ÐÒÁ×ÕÀ ×ÅÒÓÉÀ.\n" +"s:\t÷ËÌÀÞÁÔØ ÏÂÝÉÅ ÓÔÒÏËÉ, ÎÅ ×ÙÄÁ×ÁÑ ÓÏÏÂÝÅÎÉÑ.\n" +"v:\t÷ËÌÀÞÁÔØ ÏÂÝÉÅ ÓÔÒÏËÉ, ×ÙÄÁ×ÁÑ ÓÏÏÂÝÅÎÉÅ.\n" +"q:\t÷ÙÊÔÉ.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÙÊ ËÌÀÞ -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "üÔÏ Ó×ÏÂÏÄÎÁÑ ÐÒÏÇÒÁÍÍÁ; ÐÏÄÒÏÂÎÏÓÔÉ Ï ÕÓÌÏ×ÉÑÈ ÒÁÓÐÒÏÓÔÒÁÎÅÎÉÑ\n" +#~ "ÓÍÏÔÒÉÔÅ × ÉÓÈÏÄÎÏÍ ÔÅËÓÔÅ. íÙ îå ÐÒÅÄÏÓÔÁ×ÌÑÅÍ ÇÁÒÁÎÔÉÊ; ÄÁÖÅ ÇÁÒÁÎÔÉÊ\n" +#~ "ëïííåòþåóëïê ðòéçïäîïóôé ÉÌÉ ðòéçïäîïóôé äìñ ëáëïê-ìéâï ãåìé.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "ï ÏÛÉÂËÁÈ ÓÏÏÂÝÁÊÔÅ <bug-gnu-utils@gnu.org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "ËÌÀÞ `-%ld' ÕÓÔÁÒÅÌ; ÉÓÐÏÌØÚÕÊÔÅ `-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "ËÌÀÞ `-%ld' ÕÓÔÁÒÅÌ; ÏÐÕÓËÁÊÔÅ ÅÇÏ" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "ÎÅ ÎÁÊÄÅÎÁ ×ÓÐÏÍÏÇÁÔÅÌØÎÁÑ ÐÒÏÇÒÁÍÍÁ `%s'" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "ÄÏÞÅÒÎÑÑ ÐÒÏÇÒÁÍÍÁ `%s' ÚÁ×ÅÒÛÉÌÁÓØ ÎÅÕÓÐÅÛÎÏ" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "" +#~ "×ÓÐÏÍÏÇÁÔÅÌØÎÁÑ ÐÒÏÇÒÁÍÍÁ `%s' ÚÁ×ÅÒÛÉÌÁÓØ ÎÅÕÓÐÅÛÎÏ (×ÙÈÏÄÎÏÊ ÓÔÁÔÕÓ %d) " diff --git a/po/sr.gmo b/po/sr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..2120074be6c59508e3858bd7469c7b17963d71fc GIT binary patch literal 26644 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 IH&|%?fBg<<YybcN literal 0 HcmV?d00001 diff --git a/po/sr.po b/po/sr.po new file mode 100644 index 0000000..7c68172 --- /dev/null +++ b/po/sr.po @@ -0,0 +1,1232 @@ +# Serbian translation of `diffutils'. +# Copyright (C) 2004 Free Software Foundation, Inc. +# This file is distributed under the same license as the `diffutils' package. +# Aleksandar Jelenak <jelenak@netlinkplus.net>, 2004. +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2004-04-15 21:46-0400\n" +"Last-Translator: Aleksandar Jelenak <jelenak@netlinkplus.net>\n" +"Language-Team: Serbian <gnu@prevod.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "грешка програма" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "стек препуњен" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Непозната системска грешка" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "обична празна датотека" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "обична датотека" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "директоријум" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "датотека блоковског уређаја" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "датотека знаковног уређаја" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "симболичка веза" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "сокет" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "ред порука" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "семафор" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "заједнички меморијски објекат" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "типски меморијски објекат" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "чудна датотека" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: опција „%s“ је двосмислена\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: опција „--%s“ не дозвољава аргумент\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: опција „%c%s“ не дозвољава аргумент\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: опција „%s“ захтева аргумент\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: непозната опција „--%s“\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: непозната опција „%c%s“\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: неважећа опција -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: опција захтева аргумент -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: опција „-W %s“ је двосмислена\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: опција „-W %s“ не дозвољава аргумент\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: опција „%s“ захтева аргумент\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Успешно" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Без поклапања" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Неисправан регуларни израз" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Неисправан колациони знак" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Неправилно име класе знакова" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Пратећа обрнута коса црта" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Неисправна повратна референца" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Неупарено [ или [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Неупарено ( или \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Неупарено \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Неисправан садржај у \\{\\}" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Неисправан крај опсега" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Меморија исцрпљена" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Неисправан претходећи регуларни израз" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Преран завршетак регуларног израза" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Регуларни израз исувише велики" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Неупарено ) или \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Без прошлог регуларног израза" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "меморија исцрпљена" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Непозната системска грешка" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "неисправна --bytes вредност „%s“" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "неисправна дужина видокруга „%s“" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "©" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Написао: %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Написали: %s и %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Написали: %s, %s и %s.\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 "" +"Написали: %s, %s, %s,\n" +"и %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Написали: %s, %s, %s,\n" +"%s, и %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Написали: %s, %s, %s,\n" +"%s, %s, и %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Написали: %s, %s, %s,\n" +"%s, %s, %s, и %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Написали: %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"и %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Написали: %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, и %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Написали: %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, и други.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Датотеке %s и %s различите\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Бинарне датотеке %s и %s различите\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Без новог реда на крају датотеке" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Торбјорн Гранлунд" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Покушајте `%s --help' за подробније објашњење." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "неисправна --ignore-initial вредност „%s“" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "опције -l и -s не иду заједно" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "записивање неуспешано" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "стандардни излаз" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Испиши бајтове који се разликују" + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i БРОЈ --ignore-initial=БРОЈ Изостави првих БРОЈ бајтова улаза." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i БРОЈ1:БРОЈ2 --ignore-initial=БРОЈ1:БРОЈ2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Изостави првих БРОЈ1 бајтова ДАТОТЕКА1 и првих БРОЈ2 бајтова ДАТОТЕКА2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose Испиши редни број и вредност бајтова који се разликују." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n БРОЈ --bytes=БРОЈ Пореди до највише БРОЈ бајтова." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent Без исписа; пријави само излазно стање." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Извести о верзији." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Испиши ово објашњење." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Употреба: %s [ОПЦИЈА]... ДАТОТЕКА1 [ДАТОТЕКА2 [БРОЈ1 [БРОЈ2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Поређење две датотеке бајт по бајт." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "БРОЈ1 и БРОЈ2 су бројеви бајтова за изостављање у свакој датотеци." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Уз БРОЈ могу ићи и следећи умножавајући суфикси:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576, GB 1,000,000,000, G " +"1,073,741,824,\n" +"итд. за T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Читати стандардни улаз ако ДАТОТЕКА недостаје или је „-“." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "Излазно стање је 0 ако су улази исти, 1 за различите, 2 за грешку." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "неисправна --bytes вредност „%s“" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "недостаје оператор после „%s“" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "вишак оператор „%s“" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s различити: бајт %s, ред %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s различити: бајт %s, ред %s је %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF на %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "неисправна дужина склопа „%s“" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "прелом страна није подржан на овом рачунару" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "исувише опција за ознаку датотека" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "неисправна дужина „%s“" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "сукобљене опције ширине" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "неисправна дужина видокруга „%s“" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "неисправна величина табулатора „%s“" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "сукобљене опције величине табулатора" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "„--from-file“ и „--to-file“ обоје наведени" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Поређење датотека ред по ред." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case Занемари словну величину у склопу датотека." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Занемари словну величину поређујући имена датотека." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Урачунај словну величину поређујући имена " +"датотека." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Занемари промене услед развијања табулатора." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Занемари промене због количине белине." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Занемари сву белину." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines Занемари промене услед празних редова." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I РИ --ignore-matching-lines=РИ Занемари промене чији редови поклапају РИ." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Оголи пратеће <CR> на улазу." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Читај и пиши податке у бинарном режиму." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Прихвати све датотеке као текст." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C БРЈ --context[=БРЈ] Испиши БРЈ (почетно 3) редова копираног " +"склопа.\n" +"-u -U БРЈ --unified[=БРЈ] Испиши БРЈ (почетно 3) редова обједињеног " +"склопа.\n" +" --label ОЗНАКА Користи ОЗНАКА уместо имена датотеке.\n" +" -p --show-c-function Прикажи Це функцију у којој је промена.\n" +" -F РИ --show-function-line=РИ Прикажи најскорији ред који РИ поклапа." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Пријави само да ли се датотеке разликују." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Излаз је „ed“ спис." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Излаз је обичан „diff“." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Излаз је RCS облик „diff-а“." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Испис у две колоне.\n" +" -W БРЈ --width=БРЈ Испис највише БРЈ (почетно 130) знакова.\n" +" --left-column Испис само леве колоне код заједничких редова.\n" +" --suppress-common-lines Не исписуј заједничке редове." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "-D ИМЕ --ifdef=ИМЕ Испиши „#ifdef ИМЕ“ разлике спојене датотеке." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=ГОБЛ Слично, али обликуј GTYPE улазне групе са ГОБЛ." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "--line-format=РОБЛ Слично, али обликуј све улазне редове са РОБЛ." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=РОБЛ Слично, али обликуј LTYPE улазне редове са РОБЛ." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE је `old', `new', или `unchanged'. GTYPE је LTYPE или `changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" ГОБЛ може садржати:\n" +" %< редове из ДАТОТЕКА1\n" +" %> редове из ДАТОТЕКА2\n" +" %= редове заједничке у ДАТОТЕКА1 и ДАТОТЕКА2\n" +" %[-][ШИРН][.[ТАЧН]]{doxX}СЛОВО printf-стил за СЛОВО\n" +" СЛОВО за нову групу, мала слова за стару групу:\n" +" F број првог реда\n" +" L број задњег реда\n" +" N број редова = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" РОБЛ може садржати:\n" +" %L садржај реда\n" +" %l садржај реда, изузев пратећих знакова за нови ред\n" +" %[-][ШИРН][.[ТАЧН]]{doxX}n printf-стил за улазни број реда" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Било ГОБЛ или РОБЛ могу садржати:\n" +" %% %\n" +" %c'З' само један знак „З“\n" +" %c'\\OOO' знак са окталним кодом OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Пропусти излаз кроз „pr“ за прелом." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Развиј табулаторе у размаке за излаз." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "-T --initial-tab Поравнај табулаторе додајући један табулатор." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=БРЈ Величина табулатора је БРЈ (почетно 8) колона." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Рекурзивно упореди све пронађене поддиректоријуме." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Недостајуће датотеке се узимају за празне." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Прве недостајуће датотеке се узимају за празне." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Пријави када су две датотеке исте." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x ОБР --exclude=ОБР Изузми датотеке које поклапа ОБР." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X ТЕКА --exclude-from=ТЕКА Изузми датотеке које поклапа било који образац " +"у ТЕКА." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S ТЕКА --starting-file=ТЕКА Почни од ТЕКА при поређењу директоријума." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=ТЕКА1 Упореди ТЕКА1 са свим оперантима. ТЕКА1 може бити " +"директоријум." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=ТЕКА2 Упореди све операнте са ТЕКА2. ТЕКА2 може бири директоријум." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "--horizon-lines=БРЈ Чувај БРЈ редова заједничког префикса и суфикса." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Потруди се да нађеш мањи скуп промена." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files За велике датотеке са много раштрканих малих промена." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"ДАТОТЕКЕ су „ТЕКА1 ТЕКА2“ или „ДИР1 ДИР2“ или „ДИР ТЕКА...“ или „ТЕКА... " +"ДИР“." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Нема ограничења за ДАТОТЕКЕ ако је „--from-file“ или „--to-file“ задато." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Ако је ДАТОТЕКА „-“, читај стандардни улаз." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Употреба: %s [ОПЦИЈА]... ДАТОТЕКЕ\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "сукоб због вредности „%s“ опције „%s“" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "сукобљене опције излазног стила" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Само у %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "не може поредити „-“ са директоријумом" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "опција „-D“ није подржана за директоријуме" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Заједнички поддиректоријуми: %s и %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Датотека „%s“ је „%s“ док је датотека „%s“ „%s“\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Датотеке „%s“ и „%s“ се подударају\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "несагласне опције" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "„-“ наведено за више од једне датотеке" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "неуспело читање" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Испиши неспојене промене између СТАРАТЕКА и ТВОЈАТЕКА у МОЈАТЕКА." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "-E --show-overlap Испиши неспојене промене, означи заградама сукобе." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Испиши све промене, означи заградама сукобе." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Испиши преклопљене промене." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Испиши и означи заградама преклопљене промене." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Испиши неспојене непреклопљене промене." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "-m --merge Испиши спојену датотеку уместо ed списа (почетно -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L ОЗНКА --label=ОЗНКА Користи ОЗНКА уместо имена датотеке." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Придодај „w“ и „q“ наредбе ed списима." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=ПРОГРАМ Користи ПРОГРАМ за поређење датотека." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Употреба: %s [ОПЦИЈА]... МОЈАТЕКА СТАРАТЕКА ТВОЈАТЕКА\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Поређење три датотеке ред по ред." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "Излазно стање је 0 за успех, 1 за сукобе, 2 за грешку." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "интерна грешка: зез у формату „diff“ блокова" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff неуспешан: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "интерна грешка: неисправна „diff“ врста у „process_diff“" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "неисправан diff облик; неважећи раздвојник измена" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "неисправан diff облик; непотпун задњи ред" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "помоћни програм „%s“ није могао бити покренут" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "неисправан diff облик; нетачни водећи знакови реда" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "унутрашња грешка: неисправан diff тип прослеђен излазу" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "улазна датотека се скупила" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "не може поредити имена датотека „%s“ и „%s“" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "-o ТЕКА --output=ТЕКА Интерактивни рад, излаз се шаље у ТЕКА." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Сматрај велика и мала слова истим." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Занемари све размаке." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w БРЈ --width=БРЈ Ширина излаза је највише БРЈ (почетно 130) колона." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Испиши само леву колону заједничких редова." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Не приказуј заједничке редове." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files За велике датотеке за много раштрканих малих измена." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Употреба: %s [ОПЦИЈА]... ДАТОТЕКА1 ДАТОТЕКА22\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Упоредно стапање разлика датотека" + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "не може интерактивно уклопити стандардни улаз" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "обе датотеке за поређење су директоријуми" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tУреди па користи обе верзије, свака украшена заглављем.\n" +"eb:\tУреди па користи обе верзије.\n" +"el:\tУреди па користи верзију лево.\n" +"er:\tУреди па користи верзију десно.\n" +"e:\tУређуј нову верзију.\n" +"l:\tКористи верзију лево.\n" +"r:\tКористи верзију десно.\n" +"s:\tУметни заједничке редове тихо.\n" +"v:\tУметни заједничке редове бучно.\n" +"q:\tЗаврши.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: неправилна опција -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Ово је слободан софтвер; видети изворни кôд за услове умножавања. Без " +#~ "ИКАКВЕ\n" +#~ "гаранције; чак ни за ТРЖИШНОСТ или ПРИКЛАДНОСТ ОДРЕЂЕНОЈ СВРСИ.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "" +#~ "Пријава грешака на адресу <bug-gnu-utils@gnu.org>.\n" +#~ "Поруке у вези превода слати на <gnu@prevod.org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "опција „-%ld“ је застарела; користити „-%c %ld“" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "опција „-%ld“ је застарела; изоставите је" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "помоћни програм „%s“ није нађен" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "помоћни програм „%s“ неуспешан" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "помоћни програм „%s“ неуспешан (излазно стање %d)" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the files named COPYING." +#~ msgstr "" +#~ "Овај програм долази БЕЗ ИКАКВЕ ГАРАНЦИЈЕ, у обиму дозвољеном законом.\n" +#~ "Можете расподељивати копије овог програма под условима ГНУ Опште јавне " +#~ "лиценце.\n" +#~ "За подробније објашњење ових ствари погледајте датотеку под називом " +#~ "„COPYING“." + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr "" +#~ "Написали Торбјорн Гранлунд (Torbjörn Granlund) и Дејвид Мекензи (David " +#~ "MacKenzie)" + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ "Написали Пол Егерт (Paul Eggert), Мајк Хертел (Mike Haertel), Дејвид Хејз " +#~ "(David Hayes), Ричард Сталман (Richard Stallman) и Лен Тауер (Len Tower)" + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "помоћни програм „%s“ није извршан" diff --git a/po/stamp-po b/po/stamp-po new file mode 100644 index 0000000..9788f70 --- /dev/null +++ b/po/stamp-po @@ -0,0 +1 @@ +timestamp diff --git a/po/sv.gmo b/po/sv.gmo new file mode 100644 index 0000000000000000000000000000000000000000..8ccd31062f62a7efe9196473133579f73ff591e1 GIT binary patch literal 21015 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 L&vhfVbAJC1SEmt# literal 0 HcmV?d00001 diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..8cf4f44 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,1216 @@ +# Swedish messages for diffutils. +# Copyright © 1996, 2001, 2002, 2004 Free Software Foundation, Inc. +# Göran Uddeborg <goeran@uddeborg.se>, 1996, 2001, 2002, 2004, 2006. +# +# $Revision: 1.30 $ +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2006-12-19 12:01+0100\n" +"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" +"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "programfel" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "stackspill" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Okänt systemfel" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "tom vanlig fil" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "vanlig fil" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "katalog" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "blockspecialfil" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "teckenspecialfil" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "symbolisk länk" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "uttag (socket)" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "meddelandekö" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semafor" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "delat minnes-objekt" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "typat minnes-objekt" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "konstig fil" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: flaggan \"%s\" är tvetydig\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: flaggan \"--%s\" tar inget argument\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: flaggan \"%c%s\" tar inget argument\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: flaggan \"%s\" behöver ett argument\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: okänd flagga \"--%s\"\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: okänd flagga \"%c%s\"\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ogiltig flagga -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: flaggan behöver ett argument -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: flaggan \"-W %s\" är tvetydig\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: flaggan \"-W %s\" tar inget argument\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: flaggan \"%s\" behöver ett argument\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Lyckades" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Ingen match" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Ogiltigt reguljäruttryck" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Ogiltigt sorteringstecken" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Ogiltigt namn på teckenklass" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Avslutande omvänt snedstreck" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Ogiltig bakåtreferens" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Oparad [ eller [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Oparad ( eller \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Oparad \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Ogiltigt innehåll i \\{\\}" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Ogiltigt intervallslut" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Minnet slut" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Föregående reguljäruttryck ogiltigt" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Förtida slut på reguljäruttryck" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "För stort reguljäruttryck" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Oparad ) eller \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Inget föregående reguljäruttryck" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "minnet slut" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Okänt systemfel" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "ogiltigt --bytes-värde \"%s\"" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "ogiltig horisontlängd \"%s\"" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Skrivet av %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Skrivet av %s och %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Skrivet av %s, %s och %s.\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 "" +"Skrivet av %s, %s, %s\n" +"och %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Skrivet av %s, %s, %s,\n" +"%s och %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Skrivet av %s, %s, %s,\n" +"%s, %s och %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Skrivet av %s, %s, %s,\n" +"%s, %s, %s och %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Skrivet av %s, %s, %s,\n" +"%s, %s, %s, %s\n" +"och %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Skrivet av %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s och %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Skrivet av %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s med flera.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Filerna %s och %s skiljer\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Filerna %s och %s skiljer\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Ingen nyrad vid filslut" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjörn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Försök med \"%s --help\" för mer information." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "ogiltigt --ignore-initial-värde \"%s\"" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "flaggorna -l och -s är motstridiga" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "skrivning misslyckades" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "standard ut" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Skriv ut byte som skiljer." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i HOPP --ignore-initial=HOPP Hoppa över de HOPP första byten i indata." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i HOPP1:HOPP2 --ignore-initial=HOPP1:HOPP2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "" +" Hoppa över de HOPP1 första byten i FIL1 och de HOPP2 första byten i FIL2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose Skriv ut bytenummer och värde för alla skiljande byte." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n GRÄNS --bytes=GRÄNS Jämför högst GRÄNS byte." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent Skriv inget; ge endast en slutstatus." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Visa versionsinformation." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Visa detta hjälpmeddelande." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Användning: %s [FLAGGA]... FIL1 [FIL2 [HOPP1 [HOPP2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Jämför två filer byte för byte." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "HOPP1 och HOPP2 är antalet byte att hoppa över i varje fil." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"HOPP-värden kan följas av följande multiplikativa suffix:\n" +"kB 1000, K 1024, MB 1 000 000, M 1 048 576\n" +"GB 1 000 000 000, G 1 073 741 824, och så vidare för T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Om FIL är \"-\" eller utelämnats, läs standard in." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "Slutsstatus är 0 om indata är lika, 1 om olika, 2 vid problem." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "ogiltigt --bytes-värde \"%s\"" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "saknad operand efter \"%s\"" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "extra operand \"%s\"" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s skiljer: byte %s, rad %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s skiljer: byte %s, rad %s är %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: EOF i %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "ogiltig omgivningslängd \"%s\"" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "sidvisning stödjs ej på denna värd" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "för många etikettflaggor" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "ogiltig bredd \"%s\"" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "konflikt mellan breddflaggor" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "ogiltig horisontlängd \"%s\"" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "ogiltigt tabulatorsteg \"%s\"" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "konflikt mellan tabulatorflaggor" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "både --from-file och --to-file angavs" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Jämför filer rad för rad." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case Bortse från skiftläge i filinnehåll." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "--ignore-file-name-case Bortse från skiftläge när filnamn jämförs." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Ta hänsyn till skiftläge när filnamn jämförs." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Ignorera ändringar på grund av " +"tabulatorexpansion." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Bortse från ändringar i antalet blanka." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Ignorera alla blanktecken." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B --ignore-blank-lines Ignorera ändringar i form av enbart blanka rader." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RU --ignore-matching-lines=RU Ignorera ändringar vars rader matchar RU." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Tag bort avslutande vagnreturer i indata." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Läs och skriv data binärt." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Betrakta alla filer som text." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C ANT --context[=ANT] Skriv ut ANT (normalt 3) rader kopierad " +"omgivning.\n" +"-u -U ANT --unified[=ANT] Skriv ut ANT (normalt 3) rader sammanslagen\n" +" omgivning.\n" +" --label ETIKETT Använd ETIKETT istället för filnamn.\n" +" -p --show-c-function Visa vilken C-funktion varje ändring finns i.\n" +" -F RU --show-function-line=RU Visa den senaste raden som matchar RU." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Skriv ut endast huruvida filer skiljer sig." + +# Finns det någon bättre översättning av "script" än "program"? +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Skriv ut ett ed-program." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Skriv ut en normal diff." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Skriv ut skillnader i RCS-format." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Skriv ut i två kolumner.\n" +" -W ANT --width=ANT Skriv ut högst ANT (130 om inget anges) kolumner.\n" +" --left-column Skriv ut endast vänstra kolumnen av gemensamma rader.\n" +" --suppress-common-lines Skriv inte ut gemensamma rader." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D NAMN --ifdef=NAMN Skriv ut sammanslagen fil med skillnader inom " +"\"#ifdef NAMN\"." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "--GTYP-group-format=GFMT Dito, men formatera GTYP ingrupper med GFMT." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "--line-format=RFMT Dito, men formatera alla inrader med RFMT." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "--RTYP-line-format=RFMT Dito, men formatera RTYP inrader med RFMT." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" RTYP är \"old\", \"new\" eller \"unchanged\". GTYP är RTYP eller \"changed" +"\"." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT kan innehålla:\n" +" %< rader från FIL1\n" +" %> rader från FIL2\n" +" %= gemensamma rader i FIL1 och FIL2\n" +" %[-][BREDD][.[PREC]]{doxX}BOKSTAV printf-lik spec. för BOKSTAV\n" +" BOKSTÄVER är enligt följande för ny grupp, gemen för gammal grupp:\n" +" F första radnumret\n" +" L sista radnumret\n" +" N antal rader = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" RFMT kan innehålla:\n" +" %L radinnehåll\n" +" %l radinnehåll exklusive avslutande nyrad\n" +" %[-][BREDD][.[PREC]]{doxX}n printf-stil spec. för inradnummer" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Både GFMT eller RFMT kan innehålla:\n" +" %% %\n" +" %c'C' det ensamma tecknet C\n" +" %c'\\OOO' tecknet med oktalkod OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Skicka utdata till \"pr\" för paginering." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Expandera tabulatorer till blanksteg." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Justera tabulatorer genom att skjuta in en tabulator " +"först." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=N Tabulatorstopp var N:e (normalt var 8:e) utskriftskolumn." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Jämför underkataloger rekursivt." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Betrakta saknade filer som tomma." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "--unidirectional-new-file Behandla saknade förstafiler som tomma." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Rapportera om två filer är lika." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x MNS --exclude=MNS Ta inte med filer som matchar MNS." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FIL --exclude-from=FIL Ta inte med filer med namn som matchar mönstren " +"i FIL." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "-S FIL --starting-file=FIL Börja med FIL när kataloger jämförs." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FIL1 Jämför FIL1 medd alla operander. FIL1 kan vara en " +"katalog." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FIL2 Jämför alla operander med FIL2. FIL2 kan vara en katalog." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=ANT Spara ANT rader av det gemensamma prefixet och suffixet." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Arbeta hårt för att hitta en mindre mängd av ändringar." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "--speed-large-files Antag stora filer och små spridda ändringar." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"FILER är \"FIL1 FIL2\" eller \"KAT1 KAT2\" eller \"KAT FIL...\" eller " +"\"FIL... KAT\"." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Om --from-file eller --to-file är angivet finns det inga begränsningar\n" +"på FILER." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Om en FIL är \"-\", läs standard in." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Användning: %s [FLAGGA]... FILER\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "motstridigt %s-flaggsvärde \"%s\"" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "motstridig utmatningsstilsflagga" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Endast i %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "kan inte jämföra \"-\" med en katalog" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "-D flaggan stödjs ej för kataloger" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Lika underkataloger: %s och %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Fil %s är en %s medan fil %s är en %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Filerna %s och %s är lika\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "oförenliga flaggor" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "\"-\" angivet för mer än en infil" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "läsning misslyckades" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Skriv ut separata ändringar från GAMMALFIL till DINFIL i MINFIL." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Skriv ut ändringar separat med markeringar runt " +"konflikter." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Skriv ut alla ändringar med markering runt konflikter." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Skriv ut överlappande ändringar." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Skriv ut ändringar separat, markerade." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Skriv ut ej överlappande ändringar separat." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Skriv ut sammanslagen fil istället för ed-program (normalt -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L ETIKETT --label=ETIKETT Använd ETIKETT istället för filnamn." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Lägg till \"w\"- och \"q\"-kommandon till ed-program." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=PROGRAM Använd PROGRAM för att jämföra filer." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Användning: %s [FLAGGA]... MINFIL GAMMALFIL DINFIL\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Jämför tre filer rad för rad." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "Slutstatus är 0 om allt bra, 1 vid konflikt, 2 vid problem." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "internt fel: trasigt format i diff-block" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff misslyckades: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "internt fel: ogiltig diff-typ i process_diff" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "ogiltigt diff-format; ogiltig ändringsseparator" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "ogiltigt diff-format; ofullständig sista rad" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "underprogram \"%s\" kunde inte startas" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "ogiltigt diff-format; felaktiga starttecken på rad" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "internt fel: ogiltig diff-typ utskickad" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "infilen krympte" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "kan inte jämföra filnamnen \"%s\" och \"%s\"" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "-o FIL --output=FIL Kör interaktivt, med utdata till FIL." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Betrakta versaler och gemena som lika." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Ignorera alla blanktecken." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w ANT --width=ANT Skriv ut högst ANT (130 om inget anges) " +"utskriftskolumner." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "" +"-l --left-column Skriv ut endast vänstra kolumnen av gemensamma rader." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Skriv inte ut gemensamma rader." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "-H --speed-large-files Antag stora filer och små spridda ändringar." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Användning: %s [FLAGGA]... FIL1 FIL2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Sammanslagning sida-vid-sida av filskillnader." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "kan inte slå samman standard in interaktivt" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "båda filerna som skall jämföras är kataloger" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tRedigera och använd sedan båda versioner, dekorerade med huvuden.\n" +"eb:\tRedigera och använd sedan båda versioner.\n" +"el:\tRedigera och använd sedan vänstra versionen.\n" +"er:\tRedigera och använd sedan högra versionen.\n" +"e:\tRedigera en ny version.\n" +"l:\tAnvänd vänstra versionen.\n" +"r:\tAnvänd högra versionen.\n" +"s:\tInkludera tyst gemensamma rader.\n" +"v:\tInkludera och tillkännage gemensamma rader.\n" +"q:\tAvsluta.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: otillåten flagga -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Detta är fri programvara, se källkoden för kopieringsvillkor. Det finns " +#~ "INGEN\n" +#~ "garanti, även underförstådd garanti vid KÖP eller LÄMPLIGHET FÖR NÅGOT\n" +#~ "SPECIELLT ÄNDAMÅL.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "" +#~ "Rapportera fel till <bug-gnu-utils@gnu.org>.\n" +#~ "Rapportera synpunkter på översättningen till <sv@li.org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "flaggan \"-%ld\" är föråldrad; använd \"-%c %ld\"" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "flaggan \"-%ld\" är föråldrad; använd den inte" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "underprogram \"%s\" hittades inte" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "underprogram \"%s\" misslyckades" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "underprogram \"%s\" misslyckades (slutstatus %d)" diff --git a/po/tr.gmo b/po/tr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..3f253b274ac01a814ee656777c23f49999320946 GIT binary patch literal 23364 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 literal 0 HcmV?d00001 diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..b7caef0 --- /dev/null +++ b/po/tr.po @@ -0,0 +1,1278 @@ +# translation of diffutils-2.8.7.tr.po to Turkish +# Diffutils Turkish translation +# Copyright (C) 2001, 2005 Free Software Foundation, Inc. +# Deniz Akkus Kanca <deniz@arayan.com>, 2001. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2005-03-14 04:19+0200\n" +"Last-Translator: Deniz Akkus Kanca <deniz@arayan.com>\n" +"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "yazılım hatası" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "yığıt taşması" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Bilinmeyen sistem hatası" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "normal boş dosya" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "normal dosya" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "dizin" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "blok özel dosyası" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "karakter özel dosyası" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "sembolik bağ" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "soket" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "ileti kuyruğu" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semafor" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "ortak bellek nesnesi" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "türlenmiş bellek nesnesi" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "dosya garip" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: `%s' seçeneği belirsiz\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: `--%s' seçeneği argümansız kullanılır\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: seçenek `%c%s' argümansız kullanılır\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: `%s' seçeneği bir argümanla kullanılır\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: `--%s' seçeneği bilinmiyor\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: `%c%s' seçeneği bilinmiyor\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: geçersiz seçenek -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: seçenek bir argümanla kullanılır -- %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: `-W %s' seçeneği belirsiz\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: `-W %s' seçeneği argümansız kullanılır\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: `%s' seçeneği bir argümanla kullanılır\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Başarılı" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Eşleme yok" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Düzenli ifade geçersiz" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Harmanlama karakteri geçersiz" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Karakter sınıf ismi geçersiz" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Ä°zleyen ters kesme" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Geriye başvuru geçersiz" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "[ ya da [^ eşleşmiyor" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "( ya da \\( eşleşmiyor" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "\\{ eşleşmiyor" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "\\{\\} içeriği geçersiz" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Kapsam sonu geçersiz" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Bellek tükendi" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Önceki düzenli ifade geçersiz" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Düzenli ifadenin sonu eksik kalmış" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Düzenli ifade çok büyük" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr ") ya da \\) eşleşmiyor" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Daha önce düzenli ifade yok" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "bellek tükendi" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Bilinmeyen sistem hatası" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "geçersiz --bytes değeri `%s'" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "geçersiz ufuk uzunluğu `%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +# TRANSLATORS: %s denotes an author name. +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "%s tarafından yazılmıştır.\n" + +# TRANSLATORS: Each %s denotes an author name. +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "%s ve %s tarafından yazılmıştır.\n" + +# TRANSLATORS: Each %s denotes an author name. +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "%s, %s ve %s tarafından yazılmıştır.\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. +#. 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 "" +"%s, %s, %s, ve\n" +"%s tarafından yazılmıştır.\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. +#. 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 "" +"%s, %s, %s,\n" +"%s ve %s tarafından yazılmıştır.\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. +#. 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 "" +"%s, %s, %s,\n" +"%s, %s ve %s\n" +"tarafından yazılmıştır.\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. +#. 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 "" +"%s, %s, %s, \n" +"%s, %s, %s ve\n" +"%s tarafından yazılmıştır.\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. +#. 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 "" +"%s, %s, %s,\n" +"%s, %s, %s,\n" +"%s ve %s tarafından yazılmıştır.\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. +#. 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 "" +"%s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s ve %s tarafından yazılmıştır.\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. +#. 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 "" +"%s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s ve başkaları\n" +"tarafından yazılmıştır.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "%s ve %s dosyaları birbirinden farklı\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "%s ve %s dosyaları birbirinden farklı\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Dosya sonunda yenisatır yok." + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Daha fazla bilgi için `%s --help' komutunu kullanın." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "geçersiz -- ilk değer `%s' yoksayılmış" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "-l ve -s seçenekleri beraber kullanılamaz" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "yazma başarısız oldu" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "standart çıktı" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Bayt farklarını çıktılar." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i ATLA --ignore-initial=ATLA Girdinin ilk ATLA baytını atlar." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i ATLA1:ATLA2 --ignore-initial=ATLA1:ATLA2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr " DOSYA1'in ilk ATLA1 baytını ve DOSYA2'nin ilk ATLA2 baytını atlar." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose Bütün farklı baytların numaralarını ve değerlerini gösterir." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LÄ°MÄ°T --bytes=LÄ°MÄ°T En fazla LÄ°MÄ°T baytı karşılaştırır." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "" +"-s --quiet --silent Hiç bir şey çıktılamaz, yalnızca çıkış durumunu " +"bildirir." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Sürüm bilgisini gösterir." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Bu yardımı gösterir." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Kullanım: %s [SEÇENEK]... DOSYA1 [DOSYA2 [ATLA1 [ATLA2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Ä°ki dosyayı bayt bayt karşılaştırır." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "ATLA1 ve ATLA2 her dosyada atlanacak bayt sayısını gösterir." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"ATLA değerleri aşağıdaki çarpanlarla sonlanabilir:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, ve T, P, E, Z, Y için devam eder." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Eğer DOSYA `-' ise veya yoksa, standart girdi okunur." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "Girdiler aynı ise çıkış durumu 0, farklı ise 1, sorun var ise 2 olur." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "geçersiz --bytes değeri `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "`%s'den sonra işlenen eksik" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "fazla işlenen `%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s farklı: bayt %s, satır %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s farklı: bayt %s, satır %s: %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: %s'da EOF (dosyasonu)\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "`%s' içerik uzunluğu geçersiz" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "sayfalama bu makina üzerinde desteklenmiyor" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "çok fazla dosya etiket seçeneği" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "geçersiz genişlik `%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "çelişkili genişlik seçenekleri" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "geçersiz ufuk uzunluğu `%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "geçersiz genişlik `%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "çelişkili genişlik seçenekleri" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "hem --from-file hem de --to-file belirtilmiş" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Dosyaları satır satır karşılaştırır." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "" +"-i --ignore-case Dosya içeriğinde büyük/küçük harf farklarını yoksayar." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case Dosya isimlerinde büyük/küçük harf farklarını " +"yoksayar." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case Dosya isimlerinde büyük/küçük harf farkı gözetir." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Sekmelerin açılmasından doğan farkları yoksayar." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "" +"-b --ignore-space-change Boşluk miktarındaki değişiklikleri yoksayar." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Bütün boşlukları yoksayar." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "" +"-B --ignore-blank-lines Satırları boş olan değişiklikleri dikkate almaz." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I DÜZÄ°F --ignore-matching-lines=DÜZÄ°F Satırları DÜZÄ°F kalıbına uyan\n" +" farkları yok sayar." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Girdiden en sonda sarkan satır başını soyar." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Datayı ikilik kipte yazar ve okur." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Bütün dosyaları metin imişcesine işler." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C SAYI --context[=SAYI] SAYI kadar bağlam satırı kopyalar (öntanımlı " +"3)\n" +"-u -U SAYI --unified[=SAYI] SAYI kadar birleşmiş bağlam satırı kopyalar\n" +" (öntanımlı 3)\n" +" --label ETÄ°KET Dosya adı yerine ETÄ°KET'i kullanır.\n" +" -p --show-c-function Her farkın hangi C işlevi içinde olduğunu " +"gösterir.\n" +" -F DÜZÄ°F --show-function-line=DÜZÄ°F DÜZÄ°F düzenli ifade kalıbına uygun " +"olan\n" +" en son satırı gösterir." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Yalnızca dosyaların farklı olup olmadığını gösterir." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Bir ed betiği çıktılar." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Normal bir diff çıktılar." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs RCS biçeminde diff çıktılar." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Ä°ki sütun halinde çıktı verir.\n" +" -w SAYI --width=SAYI Satır başına en fazla SAYI kadar karakter çıktılar\n" +" (öntanımlı 130).\n" +" --left-column Ortak satırlarda yalnız sol sütunu gösterir.\n" +" --suppress-common-lines Ortak satırları göstermez." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D Ä°SÄ°M --ifdef=Ä°SÄ°M #ifdef Ä°SÄ°M farklarını gösteren harmanlanmış\n" +" dosya çıktılar." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTÜR-group-format=GBÇ Benzer, fakat GTÜR biçeminde girdi grupları\n" +" GBÇ ile biçemlendirilir." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=LBÇ Benzer, fakat bütün girdi satırları LBÇ ile " +"biçemlendirilir." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTÜR-line-format=LBÇ Benzer, fakat LTÜR girdi satırları \n" +" LBÇ ile biçemlendirilir." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTÜR, `old' (eski), `new' (yeni) veya `unchanged' (değişmemiş) olabilir. \n" +" GTÜR, LTÜR veya `changed' (değişmiş) olabilir." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GBÇ aşağıdakileri içerebilir:\n" +" %< DOSYA1'den satırlar\n" +" %> DOSYA2'den satırlar\n" +" %= DOSYA1 ve DOSYA2'de ortak olan satırlar\n" +" %[-][GENİŞLÄ°K][.[KESÄ°NLÄ°K]]{doxX}HARF HARF için printf tarzı biçem\n" +" HARF'ler yeni grup için aşağıdaki gibi, eski grup için ise\n" +" küçük harf olurlar:\n" +" F ilk satır numarası\n" +" L son satır numarası\n" +" N satır sayısı = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LBÇ aşağıdakileri içerebilir:\n" +" %L satırın içeriği\n" +" %l sonlayan yenisatır karakteri hariç, satırın içeriği\n" +" %[-][GENİŞLÄ°K][.[KESÄ°NLÄ°K]]{doxX}n girdi satır sayısı için printf\n" +" tarzı biçem" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" GBÇ veya LBÇ aşağıdakileri içerebilir:\n" +" %% %\n" +" %c'C' tekli karakter C\n" +" %c'\\OOO' Sekizlik kodu OOO olan karakter" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Çıktıyı `pr' komutundan geçirerek sayfalar." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Çıktıda sekmeleri boşluk haline getirir." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Başlarına bir sekme ilave ederek sekmelerin " +"hizalanmasını\n" +" sağlar." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=SAYI Sekmeler SAYI sütun genişliğine (öntanımlı 8) ayarlanır." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "" +"-r --recursive Çevrimli olarak bulunan bütün alt dizinleri karşılaştırır." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Var olmayan dosyaları boş varsayar." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "--unidirectional-new-file Var olmayan birinci dosyayı boş varsayar." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "" +"-s --report-identical-files iki dosyanın birbirinin aynısı olup " +"olmadığını\n" +" bildirir." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x KALIP --exclude=KALIP KALIP'a uyan dosyaları işleme dahil etmez." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X DOSYA --exclude-from=DOSYA DOSYA'da bulunan kalıplara uyan dosyaları\n" +" işlem dışı tutar." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S DOSYA --starting-file=DOSYA Dizinleri karşılaştırırken DOSYA'dan başlar." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=DOSYA1 DOSYA1'i bütün işlenenlerle karşılaştırır. DOSYA1 dizin\n" +" olabilir." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=DOSYA2 Bütün işlenenleri DOSYA2 ile karşılaştırı. DOSYA2 dizin\n" +" olabilir." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "--horizon-lines=SAYI ortak ilkek ve soneklerin SAYI satırını tutar." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Daha küçük bir fark kümesi bulmaya çalışır." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Büyük dosyalar ve çok sayıda dağınık küçük \n" +" farklar olduğunu farzeder." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"DOSYAlar: `DOSYA1 DOSYA2' veya `DÄ°ZÄ°N1 DÄ°ZÄ°N2' veya `DÄ°ZÄ°N DOSYA...' \n" +" veya `DOSYA...DÄ°ZÄ°N';" + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"eğer --from-file veya --to-file kullanılmışsa, DOSYAlar üzerinde \n" +"kısıtlama yoktur." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Eğer bir DOSYA `-' ise, standart girdi okunur." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Kullanım: %s [SEÇENEK]... DOSYAlar\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "çelişkili %s seçeneği değeri: `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "çelişkili çıktı tarz seçenekleri" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Yalnızca %s'da: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "`-', bir dizinle karşılaştırılamaz" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "-D seçenek dizinler için kullanılamaz." + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Ortak alt dizinler: %s ve %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "%s dosyası, bir %s, halbuki %s dosyası bir %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "%s ve %s dosyaları birbirinin aynı\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "uyumsuz seçenekler" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "`-' birden fazla girdi dosyası için belirtilmiş" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "okuma başarısız oldu" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed ESKÄ°DOSYA ile SÄ°ZÄ°NDOSYA arasındaki harmanlanmamış farkları\n" +" BENÄ°MDOSYA'ya çıktılar." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Harmanlanmamış değişiklikleri çıktılar, ihtilafları \n" +" köşeli parantez içinde gösterir." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "" +"-A --show-all Bütün değişiklikleri çıktılar, ihtilafları köşeli parantez\n" +" içine alır." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Birbiri ile örtüşen farkları gösterir." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "" +"-X Birbiriyle örtüşen farkları köşeli parantez içinde göstererek çıktılar." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "" +"-3 --easy-only Harmanlanmamış, tekrarlanmayan değişiklikleri çıktılar." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Ed betiği yerine harmanlanmış dosya çıktılar. (öntanımlı -A)" + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L ETÄ°KET --label=ETÄ°KET Dosya adı yerine ETÄ°KET'i kullanır." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Ed betiklerinin sonuna `w' ve `q' komutlarını ekler." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" +"--diff-program=YAZILIM Dosyaları karşılaştırmak için YAZILIM'ı kullanır." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Kullanım: %s [SEÇENEK]... BENÄ°MDOSYA ESKÄ°DOSYA SÄ°ZÄ°NDOSYA\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Üç dosyayı satır satır karşılaştırır." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"Eğer işleme başarılı ise çıkış durumu 0, çelişkiler var ise 1,\n" +"sorun var ise 2 olur." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "iç hata: diff blokları biçemlemesinde hata oluştu" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: diff başarısız oldu:" + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "iç hata: process_diff işlevi içinde geçersiz diff türü" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "geçersiz diff biçemi; geçersiz fark ayracı" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "geçersiz diff biçemi; tamamlanmamış son satır" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "alt yazılım `%s' çalıştırılamadı" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "geçersiz diff biçemi; geçersiz satır başı karakterleri" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "iç hata: çıktıya geçersiz diff türü geçirildi" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "girdi dosyası küçüldü" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "dosya isimleri `%s' ve `%s' karşılaştırılamıyor" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o DOSYA --output=DOSYA Interaktif olarak çalışır, çıktıyı DOSYA'ya\n" +" yönlendirir." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Büyük harf/küçük harf farkı gözetmez." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Bütün boşlukları yok sayar." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w SAYI --width=SAYI Satır başına en fazla SAYI kadar karakter çıktılar\n" +" (öntanımlı 130)." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Ortak satırları yalnızca sol sütunda çıktılar." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Ortak satırları göstermez." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Büyük dosyalar ve çok sayıda dağınık küçük \n" +" farklar olduğunu farzeder." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Kullanım: %s [SEÇENEK]... DOSYA1 DOSYA2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Dosya farklarının yanyana katıştırılması." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "interaktif olarak standart girdi harmanlanamaz" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "karşılaştırılacak her iki dosya da dizin" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tDüzenler, sonra iki tarafı da kullanır, bir başlıkla süsler.\n" +"eb:\tDüzenler, sonra iki tarafı da kullanır.\n" +"el:\tDüzenler, sonra sol tarafı kullanır.\n" +"er:\tDüzenler, sonra sağ tarafı kullanır.\n" +"e:\tYeni bir sürüm düzenler.\n" +"l:\tSol tarafı kullanır.\n" +"r:\tSağ tarafı kullanır.\n" +"s:\tOrtak satırları sessizce dahil eder.\n" +"v:\tOrtak satırları bilgi vererek dahil eder.\n" +"q:\tÇıkar.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: kuraldışı seçenek -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Bu, özgür yazılımdır; kaynak koduna bakarak kopyalama şartlarını\n" +#~ "görebilirsiniz. SATILABÄ°LÄ°RLİĞİ veya HERHANGÄ° BÄ°R AMACA UYGUNLUĞU için " +#~ "dahi\n" +#~ "GARANTÄ° YOKTUR.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "" +#~ "Yazılım hatalarını <bug-gnu-utils@gnu.org> adresine, \n" +#~ "çeviri hatalarını <gnu-tr@belgeler.org> adresine bildirin." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "`-%ld' seçeneği kullanımdan kalktı; `-%c %ld' kullanın" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "`-%ld' seçeneği kullanımdan kalktı; kullanmayın" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "alt yazılım `%s' bulunamadı" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "alt yazılım `%s' başarısız oldu" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "alt yazılım `%s' başarısız oldu (çıkış durumu %d)" diff --git a/po/uk.gmo b/po/uk.gmo new file mode 100644 index 0000000000000000000000000000000000000000..e97e617d8c54eaa4b43270dad935c1ddecac76b7 GIT binary patch literal 28317 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 F{|6tFilqPm literal 0 HcmV?d00001 diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..c0740e8 --- /dev/null +++ b/po/uk.po @@ -0,0 +1,1228 @@ +# Ukrainian translation to diffutils. +# Copyright (C) 2006 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils package. +# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2006. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2007-01-03 13:55+0300\n" +"Last-Translator: Maxim V. Dziumanenko <dziumanenko@gmail.com>\n" +"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "помилка програми" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "переповнення стеку" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Невідома системна помилка" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "звичайний порожній файл" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "звичайний файл" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "каталог" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "спеціальний файл з блочним доступом" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "спеціальний файл з символьним доступом" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "черга" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "символьне посилання" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "сокет" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "черга повідомлень" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "семафор" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "об'ект у спільній пам'яті" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "об'ект пам'яті з типами" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "дивний файл" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: неоднозначний параметр `%s'\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: параметр `--%s' має використовуватись без аргументу\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: параметр `%c%s' має використовуватись без аргументу\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: параметр `%s' має використовуватись з аргументом\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: невідомий параметр `--%s'\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: невідомий параметр `%c%s'\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: неправильний параметр -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: параметр %c має використовуватись з аргументом\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: неоднозначний параметр `-W %s'\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: параметр `-W %s' має використовуватись без аргументу\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: параметр `%s' має використовуватись з аргументом\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Успішно" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Немає відповідностей" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Неправильний регулярний вираз" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Некоректний символ для сортування" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Неправильна назва класу символу" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Зворотна коса риска стоїть останньою" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Неправильне посилання" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "Непарна [ чи [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "Непарна ( чи \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "Непарна \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Неправильний вміст \\{\\}" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Неправильна нижня межа" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Оперативну пам'ять вичерпано" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Неправильний попередній регулярний вираз" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Передчасний кінець регулярного виразу" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Регулярний вираз надто великий" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "Непарна ) чи \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Регулярний вираз не було вказано раніше" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "па'мять вичерпано" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "Невідома системна помилка" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "неприпустиме значення --bytes `%s'" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "неприпустима довжина горизонту `%s'" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Автор програми -- %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Автори програми -- %s та %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Автори програми -- %s, %s та %s.\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 "" +"Автори програми -- %s, %s, %s\n" +"та %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Автори програми -- %s, %s, %s,\n" +"%s та %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Автори програми -- %s, %s, %s,\n" +"%s, %s та %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Автори програми -- %s, %s, %s,\n" +"%s, %s, %s та %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Автори програми -- %s, %s, %s,\n" +"%s, %s, %s, %s\n" +"та %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Автори програми -- %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s та %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Автори програми -- %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s та інші.\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Файли %s та %s відрізняються\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Файли %s та %s відрізняються\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Наприкінці файлу немає нового рядка" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Спробуйте `%s --help' для отримання докладнішого опису." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "неприпустиме значення --ignore-initial `%s'" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "параметри -l та -s несумісні" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "запис невдалий" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "стандартний вивід" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes Виводити байти, що відрізняються." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "" +"-i Н --ignore-initial=Н ігнорувати розбіжності у перших Н байтах вводу." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i Н1:Н2 --ignore-initial=Н1:Н2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "Пропустити перші Н1 байт файлу ФАЙЛ1 та перші Н2 байт файлу ФАЙЛ2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose Виводити номери та значення усіх відмінних байтів." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n МЕЖА --bytes=МЕЖА Порівнювати не більше вказаної кількості байт." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent Не виводити, лише повернути значення статусу." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Вивести інформацію про версію та вийти." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Вивести цю довідку та вийти." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Використання: %s [ПАРАМЕТР]... ФАЙЛ1 [ФАЙЛ2 [Н1 [Н2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "Порівнює два файли по байтах." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "Н1 та Н2 - кількість байтів, які слід пропустити у кожному файлі." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"До значень Н можна приписувати один з наступних суфіксів множення:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, і так далі для T, P, E, Z, Y." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "" +"Якщо ФАЙЛ не вказаний чи вказаний як `-', читається стандартний потік вводу." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"Код завершення дорівнює 0, якщо вхідні файли ідентичні, 1 -- якщо\n" +"відрізняються, та 2 при виникненні помилок." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "неприпустиме значення --bytes `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "пропущено операнд після `%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "зайвий операнд `%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s відрізняються: байт %s, рядок %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s відрізняються: байт %s, рядок %s дорівнює %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: кінець файлу у %s\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "неприпустима довжина контексту `%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "розбиття на сторінки не підтримується на цій машині" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "надто багато параметрів, що вказують позначки файлів" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "неприпустима ширина `%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "суперечливі параметри визначення ширини" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "неприпустима довжина горизонту `%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "неприпустима ширина табуляції `%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "суперечливі параметри визначення ширини табуляції" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "необхідно вказати як --from-file, так і --to-file" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "Порівнює два файли по рядках." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case Ігнорувати регістр літер у вмісті файлів." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "--ignore-file-name-case Ігнорувати регістр літер у назвах файлів." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "--no-ignore-file-name-case Враховувати регістр літер у іменах файлів." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "" +"-E --ignore-tab-expansion Ігнорувати зміни, викликані розкриттям табуляції." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change Ігнорувати зміни кількості пробілів." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space Ігнорувати усі пробіли." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines Ігнорувати зміни кількості порожніх рядків." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I РВ --ignore-matching-lines=РВ Ігнорувати зміни, рядки яких повністю\n" +" відповідають вказаному регулярному виразу." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Видалити на виводі заключне переведення каретки." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Читати та записувати файли у двійковій формі." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Вважати усі файли текстовими." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C ЧИСЛО --context[=ЧИСЛО] Копіювати ЧИСЛО (типово 3) рядків " +"контексту.\n" +"-u -U ЧИСЛО --unified[=ЧИСЛО] Виводити ЧИСЛО (типово 3) рядків " +"об'єднаного контексту.\n" +" -L МІТКА --label МІТКА Використовувати МІТКУ замість імені файлу.\n" +" -p --show-c-function Виводити C-функцію, що містить зміну.\n" +" -F РВ --show-function-line=РВ Показувати останній рядок, що збігається\n" +" із заданим регулярним виразом." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Вивести лише, чи відрізняються файли." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Виводити сценарій ed." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Виводити у звичайному форматі diff." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Виводити у форматі RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side Виводити у дві колонки.\n" +" -W ЧИСЛО --width=ЧИСЛО Не більше ЧИСЛО знаків у рядку. (типово 130)\n" +" --left-column Виводити лише ліву колонку загальних рядків.\n" +" --suppress-common-lines Не виводити загальні рядки." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D НАЗВА --ifdef=НАЗВА Виводити dsff-блоки, що використовують конструкцію " +"`#ifdef НАЗВА'." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--ГТИП-group-format=ГФМТ Аналогічно, але форматувати вхідні групи типу " +"ГТИП\n" +" у відповідності до формату ГФМТ." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=СФМТ Аналогічно, але форматувати всі вхідні рядки з СФМТ." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--СТИП-group-format=СФМТ Аналогічно, але форматувати вхідні рядки типу " +"СТИП\n" +" у відповідно до формату СФМТ." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" СТИП може бути `old', `new', чи `unchanged', ГТИП - те ж саме або " +"`changed'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" ГФМТ може містити:\n" +" %< рядки з ФАЙЛУ1\n" +" %> рядки з ФАЙЛУ2\n" +" %= рядки, спільні для ФАЙЛА1 та ФАЙЛА2\n" +" %[-][ШИРИНА][.[ТОЧН]]{doxX}ЛІТЕРА формат для ЛІТЕРА у стилі printf\n" +" ЛІТКРА має наступні значення для нових груп, маленькі для старих:\n" +" F номер першого рядка\n" +" L номер останнього рядка\n" +" N кількість рядків = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" СФМТ може містити:\n" +" %L вміст рядка\n" +" %l вміст рядка, за винятком нових рядків наприкінці\n" +" %[-][ШИРИНА][.[ТОЧН]]{doxX}n формат номеру вхідного рядка у стилі printf" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" Обидва ГФМТ та СФМТ можуть містити:\n" +" %% %\n" +" %c'С' один символ С\n" +" %c'\\OOO' один символ з вісімковим кодом OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "" +"-l --paginate Направити вивід програми `pr' для розбиття на сторінки." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs Розкривати при виводі символи табуляції у пробіли." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Вирівнювати табуляцію додаючи на початок символ табуляції." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=ЧИСЛО Табуляція через вказане ЧИСЛО знаків (типово 8)." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive Рекурсивно порівнювати підкаталоги." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Вважати відсутні файли порожніми." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "--unidirectional-new-file Вважати відсутні перші файли порожніми." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files Сповіщати про однакові файли." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "" +"-x ЗРАЗОК --exclude=ЗРАЗОК Виключити файли, назви яких збігаються зі " +"ЗРАЗКОМ." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X ФАЙЛ --exclude-from=ФАЙЛ Виключити файли, назви яких збігаються з " +"якимось\n" +" із записаних у ФАЙЛІ." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S ФАЙЛ --starting-file=ФАЙЛ При порівнянні каталогів почати з ФАЙЛУ." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=ФАЙЛ1 Порівняти ФАЙЛ1 з усіма операндами. ФАЙЛ1 може бути " +"каталогом." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=ФАЙЛ2 Порівняти всі операнди з ФАЙЛОМ 2. ФАЙЛ2 може бути " +"каталогом." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "" +"--horizon-lines=ЧИСЛО Виводити ЧИСЛО спільних рядків, до та після відмінних." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Намагатись знайти найменший набір змін." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Вважати файли великими з багатьма розкиданими дрібними " +"змінами." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"ФАЙЛИ - це `ФАЙЛ1 ФАЙЛ2', чи `КАТАЛОГ1 КАТАЛОГ2', чи `КАТАЛОГ ФАЙЛ...',\n" +"чи `ФАЙЛ... КАТАЛОГ'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "Якщо вказано --from-file чи --to-file, на ФАЙЛИ обмежень немає." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Якщо ФАЙЛ вказаний як `-', читається стандартний потік вводу." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Використання: %s [КЛЮЧ]... ФАЙЛИ\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "суперечливі значення %s для ключа `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "суперечливі ключі визначення стилю виводу" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Лише у %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "неможливо порівняти `-' з каталогом" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "-D параметр не підтримується для каталогів" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "Спільні підкаталоги: %s та %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Файл %s це %s, тоді як файл %s -- %s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Файли %s та %s ідентичні\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "несумісні ключі" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "`-' вказано для більш ніж одного вхідного файлу" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "помилка читання" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Виводить необ'еднані зміни у СТАРОМУ-ФАЙЛІ з ВАШОГО-ФАЙЛУ у МІЙ-" +"ФАЙЛ." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Вивести необ'єднані зміни, беручи конфліктні місця у " +"дужки" + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all Виводити всі зміни, беручи конфліктні місця у дужки." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Виводити зміни, що перекриваються." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X Брати у дужки зміни, що перекриваються." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only Виводити не об'еднані зміни, що не перекриваються." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "-m --merge Виводити об'еднаний файл замість сценарію ed (типово -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L МІТКА --label=МІТКА Використовувати МІТКУ замість файлу." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Додати команди `w' и `q' в кінець сценарію ed." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" +"--diff-program=ПРОГРАМА Використовувати для порівняння вказану ПРОГРАМУ." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Використання: %s [КЛЮЧ]... МІЙ-ФАЙЛ СТАРИЙ-ФАЙЛ ВАШ-ФАЙЛ\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "Порівняння трьох файлів рядками." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"Код завершення дорівнює 0 при нормальному завершенні, 1 при конфліктах\n" +" та 2 при несправностях." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "внутрішня помилка: пошкоджений формат diff-блоків" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: помилка при пошуку відмінностей: " + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "" +"внутрішня помилка: неправильний тип diff-блоку у функції `process_diff'" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "неправильний формат diff-файлу; неправильний розділювач змін" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "неправильний формат diff-файлу; неповний останній рядок" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "не вдається запустити допоміжну програму `%s'" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "неправильний diff-формат; неправильні перші символи рядка" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "внутрішня помилка: на вхід подано неправильний тип diff-файлу" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "вхідний файл зменшився" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "неможливо порівняти назви файлів `%s' та `%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "-o ФАЙЛ --output=ФАЙЛ Інтерактивний режим із записом виводу у ФАЙЛ." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case Ігнорувати регістр літер." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space Ігнорувати усі типи пробілів." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w ЧИСЛО --width=ЧИСЛО Виводити не більше вказаного ЧИСЛА знаків у рядку.\n" +" (типово 130)" + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Виводити лише ліву колонку спільних рядків." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Не виводити спільні рядки." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Вважати файли великими з багатьма розкиданими\n" +" дрібними змінами." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Використання: %s [КЛЮЧ]... ФАЙЛ1 ФАЙЛ2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Інтерактивно об'єднує відмінності файлів." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "не можна інтерактивно об'єднувати стандартний потік вводу" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "обидва файли, що порівнюються є каталогами" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tРедагувати та використовувати обидві версії, кожна із заголовком.\n" +"eb:\tРедагувати та використовувати обидві версії.\n" +"el:\tРедагувати та використовувати ліву версію.\n" +"er:\tРедагувати та використовувати праву версію.\n" +"e:\tВикористовувати нову версію.\n" +"l:\tВикористовувати ліву версію.\n" +"r:\tВикористовувати праву версію.\n" +"s:\tВключати спільні рядки, без виводу повідомлень.\n" +"v:\tВключати спільні рядки, виводячи повідомлення.\n" +"q:\tВийти.\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: неприпустимий параметр -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "Це вільне програмне забезпечення; умови копіювання наведені в \n" +#~ "джерелах програми. Немає НІЯКИХ гарантій; навіть гарантії КОМЕРЦІЙНОЇ\n" +#~ "ЦІННОСТІ або ПРИДАТНОСТІ ДЛЯ КОНКРЕТНОЇ ЦІЛІ.\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "Про помилки повідомляйте <bug-gnu-utils@gnu.org>." + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "параметр `-%ld' застарів; використовуйте `-%c %ld'" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "параметр `-%ld' застарів; опускайте його" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "не знайдено допоміжну програму `%s'" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "допоміжна програма `%s' завершилась аварійно" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "допоміжна програма `%s' завершилась аварійно (код завершення %d) " diff --git a/po/vi.gmo b/po/vi.gmo new file mode 100644 index 0000000000000000000000000000000000000000..1e31ab039974785b67bef2c329a81aaa568d6c2d GIT binary patch literal 29317 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°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 literal 0 HcmV?d00001 diff --git a/po/vi.po b/po/vi.po new file mode 100644 index 0000000..d764252 --- /dev/null +++ b/po/vi.po @@ -0,0 +1,1240 @@ +# Vietnamese translation for Diff Utils. +# Copyright © 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the diffutils package. +# Clytie Siddall <clytie@riverland.net.au>, 2005-2010. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.9\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2010-03-06 22:52+1030\n" +"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n" +"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: LocFactoryEditor 1.8\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "lỗi chÆ°Æ¡ng trình" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "đống bị tràn" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "Không biết lỗi hệ thống" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "tập tin trống thường" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "tập tin thường" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "thÆ° mục" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "tập tin đặc biệt khối" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "tập tin đặc biệt ký tá»±" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo (vào trước, xuất trước)" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "liên kết mềm" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "ổ cắm" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "hàng đời thông điệp" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "cờ hiệu" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "đối tượng bộ nhớ dùng chung" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "đốí tượng bộ nhớ đánh loại" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "tập tin lạ" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s: tùy chọn « %s » vẫn mÆ¡ hồ\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, c-format +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" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, c-format +msgid "%s: option '%c%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:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: tùy chọn « %s » yêu cầu một đối số\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: không nhận ra tùy chọn « --%s »\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: không nhận ra tùy chọn « %c%s »\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: tùy chọn không hợp lệ -- « %c »\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: tùy chọn yêu cầu một đối số -- « %c »\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: tùy chọn « -W %s » vẫn mÆ¡ hồ\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: tùy chọn « -W %s » không cho phép đối số\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: tùy chọn « %s » yêu cầu một đối số\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "« " + +#: lib/quotearg.c:273 +msgid "'" +msgstr " »" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "Thành công" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "Không khớp với gì" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "Biểu thức chính quy không hợp lệ" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "Ký tá»± đối chiếu không hợp lệ" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "Tên hạng ký tá»± không hợp lệ" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "Có xuyệc ngược theo sau" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "Tham chiếu trở lại không hợp lệ" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "ChÆ°a khớp [ hay [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "ChÆ°a khớp ( hay \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "ChÆ°a khớp \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "Nội dụng \\{\\} không hợp lệ" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "Kết thức miền không hợp lệ" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "Hết bộ nhớ ảo rồi" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "Biểu thức chính quy đi trước không hợp lệ" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "Kết thức quá sớm của biểu thức chính quy" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "Biểu thức chính quy quá lớn" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "ChÆ°a khớp ) hay \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "Không có biểu thức chính quy đi trước" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "hết bộ nhớ rồi" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "đầu vào tiêu chuẩn" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "đầu ra tiêu chuẩn" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "đầu lỗi tiêu chuẩn" + +#: lib/xfreopen.c:38 +msgid "unknown stream" +msgstr "không nhận ra luồng" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "lỗi mở lại %s với chế độ %s" + +#: lib/xstrtol-error.c:63 +#, c-format +msgid "invalid %s%s argument `%s'" +msgstr "sai đặt đối số %s%s « %s »" + +#: lib/xstrtol-error.c:68 +#, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "gặp hậu tố sai trong đối số %s%s « %s »" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "đối số %s%s « %s » quá lớn" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "Gói đóng bởi %s (%s)\n" + +#: lib/version-etc.c:77 +#, c-format +msgid "Packaged by %s\n" +msgstr "Gói đóng bởi %s\n" + +#. 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:84 +msgid "(C)" +msgstr "©" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" +"\n" +"Giấy phép GPL pb3+ : Giấy phép Công cộng GNU phiên bản 3 hay sau\n" +"<http://gnu.org/licenses/gpl.html>\n" +"Đây là phần mềm tá»± do : bạn có quyền sá»­a đổi và phát hành lại nó.\n" +"KHÔNG CÓ BẢO HÀNH GÌ CẢ, với điều khiển được pháp luật cho phép.\n" +"\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "Tác giả: %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "Tác giả: %s và %s.\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "Tác giả: %s, %s, và %s.\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 "" +"Tác giả: %s, %s, %s,\n" +"và %s.\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Tác giả: %s, %s, %s,\n" +"%s, và %s.\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"Tác gia: %s, %s, %s,\n" +"%s, %s, và %s.\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"Tác giả: %s, %s, %s,\n" +"%s, %s, %s, và %s.\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"Tác giả: %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"và %s.\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"Tác giả: %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, và %s.\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"Tác giả: %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, và người khác.\n" + +#. 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 "" +"\n" +"Thông báo lỗi nào cho : %s\n" +"Thông báo lỗi dịch nào cho Clytie <clytie@riverland.net.au>\n" + +#: lib/version-etc.c:247 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "Thông báo lỗi %s nào cho : %s\n" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Trang chủ %s: <%s>\n" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "Trang chủ %s: <http://www.gnu.org/software/%s/>\n" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Trợ giúp chung về cách sá»­ dụng phần mềm GNU: <http://www.gnu.org/gethelp/>\n" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "Hai tập tin %s và %s là khác nhau.\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "Hai tập tin %s và %s là khác nhau.\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "Không có ký tá»± dòng mới tại kêt thức tập tin." + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +# Tên họ +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "David MacKenzie" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Hãy thá»­ lệnh `%s --help' để xem thông tin thêm." + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "tùy chọn --ignore-initial value (bỏ qua giá trị đầu) `%s' không hợp lệ" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "hai tùy chọn -l và -s không tÆ°Æ¡ng thích với nhau" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "không ghi được" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "thiết bị xuất chuẩn" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes _In_ ra những byte khác nhau." + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i SKIP --ignore-initial=SỐ _Bỏ qua_ số byte _đầu_ của dữ liệu gõ." + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SỐ1:SỐ2 --ignore-initial=SỐ1:SỐ2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr " Bỏ qua SỐ1 byte đầu của tập tin 1 và SỐ2 byte đầu của tập tin 2." + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "" +"-l --verbose Xuất số byte và giá trị của tất cả byte khác nhau (_chi " +"tiết_)." + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n SỐ --bytes=SỐ So sánh tối đa SỐ byte (_giới hạn_)." + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "" +"-s --quiet --silent Không xuất gì; chỉ hiển thị tính trạng thoát thôi " +"(_im_)." + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version Xuất thông tin _phiên bản_." + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help Xuất _trợ giúp_ này." + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "Cách sá»­ dụng: %s [TÙY_CHỌN]... TẬP_TIN1 [TẬP_TIN2 [SỐ1 [SỐ2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "So sánh mỗi byte trong hai tập tin." + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "Bỏ qua SỐ1 byte trong tập tin 1, và SỐ2 byte trong tập tin 2." + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"Có thể sá»­ dụng một của những chữ theo đây (số nhân lên) sau SỐ byte để bỏ " +"qua:\n" +"kB\tx 1000\t\t\t\tK\tx 1024\n" +"MB \tx 1,000,000\t\t\tM \tx 1,048,576,\n" +"GB \tx 1,000,000,000\t\tG \tx 1,073,741,824\n" +"\t\t\tcÅ©ng T, P, E, Z, Y v.v." + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "Nếu tập tin là `-', hay thiếu tập tin thì đọc thiết bị go chuẩn." + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "" +"Tính trạng thoát là số 0 nếu hai điều gõ là bằng nhau, số 1 nếu là khác nhau " +"và số 2 nếu gặp lỗi." + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "giá trị --bytes `%s' không hợp lệ" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "thiếu tác tá»­ sau `%s'" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "tác tá»­ thêm `%s'" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s có khác nhau: byte %s, dòng %s\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s có khác nhau: byte %s, dòng %s là %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp: gặp kết thức tập tin tại %s\n" + +# Tên họ +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "Paul Eggert" + +# Tên họ +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "Mike Haertel" + +# Tên họ +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "David Hayes" + +# Tên họ +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "Richard Stallman" + +# Tên họ +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "Len Tower" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "độ dài ngữ cảnh không hợp lệ `%s'" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "máy chủ này không hỗ trợ dàn trang" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "quá nhiều tùy chọn nhãn tập tin" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "độ rộng không hợp lệ `%s'" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "nhiều tùy chọn độ rộng xung đột với nhau" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "độ dài tầm nhận thức (số dòng phụ tổ chung) không hợp lệ `%s'" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "cỡ ký tá»± tab không hợp lệ `%s'" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "nhiều tùy chọn cỡ ký tá»± tab xung đột với nhau" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "" +"ghi rõ cả hai tùy chọn --from-file (từ tập tin) và --to-file (vào tập tin) " +"đều" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "So sánh mỗi dòng trong nhiều tập tin." + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case _Bỏ qua chữ hoa/thường_ trong nội bộ tập tin." + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "" +"--ignore-file-name-case _Bỏ qua chữ hoa/thường_ khi so sánh nhiều _tên tập " +"tin_." + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "" +"--no-ignore-file-name-case So sánh chữ hoa/thường trong _tên tập tin_ " +"(_không bỏ qua_)." + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "-E --ignore-tab-expansion _Bỏ qua_ mọi thay đổi do _mở rộng tab_." + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change _Bỏ qua số dấu cách thay đổi_." + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space _Bỏ qua tất cả dấu cách_." + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines _Bỏ qua dòng trống_ thay đổi." + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "-I RE --ignore-matching-lines=RE _Bỏ qua mọi dòng khớp_ với RE." + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr Tước ký tá»± về đầu dòng (cr) theo sau khi gõ." + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary Đọc và ghi dữ liệu bằng chế độ nhị phân." + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text Xá»­ lý mọi tập tin là _văn bản_." + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +" -c -C SỐ \t--context[=SỐ] \tXuất SỐ dòng của _ngữ cảnh_ đã sao chép.\n" +" -u -U SỐ \t--unified[=SỐ] \tXuất SỐ dòng của ngữ cảnh _đã thống nhất_.\n" +" \t\t\t--label NHÃN \tSá»­ dụng NHÃN thay thế tên tập tin.\n" +" -p \t\t--show-c-function \t_Hiển thị chức năng C_ của mỗi thay đổi.\n" +" -F RE --show-function-line=RE \n" +"\t\t\t_Hiển thị dòng_ gần đây nhất mà khớp với RE (_chức năng_)." + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief Xuất chỉ nếu những tập tin khác với nhau (_ngắn_)." + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed Xuất tập lệnh loại ed." + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal Xuất dữ liệu khác biệt bình thường." + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs Xuất dữ liệu khác biệt dạng RCS." + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +" -y \t--side-by-side \tXuất hai cột (_cạnh nhau_).\n" +" -W SỐ \t--width=SỐ \t\tXuất tối đa SỐ cột dữ liệu đã in ra (mặc định là " +"130)\n" +"\t\t\t\t\t\t\t\t(_độ rộng_).\n" +" \t\t--left-column \tXuất chỉ _cột bên trái_ của dòng chung.\n" +" \t\t--suppress-common-lines \tKhông xuất dòng chung." + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "" +"-D TÊN --ifdef=TÊN Xuất tập tin đã hợp nhất để hiển thị dữ liệu khác biệt " +"`#ifdef TÊN'." + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--LOẠIN-group-format=DẠNGN TÆ°Æ¡ng tá»±, nhÆ°ng mà _định dạng nhóm_ gõ LOẠIN với " +"DẠNGN." + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "" +"--line-format=DẠNGD TÆ°Æ¡ng tá»±, nhÆ°ng mà _định dạng_ mọi _dòng_ gõ với DẠNGD." + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LOẠID-line-format=DẠNGD TÆ°Æ¡ng tá»±, nhÆ°ng mà _định dạng dòng_ gõ LOẠID vớI " +"DẠNGD." + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LOẠID là `cÅ©', `mới', hay `chÆ°a thay đổi'. LOẠIN là LOẠID hay `thay đổi " +"rồi'." + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +"DẠNGN có thể chứa:\n" +" %< dòng từ TẬP_TIN1\n" +" %> dòng từ TẬP_TIN2\n" +" %= dòng chung của TẬP_TIN1 và TẬP_TIN2\n" +" %[-][ĐỘ_RỘNG][.[PREC]]{doxX}CHá»® dữ liệu ghi rõ dạng printf cho chữ ấy\n" +" CHá»® thường cho nhóm củ, CHá»® nhÆ° theo cho nhóm mới:\n" +" F số dòng đầu\n" +" L số dòng cuối cùng\n" +" N tổng số dòng = L-F+1\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +"DẠNGD có thể chứa:\n" +" %L nội dung của dòng\n" +" %l nội dung của dòng, loại trừ ký tá»± dòng mới nào đi theo\n" +" %[-][ĐỘ_RỘNG][.[PREC]]{doxX}n dữ liệu ghi rõ dạng printf cho số dong gõ" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +"Hoặc DẠNGN hoặc DẠNGD có thể chứa:\n" +" %% %\n" +" %c'C' ký tá»± riêng lẻ C\n" +" %c'\\OOO' ký tá»± có mã bát phân OOO" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate Gởi dữ liệu xuất qua `pr' để _dàn trang_ nó." + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "" +"-t --expand-tabs _Mộ trộng ký tá»± tab_ ra ký tá»± cách riêng trong dữ liệu " +"xuất." + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "" +"-T --initial-tab Sắp xếp tất cả ký tá»± tab bằng cách thêm một _tab vào " +"trước hết_." + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "" +"--tabsize=SỐ Có điểm đừng tab sau mỗi SỐ cột đã in ra (mặc định là 8)." + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" +"--suppress-blank-empty Thu hồi khoảng cách hay cột tab đằng trước dòng kết " +"xuất trắng." + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive So sánh _đệ qui_ mọi thÆ° mục con đã tìm thấy." + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file Xá»­ lý tập tin vắng mặt là trống (_tập tin mới_)." + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "" +"--unidirectional-new-file Xá»­ lý tập tin đầu mà vắng mặt là trống (_tập tin " +"mới đơn hướng_)." + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "" +"-s --report-identical-files _Thông báo_ khi có hai _tập tin bằng nhau_." + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x MẪU --exclude=MẪU _Loại trừ_ mọi tập tin khớp với MẪU ấy." + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X TẬP_TIN --exclude-from=TẬP_TIN Loại trừ mọi tập tin khớp với bất cứ mẫu " +"nào trong TẬP TIN ấy." + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "" +"-S TẬP_TIN --starting-file=TẬP_TIN _Bắt đầu_ với _TẬP TIN_ khi so sánh " +"nhiều thÆ° mục." + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=TẬP_TIN1 So TẬP TIN 1 với tất cả tác tá»­. TẬP TIN 1 có thể là " +"thÆ° mục (_từ tập tin_)." + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=TẬP_TIN2 So tất cả tác tá»­ với TẬP TIN 2. TẬP TIN 2 có thể là thÆ° " +"mục (_vào tập tin_)." + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "--horizon-lines=SỐ Giữ SỐ _dòng_ của phụ tổ chung (_tầm nhận thức_)." + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal Cố tìm một bộ thay đổi nhỏ hÆ¡n (_tối thiểu_)." + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "" +"--speed-large-files Giả định _tập tin lớn_ và nhiều thay đổi nhỏ rải rác " +"(_tốc độ_)." + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"(NHIỀU) TẬP TIN là `TẬP_TIN1 TẬP_TIN2' hay `THƯ_MỤC1 THƯ_MỤC2' hay `THƯ_MỤC " +"TẬP_TIN...' hay `TẬP_TIN... THƯ_MỤC'." + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "" +"Nếu đưa ra tùy chọn --from-file (từ tập tin) hay --to-file (vào tập tin) thì " +"không có giới hạn TẬP TIN." + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "Nếu TẬP TIN là `-' thì đọc thiết bị gõ chuẩn." + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "Cách sá»­ dụng: %s [TÙY_CHỌN]... TẬP_TIN\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "tùy chọn %s xung đột, gia trị `%s'" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "nhiều tùy chọn kiểu dạng xuất xung đột với nhau" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "Chỉ trong %s: %s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "không so được `-' với thÆ° mục" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "không hỗ trÆ¡ tùy chọn -D với thÆ° mục" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "ThÆ° mục con chung: %s và %s\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "Tập tin %s là một %s còn tập tin %s là một %s.\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "Hai tập tin %s và %s là bằng nhau.\n" + +# Tên họ +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "Randy Smith" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "nhiều tùy chọn không tÆ°Æ¡ng thích với nhau" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "ghi rõ `-' cho hÆ¡n một tập tin gõ" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "không đọc được" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed Xuất những thay đổi chÆ°a hợp nhất từ TẬP_TIN_CŨ thành TẬP_TIN_KHÁC " +"vào TẬP_TIN_TÔI." + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "" +"-E --show-overlap Xuất nhiều thay đổi chÆ°a hợp nhất, cÅ©ng đặt mọi điều " +"xung đột trong ngoặc đơn (_chồng lấp_)." + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "" +"-A --show-all Xuất _tất cả_ thay đổi, cÅ©ng đặt mọi điều xung đột trong " +"ngoặc đơn (_hiển thị_)." + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only Xuất _chỉ_ những thay đổi _chồng lấp_." + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "" +"-X Xuất những thay đổi chồng lấp, cÅ©ng đặt mọi điều xung đột trong ngoặc " +"đơn." + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "" +"-3 --easy-only Xuất _chỉ_ những thay đổi chÆ°a hợp nhất và không chồng lấp " +"(_dễ_)." + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "" +"-m --merge Xuất tập tin đã _hợp nhất_ thay thế tập lệnh loại ed (mặc định " +"là -A)." + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L NHÃN --label=NHÃN Sá»­ dụng NHÃN thay thế tên tập tin." + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i Phụ thêm hai lệnh `w' và `q' vào mọi tập lệnh loại ed." + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "" +"--diff-program=CHƯƠNG_TRÌNH Sá»­ dụng _chÆ°Æ¡ng trình_ ấy để so sánh nhiều tập " +"tin (_khác biệt_)." + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "Cách sá»­ dụng: %s [TÙY_CHỌN]... TẬP_TIN_TÔI TẬP_TIN_CŨ TẬP_TIN_KHÁC\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "So sánh mỗi dong trong ba tâp tin." + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "" +"Tính trạng thoát là số 0 nếu thành công, số 1 nếu có xung đột nào và số 2 " +"nếu gặp lỗi." + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "gặp lỗi nội bộ: không định dạng khối khác biệt được." + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s: không khác biệt được:" + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "" +"gặp lỗi nội bộ: loại khác biệt không hợp lệ trong process_diff (xá»­ lý khac " +"biệt)" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "" +"khuôn dạng khác biệt không hợp lệ; điều ngăn cách thay đổi không hợp lê" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "khuôn dang khác biệt không hợp lệ; chÆ°a xong dòng cuối cùng" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "không gọi được chÆ°Æ¡ng trình phụ `%s" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "khuôn dạng khác biệt không hợp lệ; ký tá»± đi trước dòng là không đúng" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "gặp lỗi nội bộ: gởi xuất loại khác biệt không hợp lệ" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "tập tin gõ là co lại" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "không so sánh được hai tập tin `%s' và `%s'" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "%s: vòng lặp thÆ° mục đệ quy" + +# Tên họ +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "Thomas Lord" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "" +"-o TẬP_TIN --output=TẬP_TIN Thá»±c hiện một cách tÆ°Æ¡ng tác thì _xuất dữ " +"liệu_ vào TÂP TIN." + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case _Bỏ qua chữ hoa/thường_: là tÆ°Æ¡ng tá»±." + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space _Bỏ qua tất cả dấu cách_." + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "" +"-w SỐ --width=SỐ Xuất tối đa SỐ cột đã in ra (mặc định là 130) (_độ rộng_)." + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column Xuất chỉ _cột bên trái_ của mọi dòng chung." + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines Không xuất _dòng chung_ nào (_thu hồi_)." + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "" +"-H --speed-large-files Giả định _tập tin lớn_ và nhiều thay đổi nhỏ rải " +"rác (_tốc độ_)." + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "Cách sÆ° dụng: %s [TÙY_CHỌN]... TẬP_TIN1 TẬP_TIN2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "Hợp nhất thay đổi tập tin một cách cạnh nhau." + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "không hợp nhất được dữ liệu gõ chuẩn một cách tÆ°Æ¡ng tác" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "cả hai tập tin để so sánh là thÆ° mục" + +#: src/sdiff.c:868 +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\tHiệu chinh rồi sá»­ dụng cả hai phiên bản; nhãn mỗi điều với dòng đầu.\n" +"eb:\tHiệu chinh rồi sá»­ dụng cả hai phiên bản.\n" +"el hay e1:\tHiệu chinh rồi sá»­ dụng phiên bản bên trái.\n" +"er hay e2:\tHiệu chinh rồi sá»­ dụng phiên bản bên phải.\n" +"e:\tHủy cả hai phiên bản rồi hiệu chỉnh một phiên bản mới.\n" +"l hay 1:\tSá»­ dụng phiên bản bên trái..\n" +"r hay 2:\tSá»­ dụng phiên bản bên phải.\n" +"s:\tBao gồm dòng chung nhÆ°ng không xuất chi tiết.\n" +"v:\tBao gồm dòng chung một cách chi tiết.\n" +"q:\tThoát.\n" diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo new file mode 100644 index 0000000000000000000000000000000000000000..5f901e85fcc83d7d366f52051786aaf301d075da GIT binary patch literal 21848 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 Rj$He>usW(F#~OB4{|_064+a1L literal 0 HcmV?d00001 diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..e1e5f58 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,1194 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2004 Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# Yingxin Zhou <eerd003@dlut.edu.cn>, 2004. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2004-06-05 11:37+0800\n" +"Last-Translator: Yingxin Zhou <eerd003@dlut.edu.cn>\n" +"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "程序错误" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "栈溢出" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "未知的系统错误" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "常规空文件" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "常规文件" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "目录" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "特殊块文件" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "特殊字符文件" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "符号链接" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "套接字" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "消息队列" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "信号量" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "共享内存目标" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "分类内存目标" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "奇怪的文件" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s:选项 “%s” 意义不明确\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s:选项 “--%s” 不接受参数\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s:选项 “%c%s” 不接受参数\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s:选项 “%s” 需要一个参数\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s:选项 “--%s” 无法识别\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s:选项 “%c%s” 无法识别\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s:无效选项 -- %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s:选项需要一个参数 --%c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s:选项 “-W %s” 意义不明确\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s:选项 “-W %s” 不允许带参数\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s:选项 “%s” 需要一个参数\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "成功" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "没有匹配" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "无效的正则表达式" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "无效的对照字符" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "无效的字符种类名称" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "末端有多余的反斜号" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "无效的向后引用" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "没有匹配的 [ 或 [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "没有匹配的 ( 或 \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "没有匹配的 \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "\\{\\} 中的内容无效" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "范围末端字符无效" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "内存耗尽" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "无效的前导正则表达式" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "正则表达式过旱结束" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "正则表达式过大" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "没有匹配的 ) 或 \\" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "之前没有任何正则表达式" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "内存耗尽" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "未知的系统错误" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "无效的 --bytes 值 `%s'" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "无效的水平长度 “%s”" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "作者 %s。\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "作者 %s 和 %s。\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "作者 %s,%s,和 %s。\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 "" +"作者 %s,%s,%s,\n" +"和 %s。\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"作者 %s,%s,%s,\n" +"%s 和 %s。\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"作者 %s,%s,%s,\n" +"%s,%s 和 %s。\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"作者 %s,%s,%s,\n" +"%s,%s,%s,和 %s。\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"作者 %s,%s,%s,\n" +"%s,%s,%s,%s,\n" +"和 %s。\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"作者 %s,%s,%s,\n" +"%s,%s,%s,%s,\n" +"%s,和 %s。\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"作者 %s,%s,%s,\n" +"%s,%s,%s,%s,\n" +"%s,%s,和其他人。\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "文件 %s 和 %s 不同\n" + +#: src/analyze.c:462 +#, fuzzy, c-format +msgid "Binary files %s and %s differ\n" +msgstr "文件 %s 和 %s 不同\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "文件尾没有 newline 字符" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "请尝试 “%s --help”,以获得更多信息。" + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "无效的 --ignore-initial 值 “%s”" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "选项 -l 和 -s 不兼容" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "写入失败" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "标准输出" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes 打印出内容相异的字节。" + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i SKIP --ignore-initial=SKIP 略过输入内容的前 SKIP 字节。" + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr "略过文件 FILE1 的前 SKIP1 个字节和文件 FILE2 前 SKIP2 个字节。" + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose 输出所有相异字节的字节数和内容。" + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LIMIT --bytes=LIMIT 最多比较 LIMIT 个字节。" + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent 无任何输出;只产生退出状态。" + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version 输出版本信息。" + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help 输入本帮助。" + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "用法: %s [选项]... 文件1 [文件2 [SKIP1 [SKIP2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "逐字节比较两个文件。" + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "SKIP1 和 SKIP2分别是每个文件要略过的字节数。" + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"SKIP 值可以加上以下的单位:\n" +"kB=1000、K=1024、MB=1000000、M=1048576、GB=1000000000、G=1073741824,\n" +"还有 T、P、E、Z、Y 如此类推。" + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "如果文件是 “-” 或没给出,则从标准输入读入内容。" + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "如果输入相同,则退出状态为 0;1 表示输入不同;2 表示有错误产生。" + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "无效的 --bytes 值 `%s'" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "操作数 “%s” 后缺少参数" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "多余的操作数 “%s”" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s 不同:第 %s 字节,第 %s 行\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%1$s %2$s 不同:第 %4$s 行,第 %3$s 字节为 %5$3o %6$s %7$3o %8$s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp:%s 已结束\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "无效的上下文行数 “%s”" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "此系统不支持分页" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "过多的文件标号选项" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "无效的宽度 “%s”" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "宽度选项冲突" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "无效的水平长度 “%s”" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "无效的制表符宽度 “%s”" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "的制表符选项冲突" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "同时指定了选项 --from-file 和 --to-file" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "逐行比较文件。" + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case 忽略文件内容大小写的区别。" + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "--ignore-file-name-case 忽略文件名大小写的区别。" + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "--no-ignore-file-name-case 不忽略文件名大小写的区别。" + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "-E --ignore-tab-expansion 忽略由制表符宽度造成的差异。" + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change 忽略由空格数不同造成的差异。" + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space 忽略所有空格。" + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines 忽略任何因空行而造成的差异。" + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RE --ignore-matching-lines=RE 如果某行匹配正则表达式,则忽略由该行造成的" +"差异。" + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr 去除输入内容每行末端的 carriage return 字符。" + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "以二进制方式读写数据。" + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text 所有文件都以文本方式处理。" + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C 行数 --context[=行数] 显示指定<行数>(默认 3 行)copied 格式的上下文\n" +"-u -U 行数 --unified[=行数] 显示指定<行数>(默认 3 行)unified 格式的上下" +"文\n" +" --label 标识 使用<标识>代替文件名称。\n" +" -p --show-c-function 显示和每个差异有关的 C 函数名称。\n" +" -F RE --show-function-line=RE 显示最接近而符合<正则表示式>的一行。" + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief 只显示文件是否不同。" + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed 以 ed script 方式输出。" + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal 以正常的 diff 方式输出。" + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs 以 RCS diff 格式输出。" + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side 以两列并排的方式显示。\n" +" -W NUM --width=NUM 每行显示最多 NUM (默认 130) 个字符。\n" +" --left-column 当有两行相同时只显示左边的一行。\n" +" --suppress-common-lines 当有两行相同时不会显示。" + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "-D NAME --ifdef=NAME 输出的内容以‘#ifdef NAME’方式标明差异。" + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT 效果类似,但会以 GFMT 格式处理 GTYPE 输入的行。" + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "--line-format=LFMT 效果类似,但会以 LFMT 格式处理每一行资料。" + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT 效果类似,但会以 LFMT 格式处理 LTYPE 输入的行。" + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE 可以是‘old’、‘new’或‘unchanged’。GTYPE 可以是 LTYPE 的选择\n" +" 或是‘changed’。" + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT 可包括:\n" +" %< 该组中每行属于 FILE1 的差异\n" +" %> 该组中每行属于 FILE2 的差异\n" +" %= 该组中同时在 FILE1 和 FILE2 出现的每一行\n" +" %[-][宽度][.[精确度]]{doxX}字符 以 printf 格式表示该<字符>代表的内容\n" +" 大写<字符>表示属于新的文件,小写表示属于旧的文件。<字符>的意义如下:\n" +" F 行组中第一行的行号\n" +" L 行组中最后一行的行号\n" +" N 行数 ( =L-F+1 )\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT 可包括:\n" +" %L 该行的内容\n" +" %l 该行的内容,但不包括结束的 newline 字符\n" +" %[-][宽度][.[精确度]]{doxX}n 以 printf 格式表示的输入资料行号" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" GFMT 或 LFMT 可包括:\n" +" %% %\n" +" %c'C' 字符 C\n" +" %c'\\OOO' 八进制数字 OOO 所代表的字符" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate 将输出送至‘pr’指令来分页。" + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs 将输出中的 tab 转换成空格。" + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "-T --initial-tab 每行先加上 tab 字符,使 tab 字符可以对齐。" + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=NUM 定位字符 (tab) 的宽度,默认为 8 个空格宽。" + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive 连同所有子目录一起比较。" + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file 不存在的文件以空文件方式处理。" + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "--unidirectional-new-file 若第一文件案不存在,以空文件处理。" + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files 当两个一样时仍然显示结果。" + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x PAT --exclude=PAT 排除匹配 PAT 的文件。" + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "" +"-X FILE --exclude-from=FILE 排除所有匹配在 FILE 中列出的模式的文件。" + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "-S FILE --starting-file=FILE 当比较目录時,由 FILE 开始比较。" + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FILE1 将 FILE1 和操作数中的所有文件/目录作比较。FILE1 可以是目" +"录。" + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FILE2 将操作数中的所有文件/目录和 FILE2 作比较。FILE2 可以是目" +"录。" + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "--horizon-lines=NUM (此选项不做处理)" + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal 尽可能找出最小的差异。" + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "--speed-large-files 假设文件十分大而且其中含有许多微小的差异。" + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"FILES 的格式可以是‘FILE1 FILE2’、‘DIR1 DIR2’、‘DIR FILE...’或\n" +" ‘FILE... DIR’。" + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "如果使用 --from-file 或 --to-file 选项,FILES 的格式则不受限制。" + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "如果 FILE 是‘-’,则由标准输入读取内容。" + +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "用法:%s [选项]... FILES\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "互相冲突的 %s 选项,参数值为 “%s”" + +#: src/diff.c:976 +#, fuzzy, c-format +msgid "conflicting output style options" +msgstr "互相冲突的输出选项 %s ,参数值为“%s”" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "只在 %s 存在:%s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "“-” 无法与目录作比较" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "-D 选项不支持目录使用" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "%s 和 %s 有共同的子目录\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "文件 %s 是%s而文件 %s 是%s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "檔案 %s 和 %s 相同\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "不兼容的选项" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "输入文件 “-” 不可多於一个" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "读取时失败" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed 取出由 OLDFILE 至 YOURFILE 的更改部份,并输出可将此\n" +" 改变套用至 MYFILE 的 ed script。" + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "-E --show-overlap 输出未合并的更改部份,并括上互相冲突的地方。" + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all 输出所有要更改的部份,并括上互相冲突的地方。" + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only 只输出重叠的更改部份。" + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X 输出重叠的更改部份,并加上括号。" + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only 输出未合并而且不重叠的更改部份。" + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "-m --merge 显示合并后的文件而不是 ed script (默认加上 -A)。" + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L 标识 --label=标识 以<标识>代替文件名称。" + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i 在 ed script 中附加‘w’和‘q’指令。" + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=程序 用<程序>来比较文件。" + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "用法:%s [选项]... MYFILE OLDFILE YOURFILE\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "逐行比较三个文件。" + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "退出状态为 0 表示成功,1 表示冲突,2 表示有错误发生。" + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "内部错误:diff 区段的格式出错" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s:diff 失败:" + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "内部错误:process_diff 中的 diff 类型无效" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "无效的 diff 格式;表示内容改变的分隔字符串无效" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "无效的 diff 格式;最后一行不完整" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "无法调用辅助程序 “%s”" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "无效的 diff 格式;错误的行前导字符" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "内部错误:传递给输出的 diff 类型无效" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "输入文件缩小" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "无法比较文件名 “%s“ 和 ”%s“" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "-o 文件 --output=文件 交互式操作,并将结果写入至<文件>。" + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case 忽略大写和小写的区别。" + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space 忽略所有空白字符。" + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "-w NUM --width=NUM 每行显示最多 NUM(默认 130)个字符。" + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column 当有两行相同时只显示左边的一行。" + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines 当有两行相同时不显示。" + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "-H --speed-large-files 假设文件十分大而且文件中含有许多微小的差异。" + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "用法:%s [选项]... 文件1 文件2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "以并排方式合并文件之间的差异。" + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "不允許以交互方式合并标准输入的内容" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "两个要被比较的文件都是目录" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\t编辑兩边的版本合并后的内容,各版本分别加上首部以识别。\n" +"eb:\t编辑兩边的版本合并后的内容。\n" +"el:\t使用左边的版本来进行编辑。\n" +"er:\t使用右边的版本来进行编辑。\n" +"e :\t编辑新的版本。\n" +"l :\t使用左边的版本。\n" +"r :\t使用右边的版本。\n" +"s :\t加上两边一样的行时不在输出上显示。\n" +"v :\t加上两边一样的行时会在输出上显示。\n" +"q :\t退出。\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s:非法选项 -- %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "本程序是自由软件;请参看源代码的版权声明。本软件不提供任何保证;\n" +#~ "即使是商业的或为某一专用目的适用性保证也没有。\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "请向 <bug-gnu-utils@gnu.org> 报告错误。" + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "“-%ld” 选项已过时;请使用 “-%c %ld”" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "“-%ld” 选项已过时;忽略之" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "找不到辅助程序 “%s”" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "辅助程序 “%s” 调用失败" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "辅助程序 “%s” 调用失败(退出状态:%d)" diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo new file mode 100644 index 0000000000000000000000000000000000000000..a0d8d3a204ce7f27452314ceee8df43a180d8dae GIT binary patch literal 22455 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 VIBE#Of^%E-3%47x9@Dt_{eOIzn8E-6 literal 0 HcmV?d00001 diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..7cc4c45 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,1237 @@ +# traditional Chinese translation of diffutils. +# Copyright (C) 2002, 2005 Free Software Foundation, Inc. +# Abel Cheung <maddog@linux.org.hk>, 2002, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: diffutils 2.8.7\n" +"Report-Msgid-Bugs-To: bug-diffutils@gnu.org\n" +"POT-Creation-Date: 2010-05-03 17:01+0200\n" +"PO-Revision-Date: 2005-04-01 14:31+0800\n" +"Last-Translator: Abel Cheung <maddog@linux.org.hk>\n" +"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/c-stack.c:196 lib/c-stack.c:309 +msgid "program error" +msgstr "程式錯誤" + +#: lib/c-stack.c:197 lib/c-stack.c:310 +msgid "stack overflow" +msgstr "堆疊溢位" + +#: lib/error.c:153 +msgid "Unknown system error" +msgstr "不明的系統錯誤" + +#: lib/file-type.c:38 +msgid "regular empty file" +msgstr "普通空白檔案" + +#: lib/file-type.c:38 +msgid "regular file" +msgstr "普通檔案" + +#: lib/file-type.c:41 +msgid "directory" +msgstr "目錄" + +#: lib/file-type.c:44 +msgid "block special file" +msgstr "區塊特殊檔案" + +#: lib/file-type.c:47 +msgid "character special file" +msgstr "字元特殊檔案" + +#: lib/file-type.c:50 +msgid "fifo" +msgstr "fifo" + +#: lib/file-type.c:53 +msgid "symbolic link" +msgstr "符號連結" + +#: lib/file-type.c:56 +msgid "socket" +msgstr "socket" + +#: lib/file-type.c:59 +msgid "message queue" +msgstr "訊息佇列" + +#: lib/file-type.c:62 +msgid "semaphore" +msgstr "semaphore" + +#: lib/file-type.c:65 +msgid "shared memory object" +msgstr "分享記憶物件" + +#: lib/file-type.c:68 +msgid "typed memory object" +msgstr "分類記憶物件" + +#: lib/file-type.c:70 +msgid "weird file" +msgstr "不尋常的檔案" + +#: lib/getopt.c:527 lib/getopt.c:543 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous\n" +msgstr "%s:選項‘%s’是不明確的\n" + +#: lib/getopt.c:576 lib/getopt.c:580 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s:選項‘--%s’不可配合參數使用\n" + +#: lib/getopt.c:589 lib/getopt.c:594 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s:選項‘%c%s’不可配合參數使用\n" + +#: lib/getopt.c:637 lib/getopt.c:656 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s:選項‘%s’需要參數\n" + +#: lib/getopt.c:694 lib/getopt.c:697 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s:無法識別的選項‘--%s’\n" + +#: lib/getopt.c:705 lib/getopt.c:708 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s:無法識別的選項‘%c%s’\n" + +#: lib/getopt.c:757 lib/getopt.c:760 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s:無效的選項 ─ %c\n" + +#: lib/getopt.c:810 lib/getopt.c:827 lib/getopt.c:1035 lib/getopt.c:1053 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s:選項需要參數 ─ %c\n" + +#: lib/getopt.c:883 lib/getopt.c:899 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s:選項‘-W %s’是不明確的\n" + +#: lib/getopt.c:923 lib/getopt.c:941 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s:選項‘-W %s’不可配合參數使用\n" + +#: lib/getopt.c:962 lib/getopt.c:980 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s:選項‘%s’需要參數\n" + +#. 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 +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) +#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:272 +msgid "`" +msgstr "" + +#: lib/quotearg.c:273 +msgid "'" +msgstr "" + +#: lib/regcomp.c:134 +msgid "Success" +msgstr "成功" + +#: lib/regcomp.c:137 +msgid "No match" +msgstr "沒有符合的字串" + +#: lib/regcomp.c:140 +msgid "Invalid regular expression" +msgstr "不正確的正規表示式" + +#: lib/regcomp.c:143 +msgid "Invalid collation character" +msgstr "無效的 collation 字元" + +#: lib/regcomp.c:146 +msgid "Invalid character class name" +msgstr "無效的字元種類名稱" + +#: lib/regcomp.c:149 +msgid "Trailing backslash" +msgstr "末端有多餘的反斜號" + +#: lib/regcomp.c:152 +msgid "Invalid back reference" +msgstr "無效的 back reference" + +#: lib/regcomp.c:155 +msgid "Unmatched [ or [^" +msgstr "沒有對應的 [ 或 [^" + +#: lib/regcomp.c:158 +msgid "Unmatched ( or \\(" +msgstr "沒有對應的 ( 或 \\(" + +#: lib/regcomp.c:161 +msgid "Unmatched \\{" +msgstr "沒有對應的 \\{" + +#: lib/regcomp.c:164 +msgid "Invalid content of \\{\\}" +msgstr "\\{\\} 中的內容無效" + +#: lib/regcomp.c:167 +msgid "Invalid range end" +msgstr "範圍末端字元無效" + +#: lib/regcomp.c:170 +msgid "Memory exhausted" +msgstr "記憶體耗盡" + +#: lib/regcomp.c:173 +msgid "Invalid preceding regular expression" +msgstr "之前的正規表示式無效" + +#: lib/regcomp.c:176 +msgid "Premature end of regular expression" +msgstr "正規表示式過早結束" + +#: lib/regcomp.c:179 +msgid "Regular expression too big" +msgstr "正規表示式過長" + +#: lib/regcomp.c:182 +msgid "Unmatched ) or \\)" +msgstr "沒有對應的 ) 或 \\)" + +#: lib/regcomp.c:703 +msgid "No previous regular expression" +msgstr "之前沒有任何正規表示式" + +#: lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "記憶體耗盡" + +#: lib/xfreopen.c:35 +msgid "stdin" +msgstr "" + +#: lib/xfreopen.c:36 +msgid "stdout" +msgstr "" + +#: lib/xfreopen.c:37 +msgid "stderr" +msgstr "" + +#: lib/xfreopen.c:38 +#, fuzzy +msgid "unknown stream" +msgstr "不明的系統錯誤" + +#: lib/xfreopen.c:39 +#, c-format +msgid "failed to reopen %s with mode %s" +msgstr "" + +#: lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "無效的 --bytes 值 ‘%s’" + +#: lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "無效的水平長度 ‘%s’" + +#: lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: lib/version-etc.c:74 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:77 +#, 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:84 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:86 +msgid "" +"\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" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "由 %s 編寫。\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "由 %s 和 %s 編寫。\n" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "由 %s, %s 和 %s 編寫。\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 "" +"由 %s, %s, %s\n" +"和 %s 編寫。\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:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"由 %s, %s, %s,\n" +"%s 和 %s 編寫。\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:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" +"由 %s, %s, %s,\n" +"%s, %s 和 %s 編寫。\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:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" +"由 %s, %s, %s,\n" +"%s, %s, %s 和 %s 編寫。\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:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" +"由 %s, %s, %s,\n" +"%s, %s, %s, %s\n" +"和 %s 編寫。\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:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" +"由 %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s 和 %s 編寫。\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:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" +"由 %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s 和 %s 等等編寫。\n" + +#. 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 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#: src/analyze.c:459 src/diff.c:1258 +#, c-format +msgid "Files %s and %s differ\n" +msgstr "檔案 %s 與 %s 不同\n" + +#: src/analyze.c:462 +#, c-format +msgid "Binary files %s and %s differ\n" +msgstr "二元碼檔 %s 與 %s 不同\n" + +#: src/analyze.c:713 src/diff3.c:1419 src/util.c:545 +msgid "No newline at end of file" +msgstr "檔案末沒有 newline 字元" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:43 +msgid "Torbjorn Granlund" +msgstr "Torbjorn Granlund" + +#. This is a proper name. See the gettext manual, section Names. +#: src/cmp.c:44 +msgid "David MacKenzie" +msgstr "" + +#: src/cmp.c:118 src/diff.c:829 src/diff3.c:415 src/sdiff.c:178 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "請嘗試‘%s --help’來獲取更多資訊。" + +#: src/cmp.c:137 +#, c-format +msgid "invalid --ignore-initial value `%s'" +msgstr "無效的 --ignore-initial 值 ‘%s’" + +#: src/cmp.c:147 +#, c-format +msgid "options -l and -s are incompatible" +msgstr "-l 和 -s 選項不兼容" + +#: src/cmp.c:155 src/diff.c:838 src/diff3.c:423 src/sdiff.c:187 +#: src/sdiff.c:329 src/sdiff.c:336 src/sdiff.c:924 src/util.c:191 +#: src/util.c:284 src/util.c:291 +msgid "write failed" +msgstr "寫入失敗" + +#: src/cmp.c:157 src/diff.c:840 src/diff.c:1323 src/diff3.c:425 +#: src/sdiff.c:189 +msgid "standard output" +msgstr "標準輸出" + +#: src/cmp.c:161 +msgid "-b --print-bytes Print differing bytes." +msgstr "-b --print-bytes 印出相異位置的位元組。" + +#: src/cmp.c:162 +msgid "-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input." +msgstr "-i SKIP --ignore-initial=SKIP 略過輸入資料的最初 SKIP 個位元組。" + +#: src/cmp.c:163 +msgid "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" +msgstr "-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2" + +#: src/cmp.c:164 +msgid "" +" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2." +msgstr " 略過 FILE1 的最初 SKIP1 個位元組和 FILE2 的最初 SKIP2 個位元組。" + +#: src/cmp.c:165 +msgid "-l --verbose Output byte numbers and values of all differing bytes." +msgstr "-l --verbose 顯示兩者所有相異的位置和它們的位元組數值。" + +#: src/cmp.c:166 +msgid "-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes." +msgstr "-n LIMIT --bytes=LIMIT 最多比較 LIMIT 個位元組。" + +#: src/cmp.c:167 +msgid "-s --quiet --silent Output nothing; yield exit status only." +msgstr "-s --quiet --silent 不輸出任何資訊;只產生回傳值。" + +#: src/cmp.c:168 src/diff.c:918 src/diff3.c:444 src/sdiff.c:215 +msgid "-v --version Output version info." +msgstr "-v --version 顯示版本資訊。" + +#: src/cmp.c:169 src/diff.c:919 src/diff3.c:445 src/sdiff.c:216 +msgid "--help Output this help." +msgstr "--help 顯示此求助說明。" + +#: src/cmp.c:178 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" +msgstr "用法:%s [選項]... 檔案1 [檔案2 [SKIP1 [SKIP2]]]\n" + +#: src/cmp.c:180 +msgid "Compare two files byte by byte." +msgstr "比較兩個檔案的每一個位元組。" + +#: src/cmp.c:184 +msgid "SKIP1 and SKIP2 are the number of bytes to skip in each file." +msgstr "SKIP1 和 SKIP2 是每個檔案會略過的位元組數目。" + +#: src/cmp.c:185 +msgid "" +"SKIP values may be followed by the following multiplicative suffixes:\n" +"kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +"GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y." +msgstr "" +"SKIP 值可以加上以下的單位:\n" +"kB=1000、K=1024、MB=1000000、M=1048576、GB=1000000000、G=1073741824,\n" +"還有 T、P、E、Z、Y 如此類推。" + +#: src/cmp.c:188 +msgid "If a FILE is `-' or missing, read standard input." +msgstr "如果檔案是‘-’或沒有指定,則由標準輸入讀入資料。" + +#: src/cmp.c:189 src/diff.c:924 src/sdiff.c:234 +msgid "Exit status is 0 if inputs are the same, 1 if different, 2 if trouble." +msgstr "如果兩邊內容一樣,回傳值是 0;1 代表兩邊內容不相同,2 代表有錯誤。" + +#: src/cmp.c:234 +#, c-format +msgid "invalid --bytes value `%s'" +msgstr "無效的 --bytes 值 ‘%s’" + +#: src/cmp.c:260 src/diff.c:747 src/diff3.c:319 src/sdiff.c:575 +#, c-format +msgid "missing operand after `%s'" +msgstr "‘%s’後缺少了參數" + +#: src/cmp.c:272 src/diff.c:749 src/diff3.c:321 src/sdiff.c:577 +#, c-format +msgid "extra operand `%s'" +msgstr "多餘的參數‘%s’" + +#: src/cmp.c:485 +#, c-format +msgid "%s %s differ: byte %s, line %s\n" +msgstr "%s %s 不同:第 %s 位元組,第 %s 行\n" + +#: src/cmp.c:501 +#, c-format +msgid "%s %s differ: byte %s, line %s is %3o %s %3o %s\n" +msgstr "%s %s 不同:第 %s 行,第 %s 位元組為 %3o %s %3o %s\n" + +#: src/cmp.c:553 +#, c-format +msgid "cmp: EOF on %s\n" +msgstr "cmp:%s 已結束\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:47 +msgid "Paul Eggert" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:48 +msgid "Mike Haertel" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:49 +msgid "David Hayes" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:50 +msgid "Richard Stallman" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff.c:51 +msgid "Len Tower" +msgstr "" + +#: src/diff.c:333 +#, c-format +msgid "invalid context length `%s'" +msgstr "無效的上下文行數‘%s’" + +#: src/diff.c:416 +#, c-format +msgid "pagination not supported on this host" +msgstr "此系統不支援分頁" + +#: src/diff.c:431 src/diff3.c:301 +#, c-format +msgid "too many file label options" +msgstr "太多有關檔案標籤的選項" + +#: src/diff.c:508 +#, c-format +msgid "invalid width `%s'" +msgstr "無效的寬度‘%s’" + +#: src/diff.c:512 +msgid "conflicting width options" +msgstr "出現互相抵觸的寬度選項" + +#: src/diff.c:537 +#, c-format +msgid "invalid horizon length `%s'" +msgstr "無效的水平長度 ‘%s’" + +#: src/diff.c:588 +#, c-format +msgid "invalid tabsize `%s'" +msgstr "無效的定位字元寬度 ‘%s’" + +#: src/diff.c:592 +msgid "conflicting tabsize options" +msgstr "出現互相抵觸的定位字元寬度選項" + +#: src/diff.c:724 +msgid "--from-file and --to-file both specified" +msgstr "同時指定了 --from-file 及 --to-file 選項" + +#: src/diff.c:844 +msgid "Compare files line by line." +msgstr "比較兩個檔案的每一行。" + +#: src/diff.c:846 +msgid "-i --ignore-case Ignore case differences in file contents." +msgstr "-i --ignore-case 不分辨檔案內容中的大小寫。" + +#: src/diff.c:847 +msgid "--ignore-file-name-case Ignore case when comparing file names." +msgstr "--ignore-file-name-case 當比較檔案名稱時不分辨大小寫。" + +#: src/diff.c:848 +msgid "--no-ignore-file-name-case Consider case when comparing file names." +msgstr "--no-ignore-file-name-case 當比較檔案名稱時會分辨大小寫。" + +#: src/diff.c:849 src/sdiff.c:196 +msgid "-E --ignore-tab-expansion Ignore changes due to tab expansion." +msgstr "-E --ignore-tab-expansion 忽略因將 tab 轉換為空格而造成的差異。" + +#: src/diff.c:850 src/sdiff.c:197 +msgid "-b --ignore-space-change Ignore changes in the amount of white space." +msgstr "-b --ignore-space-change 忽略因空白字元數目不同而造成的差異。" + +#: src/diff.c:851 +msgid "-w --ignore-all-space Ignore all white space." +msgstr "-w --ignore-all-space 忽略所有空白字元。" + +#: src/diff.c:852 src/sdiff.c:199 +msgid "-B --ignore-blank-lines Ignore changes whose lines are all blank." +msgstr "-B --ignore-blank-lines 忽略任何因空行而造成的差異。" + +#: src/diff.c:853 src/sdiff.c:200 +msgid "" +"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "" +"-I RE --ignore-matching-lines=RE 忽略任何符合指定的<正規表示式>的地方。" + +#: src/diff.c:854 src/diff3.c:440 src/sdiff.c:201 +msgid "--strip-trailing-cr Strip trailing carriage return on input." +msgstr "--strip-trailing-cr 去除輸入資料每行末端的 carriage return 字元。" + +#: src/diff.c:856 +msgid "--binary Read and write data in binary mode." +msgstr "--binary 以二元碼檔模式讀寫資料。" + +#: src/diff.c:858 src/diff3.c:439 src/sdiff.c:202 +msgid "-a --text Treat all files as text." +msgstr "-a --text 所有檔案都以文字檔方式處理。" + +#: src/diff.c:860 +msgid "" +"-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied " +"context.\n" +"-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified " +"context.\n" +" --label LABEL Use LABEL instead of file name.\n" +" -p --show-c-function Show which C function each change is in.\n" +" -F RE --show-function-line=RE Show the most recent line matching RE." +msgstr "" +"-c -C 行數 --context[=行數] 顯示指定<行數>(預設 3 行)copied 格式的上下文\n" +"-u -U 行數 --unified[=行數] 顯示指定<行數>(預設 3 行)unified 格式的上下" +"文\n" +" --label 標籤 使用<標籤>代替檔案名稱。\n" +" -p --show-c-function 顯示和每個差異有關的 C 函式名稱。\n" +" -F RE --show-function-line=RE 顯示最接近而符合<正規表示式>的一行。" + +#: src/diff.c:865 +msgid "-q --brief Output only whether files differ." +msgstr "-q --brief 只顯示檔案是否不同。" + +#: src/diff.c:866 +msgid "-e --ed Output an ed script." +msgstr "-e --ed 以 ed script 方式輸出。" + +#: src/diff.c:867 +msgid "--normal Output a normal diff." +msgstr "--normal 以正常的 diff 方式輸出。" + +#: src/diff.c:868 +msgid "-n --rcs Output an RCS format diff." +msgstr "-n --rcs 以 RCS diff 格式輸出。" + +#: src/diff.c:869 +msgid "" +"-y --side-by-side Output in two columns.\n" +" -W NUM --width=NUM Output at most NUM (default 130) print columns.\n" +" --left-column Output only the left column of common lines.\n" +" --suppress-common-lines Do not output common lines." +msgstr "" +"-y --side-by-side 以兩列並排的方式顯示。\n" +" -W NUM --width=NUM 每行顯示最多 NUM (預設 130) 個字元。\n" +" --left-column 當有兩行相同時只顯示左邊的一行。\n" +" --suppress-common-lines 當有兩行相同時不會顯示。" + +#: src/diff.c:873 +msgid "-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs." +msgstr "-D NAME --ifdef=NAME 輸出的資料以‘#ifdef NAME’方式標明差異。" + +#: src/diff.c:874 +msgid "" +"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT." +msgstr "" +"--GTYPE-group-format=GFMT 效果類似,但會以 GFMT 格式處理 GTYPE 輸入行組。" + +#: src/diff.c:875 +msgid "--line-format=LFMT Similar, but format all input lines with LFMT." +msgstr "--line-format=LFMT 效果類似,但會以 LFMT 格式處理每一行資料。" + +#: src/diff.c:876 +msgid "" +"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT." +msgstr "" +"--LTYPE-line-format=LFMT 效果類似,但會以 LFMT 格式處理 LTYPE 輸入行組。" + +#: src/diff.c:877 +msgid " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'." +msgstr "" +" LTYPE 可以是‘old’、‘new’或‘unchanged’。GTYPE 可以是 LTYPE 的選擇\n" +" 或是‘changed’。" + +#: src/diff.c:878 +msgid "" +" GFMT may contain:\n" +" %< lines from FILE1\n" +" %> lines from FILE2\n" +" %= lines common to FILE1 and FILE2\n" +" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n" +" LETTERs are as follows for new group, lower case for old group:\n" +" F first line number\n" +" L last line number\n" +" N number of lines = L-F+1\n" +" E F-1\n" +" M L+1" +msgstr "" +" GFMT 可包括:\n" +" %< 該組中每行屬於 FILE1 的差異\n" +" %> 該組中每行屬於 FILE2 的差異\n" +" %= 該組中同時在 FILE1 和 FILE2 出現的每一行\n" +" %[-][寬度][.[精確度]]{doxX}字元 以 printf 格式表示該<字元>代表的資料\n" +" 大寫<字元>表示屬於新的檔案,小寫表示屬於舊的檔案。<字元>的意義如下:\n" +" F 行組中第一行的行號\n" +" L 行組中最後一行的行號\n" +" N 行數 ( =L-F+1 )\n" +" E F-1\n" +" M L+1" + +#: src/diff.c:889 +msgid "" +" LFMT may contain:\n" +" %L contents of line\n" +" %l contents of line, excluding any trailing newline\n" +" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number" +msgstr "" +" LFMT 可包括:\n" +" %L 該行的內容\n" +" %l 該行的內容,但不包括結束的 newline 字元\n" +" %[-][寬度][.[精確度]]{doxX}n 以 printf 格式表示的輸入資料行號" + +#: src/diff.c:893 +msgid "" +" Either GFMT or LFMT may contain:\n" +" %% %\n" +" %c'C' the single character C\n" +" %c'\\OOO' the character with octal code OOO" +msgstr "" +" GFMT 或 LFMT 可包括:\n" +" %% %\n" +" %c'C' 字元 C\n" +" %c'\\OOO' 八進位數字 OOO 所代表的字元" + +#: src/diff.c:898 +msgid "-l --paginate Pass the output through `pr' to paginate it." +msgstr "-l --paginate 將輸出送至‘pr’指令來分頁。" + +#: src/diff.c:899 src/sdiff.c:208 +msgid "-t --expand-tabs Expand tabs to spaces in output." +msgstr "-t --expand-tabs 將輸出中的 tab 換成空格。" + +#: src/diff.c:900 src/diff3.c:441 +msgid "-T --initial-tab Make tabs line up by prepending a tab." +msgstr "-T --initial-tab 每行先加上 tab 字元,使 tab 字元可以對齊。" + +#: src/diff.c:901 src/sdiff.c:209 +msgid "--tabsize=NUM Tab stops are every NUM (default 8) print columns." +msgstr "--tabsize=NUM 定位字元 (tab) 的寬度,預設為 8 個空格。" + +#: src/diff.c:902 +msgid "" +"--suppress-blank-empty Suppress space or tab before empty output lines." +msgstr "" + +#: src/diff.c:904 +msgid "-r --recursive Recursively compare any subdirectories found." +msgstr "-r --recursive 連同所有副目錄一起比較。" + +#: src/diff.c:905 +msgid "-N --new-file Treat absent files as empty." +msgstr "-N --new-file 不存在的檔案以空白檔案方式處理。" + +#: src/diff.c:906 +msgid "--unidirectional-new-file Treat absent first files as empty." +msgstr "--unidirectional-new-file 若第一個檔案不存在,以空白檔案處理。" + +#: src/diff.c:907 +msgid "-s --report-identical-files Report when two files are the same." +msgstr "-s --report-identical-files 當兩個檔案一樣時仍然顯示結果。" + +#: src/diff.c:908 +msgid "-x PAT --exclude=PAT Exclude files that match PAT." +msgstr "-x PAT --exclude=PAT 排除樣式為 PAT 的檔案。" + +#: src/diff.c:909 +msgid "" +"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE." +msgstr "-X FILE --exclude-from=FILE 排除所有在 FILE 中列出的樣式的檔案。" + +#: src/diff.c:910 +msgid "" +"-S FILE --starting-file=FILE Start with FILE when comparing directories." +msgstr "-S FILE --starting-file=FILE 當比較目錄時,由 FILE 開始比較。" + +#: src/diff.c:911 +msgid "" +"--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory." +msgstr "" +"--from-file=FILE1 將 FILE1 和參數中的所有檔案/目錄作比較。FILE1 可以是目錄。" + +#: src/diff.c:912 +msgid "" +"--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory." +msgstr "" +"--to-file=FILE2 將參數中的所有檔案/目錄和 FILE2 作比較。FILE2 可以是目錄。" + +#: src/diff.c:914 +msgid "--horizon-lines=NUM Keep NUM lines of the common prefix and suffix." +msgstr "--horizon-lines=NUM (此選項不作處理)" + +#: src/diff.c:915 src/sdiff.c:211 +msgid "-d --minimal Try hard to find a smaller set of changes." +msgstr "-d --minimal 盡可能找出最小的差異。" + +#: src/diff.c:916 +msgid "" +"--speed-large-files Assume large files and many scattered small changes." +msgstr "--speed-large-files 假設檔案十分大而且當中含有許多些微的差異。" + +#: src/diff.c:921 +msgid "" +"FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'." +msgstr "" +"FILES 的格式可以是‘FILE1 FILE2’、‘DIR1 DIR2’、‘DIR FILE...’或\n" +" ‘FILE... DIR’。" + +#: src/diff.c:922 +msgid "" +"If --from-file or --to-file is given, there are no restrictions on FILES." +msgstr "如果使用 --from-file 或 --to-file 選項,FILES 的格式則不受限制。" + +#: src/diff.c:923 src/diff3.c:463 src/sdiff.c:233 +msgid "If a FILE is `-', read standard input." +msgstr "如果 FILE 是‘-’,則由標準輸入讀取資料。" + +# It is intentional *not* to translate FILES -- maddog +#: src/diff.c:933 +#, c-format +msgid "Usage: %s [OPTION]... FILES\n" +msgstr "用法:%s [選項]... FILES\n" + +#: src/diff.c:963 +#, c-format +msgid "conflicting %s option value `%s'" +msgstr "互相矛盾的 %s 選項,參數值為‘%s’" + +#: src/diff.c:976 +#, c-format +msgid "conflicting output style options" +msgstr "互相矛盾的輸出模式選項" + +#: src/diff.c:1033 src/diff.c:1233 +#, c-format +msgid "Only in %s: %s\n" +msgstr "只在 %s 存在:%s\n" + +#: src/diff.c:1162 +msgid "cannot compare `-' to a directory" +msgstr "‘-’無法與目錄作比較" + +#: src/diff.c:1194 +msgid "-D option not supported with directories" +msgstr "-D 選項不可配合目錄使用" + +#: src/diff.c:1203 +#, c-format +msgid "Common subdirectories: %s and %s\n" +msgstr "%s 和 %s 有共同的副目錄\n" + +#: src/diff.c:1243 +#, c-format +msgid "File %s is a %s while file %s is a %s\n" +msgstr "檔案 %s 是%s而檔案 %s 是%s\n" + +#: src/diff.c:1314 +#, c-format +msgid "Files %s and %s are identical\n" +msgstr "檔案 %s 和 %s 相同\n" + +#. This is a proper name. See the gettext manual, section Names. +#: src/diff3.c:42 +msgid "Randy Smith" +msgstr "" + +#: src/diff3.c:314 +#, c-format +msgid "incompatible options" +msgstr "不兼容的選項" + +#: src/diff3.c:354 +msgid "`-' specified for more than one input file" +msgstr "輸入檔‘-’不可多於一個" + +#: src/diff3.c:396 src/diff3.c:1244 src/diff3.c:1648 src/diff3.c:1703 +#: src/sdiff.c:321 src/sdiff.c:894 src/sdiff.c:905 +msgid "read failed" +msgstr "讀取資料失敗" + +#: src/diff3.c:429 +msgid "-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE." +msgstr "" +"-e --ed 取出由 OLDFILE 至 YOURFILE 的更改部份,並顯示可將此\n" +" 部份套用至 MYFILE 的 ed script。" + +#: src/diff3.c:430 +msgid "-E --show-overlap Output unmerged changes, bracketing conflicts." +msgstr "-E --show-overlap 顯示未合併的更改部份,並括上互相抵觸的地方。" + +#: src/diff3.c:431 +msgid "-A --show-all Output all changes, bracketing conflicts." +msgstr "-A --show-all 顯示所有要更改的部份,並括上互相抵觸的地方。" + +#: src/diff3.c:432 +msgid "-x --overlap-only Output overlapping changes." +msgstr "-x --overlap-only 只顯示重疊的更改部份。" + +#: src/diff3.c:433 +msgid "-X Output overlapping changes, bracketing them." +msgstr "-X 顯示重疊的更改部份,並括上記號。" + +#: src/diff3.c:434 +msgid "-3 --easy-only Output unmerged nonoverlapping changes." +msgstr "-3 --easy-only 顯示未合併而且不重疊的更改部份。" + +#: src/diff3.c:436 +msgid "-m --merge Output merged file instead of ed script (default -A)." +msgstr "-m --merge 顯示合併後的檔案而不是 ed script (預設加上 -A)。" + +#: src/diff3.c:437 +msgid "-L LABEL --label=LABEL Use LABEL instead of file name." +msgstr "-L 標籤 --label=標籤 以<標籤>代替檔案名稱。" + +#: src/diff3.c:438 +msgid "-i Append `w' and `q' commands to ed scripts." +msgstr "-i 在 ed script 中附加‘w’和‘q’指令。" + +#: src/diff3.c:442 src/sdiff.c:213 +msgid "--diff-program=PROGRAM Use PROGRAM to compare files." +msgstr "--diff-program=程式 使用<程式>來比較檔案。" + +#: src/diff3.c:454 +#, c-format +msgid "Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n" +msgstr "用法:%s [選項]... MYFILE OLDFILE YOURFILE\n" + +#: src/diff3.c:456 +msgid "Compare three files line by line." +msgstr "比較三個檔案的每一行。" + +#: src/diff3.c:464 +msgid "Exit status is 0 if successful, 1 if conflicts, 2 if trouble." +msgstr "回傳值是 0 的話代表指令成功執行,1 代表內容有衝突,2 代表有錯誤。" + +#: src/diff3.c:657 +msgid "internal error: screwup in format of diff blocks" +msgstr "內部錯誤:diff 區段的格式出錯" + +#: src/diff3.c:950 +#, c-format +msgid "%s: diff failed: " +msgstr "%s:diff 失敗:" + +#: src/diff3.c:972 +msgid "internal error: invalid diff type in process_diff" +msgstr "內部錯誤:process_diff 中的 diff 類型無效" + +#: src/diff3.c:997 +msgid "invalid diff format; invalid change separator" +msgstr "無效的 diff 格式;表示資料變更的分隔字串無效" + +#: src/diff3.c:1254 +msgid "invalid diff format; incomplete last line" +msgstr "無效的 diff 格式;最後一行不完整" + +#: src/diff3.c:1278 src/sdiff.c:289 src/util.c:301 +#, c-format +msgid "subsidiary program `%s' could not be invoked" +msgstr "子程式 ‘%s’ 無法執行" + +#: src/diff3.c:1303 +msgid "invalid diff format; incorrect leading line chars" +msgstr "diff 格式無效;某行的第一個字元不正確" + +#: src/diff3.c:1376 +msgid "internal error: invalid diff type passed to output" +msgstr "內部錯誤:準備輸出的 diff 資料類型無效" + +#: src/diff3.c:1650 src/diff3.c:1707 +msgid "input file shrank" +msgstr "輸入檔縮小" + +#: src/dir.c:157 +#, c-format +msgid "cannot compare file names `%s' and `%s'" +msgstr "無法比較檔案 ‘%s’ 和 ‘%s’" + +#: src/dir.c:208 +#, c-format +msgid "%s: recursive directory loop" +msgstr "" + +#. This is a proper name. See the gettext manual, section Names. +#: src/sdiff.c:42 +msgid "Thomas Lord" +msgstr "" + +#: src/sdiff.c:193 +msgid "-o FILE --output=FILE Operate interactively, sending output to FILE." +msgstr "-o 檔案 --output=檔案 互動式操作,並將結果寫入至<檔案>。" + +#: src/sdiff.c:195 +msgid "-i --ignore-case Consider upper- and lower-case to be the same." +msgstr "-i --ignore-case 不分辨檔案內容中的大小寫。" + +#: src/sdiff.c:198 +msgid "-W --ignore-all-space Ignore all white space." +msgstr "-W --ignore-all-space 忽略所有空白字元。" + +#: src/sdiff.c:204 +msgid "-w NUM --width=NUM Output at most NUM (default 130) print columns." +msgstr "-w NUM --width=NUM 每行顯示最多 NUM(預設 130)個字元。" + +#: src/sdiff.c:205 +msgid "-l --left-column Output only the left column of common lines." +msgstr "-l --left-column 當有兩行相同時只顯示左邊的一行。" + +#: src/sdiff.c:206 +msgid "-s --suppress-common-lines Do not output common lines." +msgstr "-s --suppress-common-lines 當有兩行相同時不會顯示。" + +#: src/sdiff.c:212 +msgid "" +"-H --speed-large-files Assume large files and many scattered small changes." +msgstr "-H --speed-large-files 假設檔案十分大而且當中含有許多些微的差異。" + +#: src/sdiff.c:225 +#, c-format +msgid "Usage: %s [OPTION]... FILE1 FILE2\n" +msgstr "用法:%s [選項]... 檔案1 檔案2\n" + +#: src/sdiff.c:226 +msgid "Side-by-side merge of file differences." +msgstr "以並排方式合併檔案之間的差異。" + +#: src/sdiff.c:343 +msgid "cannot interactively merge standard input" +msgstr "不允許以互動方式合併標準輸入的資料" + +#: src/sdiff.c:605 +msgid "both files to be compared are directories" +msgstr "兩個要比較的都是目錄" + +#: src/sdiff.c:868 +#, fuzzy +msgid "" +"ed:\tEdit then use both versions, each decorated with a header.\n" +"eb:\tEdit then use both versions.\n" +"el or e1:\tEdit then use the left version.\n" +"er or e2:\tEdit then use the right version.\n" +"e:\tDiscard both versions then edit a new one.\n" +"l or 1:\tUse the left version.\n" +"r or 2:\tUse the right version.\n" +"s:\tSilently include common lines.\n" +"v:\tVerbosely include common lines.\n" +"q:\tQuit.\n" +msgstr "" +"ed:\t編輯兩邊的版本合併後的資料,各版本分別加上標頭以資識別。\n" +"eb:\t編輯兩邊的版本合併後的資料。\n" +"el:\t使用左邊的版本來進行編輯。\n" +"er:\t使用右邊的版本來進行編輯。\n" +"e :\t編輯新的版本。\n" +"l :\t使用左邊的版本。\n" +"r :\t使用右邊的版本。\n" +"s :\t加上兩邊一樣的行組時不在畫面顯示。\n" +"v :\t加上兩邊一樣的行組時會在畫面顯示。\n" +"q :\t離開。\n" + +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s:不合法的選項 ─ %c\n" + +#~ msgid "" +#~ "This is free software; see the source for copying conditions. There is " +#~ "NO\n" +#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " +#~ "PURPOSE.\n" +#~ msgstr "" +#~ "本程式是自由軟體;請參考源代碼中的版權聲明。本軟體不提供任何保證,甚至不" +#~ "會\n" +#~ "包括可售性或適用於任何特定目的的保證。\n" + +#~ msgid "Report bugs to <bug-gnu-utils@gnu.org>." +#~ msgstr "請向 <bug-gnu-utils@gnu.org> 回報錯誤。" + +#~ msgid "`-%ld' option is obsolete; use `-%c %ld'" +#~ msgstr "‘-%ld’ 選項已過時;請使用 ‘-%c %ld’" + +#~ msgid "`-%ld' option is obsolete; omit it" +#~ msgstr "‘-%ld’ 選項已過時;會忽略此選項" + +#~ msgid "subsidiary program `%s' not found" +#~ msgstr "找不到子程式 ‘%s’" + +#~ msgid "subsidiary program `%s' failed" +#~ msgstr "程式 ‘%s’ 回傳錯誤" + +#~ msgid "subsidiary program `%s' failed (exit status %d)" +#~ msgstr "子程式 ‘%s’ 發生錯誤 (回傳值為 %d)" + +#~ msgid "" +#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n" +#~ "You may redistribute copies of this program\n" +#~ "under the terms of the GNU General Public License.\n" +#~ "For more information about these matters, see the files named COPYING." +#~ msgstr "" +#~ "此軟體在法律允許的限度之下不附帶任何保證。你可以根據 GNU General Public\n" +#~ "License 中的條款重新散佈此軟體。詳情請參考檔案 COPYING。" + +#~ msgid "Written by Torbjorn Granlund and David MacKenzie." +#~ msgstr "由 Torbjorn Granlund 及 David MacKenzie 編寫。" + +#~ msgid "" +#~ "Written by Paul Eggert, Mike Haertel, David Hayes,\n" +#~ "Richard Stallman, and Len Tower." +#~ msgstr "" +#~ "由 Paul Eggert、Mike Haertel、David Hayes、\n" +#~ "Richard Stallman 和 Len Tower 編寫。" + +#~ msgid "subsidiary program `%s' not executable" +#~ msgstr "所需的程式‘%s’無法執行" + +#~ msgid "--inhibit-hunk-merge Do not merge hunks." +#~ msgstr "--inhibit-hunk-merge (此選項不作處理)" + +#~ msgid "" +#~ "SKIP values may be followed by the following multiplicative suffixes:\n" +#~ msgstr "SKIP 值可以加上以下的單位:\n" + +#~ msgid "kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n" +#~ msgstr "kB 1000、K 1024、MB 1,000,000、M 1,048,576、\n" + +#~ msgid "GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y.\n" +#~ msgstr "GB 1,000,000,000、G 1,073,741,824、還有 T、P、E、Z、Y 如此類推。\n" + +#~ msgid "multiple `--from-file' options" +#~ msgstr "‘--from-file’選項不可使用多於一次" + +#~ msgid "multiple `--to-file' options" +#~ msgstr "‘--to-file’選項不可使用多於一次" + +#~ msgid "regular executable file" +#~ msgstr "正常可執行檔" + +#~ msgid "If a FILE is `-', read standard input.\n" +#~ msgstr "如果檔案是‘-’,則由標準輸入讀入資料。\n" diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..48fbf7d --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,55 @@ +# Automakefile for GNU diffutils programs. + +# Copyright (C) 2001-2002, 2006, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +bin_PROGRAMS = cmp diff diff3 sdiff + +noinst_HEADERS = system.h + +localedir = $(datadir)/locale + +AM_CPPFLAGS = -I../lib -I$(top_srcdir)/lib +AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) + +LDADD = \ + ../lib/libdiffutils.a \ + $(LIBCSTACK) \ + $(LIBINTL) \ + $(LIBICONV) \ + $(LIBSIGSEGV) \ + $(LIB_CLOCK_GETTIME) + +diff_LDADD = $(LDADD) +cmp_LDADD = $(LDADD) +sdiff_LDADD = $(LDADD) +diff3_LDADD = $(LDADD) + +cmp_SOURCES = cmp.c +diff3_SOURCES = diff3.c +sdiff_SOURCES = sdiff.c +diff_SOURCES = \ + analyze.c context.c diff.c diff.h dir.c ed.c ifdef.c io.c \ + normal.c side.c util.c + +MOSTLYCLEANFILES = paths.h paths.ht + +cmp.$(OBJEXT) diff3.$(OBJEXT) diff.$(OBJEXT) sdiff.$(OBJEXT): paths.h + +gdiff = `echo diff|sed '$(transform)'` +BUILT_SOURCES = paths.h +paths.h: Makefile.am + $(AM_V_GEN)(echo '#define DEFAULT_DIFF_PROGRAM "'$(gdiff)'"' && \ + echo '#define LOCALEDIR "$(localedir)"') >$@t && mv $@t $@ diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..ca9b49e --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,1222 @@ +# Makefile.in generated by automake 1.11a from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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@ + +# Automakefile for GNU diffutils programs. + +# Copyright (C) 2001-2002, 2006, 2009-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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@ +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 = cmp$(EXEEXT) diff$(EXEEXT) diff3$(EXEEXT) \ + sdiff$(EXEEXT) +subdir = src +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/c-stack.m4 \ + $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.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/exclude.m4 \ + $(top_srcdir)/m4/extensions.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/file-type.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/freopen.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21_gl.m4 $(top_srcdir)/m4/gnu-make.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \ + $(top_srcdir)/m4/iconv_open.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lib-ld_gl.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix_gl.m4 \ + $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-tr.m4 \ + $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/longlong_gl.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/manywarnings.m4 \ + $(top_srcdir)/m4/mbchar.m4 $(top_srcdir)/m4/mbiter.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbslen.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/memchr.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/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/onceonly.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po_gl.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/putenv.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.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/stdio-safer.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/strftime.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strptime.m4 \ + $(top_srcdir)/m4/strtoimax.m4 $(top_srcdir)/m4/strtol.m4 \ + $(top_srcdir)/m4/strtoll.m4 $(top_srcdir)/m4/strtoul.m4 \ + $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/strtoumax.m4 \ + $(top_srcdir)/m4/symlink.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/time_h.m4 \ + $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/vararrays.m4 \ + $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.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/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \ + $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xstrtol.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_cmp_OBJECTS = cmp.$(OBJEXT) +cmp_OBJECTS = $(am_cmp_OBJECTS) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = ../lib/libdiffutils.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +cmp_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_diff_OBJECTS = analyze.$(OBJEXT) context.$(OBJEXT) diff.$(OBJEXT) \ + dir.$(OBJEXT) ed.$(OBJEXT) ifdef.$(OBJEXT) io.$(OBJEXT) \ + normal.$(OBJEXT) side.$(OBJEXT) util.$(OBJEXT) +diff_OBJECTS = $(am_diff_OBJECTS) +diff_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_diff3_OBJECTS = diff3.$(OBJEXT) +diff3_OBJECTS = $(am_diff3_OBJECTS) +diff3_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_sdiff_OBJECTS = sdiff.$(OBJEXT) +sdiff_OBJECTS = $(am_sdiff_OBJECTS) +sdiff_DEPENDENCIES = $(am__DEPENDENCIES_2) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/lib +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_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +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_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(cmp_SOURCES) $(diff_SOURCES) $(diff3_SOURCES) \ + $(sdiff_SOURCES) +DIST_SOURCES = $(cmp_SOURCES) $(diff_SOURCES) $(diff3_SOURCES) \ + $(sdiff_SOURCES) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +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@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +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@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +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@ +FNMATCH_H = @FNMATCH_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +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_FFLUSH = @GNULIB_FFLUSH@ +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_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +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_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_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +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_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_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STAT = @GNULIB_STAT@ +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_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_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ +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_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WARN_CFLAGS = @GNULIB_WARN_CFLAGS@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +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_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +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_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_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +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_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +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_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LIBSIGSEGV = @HAVE_LIBSIGSEGV@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOCALTIME_R = @HAVE_LOCALTIME_R@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +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_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +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_SLEEP = @HAVE_SLEEP@ +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_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_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_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_TIMEGM = @HAVE_TIMEGM@ +HAVE_TTYNAME_R = @HAVE_TTYNAME_R@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +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_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HELP2MAN = @HELP2MAN@ +ICONV_H = @ICONV_H@ +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@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBDIFFUTILS_LIBDEPS = @LIBDIFFUTILS_LIBDEPS@ +LIBDIFFUTILS_LTLIBDEPS = @LIBDIFFUTILS_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSIGSEGV = @LIBSIGSEGV@ +LIBSIGSEGV_PREFIX = @LIBSIGSEGV_PREFIX@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +MAKEINFO = @MAKEINFO@ +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_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_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_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_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_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_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_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_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_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_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@ +OBJEXT = @OBJEXT@ +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@ +POSUB = @POSUB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PR_PROGRAM = @PR_PROGRAM@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +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_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +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_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_NANOSLEEP = @REPLACE_NANOSLEEP@ +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_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +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_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +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_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +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_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_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_aux_dir = @abs_aux_dir@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +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@ +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@ +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 = $(datadir)/locale +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +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_HEADERS = system.h +AM_CPPFLAGS = -I../lib -I$(top_srcdir)/lib +AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) +LDADD = \ + ../lib/libdiffutils.a \ + $(LIBCSTACK) \ + $(LIBINTL) \ + $(LIBICONV) \ + $(LIBSIGSEGV) \ + $(LIB_CLOCK_GETTIME) + +diff_LDADD = $(LDADD) +cmp_LDADD = $(LDADD) +sdiff_LDADD = $(LDADD) +diff3_LDADD = $(LDADD) +cmp_SOURCES = cmp.c +diff3_SOURCES = diff3.c +sdiff_SOURCES = sdiff.c +diff_SOURCES = \ + analyze.c context.c diff.c diff.h dir.c ed.c ifdef.c io.c \ + normal.c side.c util.c + +MOSTLYCLEANFILES = paths.h paths.ht +gdiff = `echo diff|sed '$(transform)'` +BUILT_SOURCES = paths.h +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .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 src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: 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) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + 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) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(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: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +cmp$(EXEEXT): $(cmp_OBJECTS) $(cmp_DEPENDENCIES) + @rm -f cmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(cmp_OBJECTS) $(cmp_LDADD) $(LIBS) +diff$(EXEEXT): $(diff_OBJECTS) $(diff_DEPENDENCIES) + @rm -f diff$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(diff_OBJECTS) $(diff_LDADD) $(LIBS) +diff3$(EXEEXT): $(diff3_OBJECTS) $(diff3_DEPENDENCIES) + @rm -f diff3$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(diff3_OBJECTS) $(diff3_LDADD) $(LIBS) +sdiff$(EXEEXT): $(sdiff_OBJECTS) $(sdiff_DEPENDENCIES) + @rm -f sdiff$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(sdiff_OBJECTS) $(sdiff_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/analyze.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/context.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diff3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ed.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ifdef.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/normal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdiff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/side.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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 $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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 `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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 +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP)'; \ + 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 $(PROGRAMS) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; 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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +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-binPROGRAMS clean-generic 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 + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic cscopelist ctags distclean distclean-compile \ + distclean-generic 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 pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS + + +cmp.$(OBJEXT) diff3.$(OBJEXT) diff.$(OBJEXT) sdiff.$(OBJEXT): paths.h +paths.h: Makefile.am + $(AM_V_GEN)(echo '#define DEFAULT_DIFF_PROGRAM "'$(gdiff)'"' && \ + echo '#define LOCALEDIR "$(localedir)"') >$@t && mv $@t $@ + +# 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/src/analyze.c b/src/analyze.c new file mode 100644 index 0000000..e797248 --- /dev/null +++ b/src/analyze.c @@ -0,0 +1,723 @@ +/* Analyze file differences for GNU DIFF. + + Copyright (C) 1988-1989, 1992-1995, 1998, 2001-2002, 2004, 2006-2007, + 2009-2010 Free Software Foundation, Inc. + + This file is part of GNU DIFF. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "diff.h" +#include <cmpbuf.h> +#include <error.h> +#include <file-type.h> +#include <xalloc.h> + +/* The core of the Diff algorithm. */ +#define ELEMENT lin +#define EQUAL(x,y) ((x) == (y)) +#define OFFSET lin +#define EXTRA_CONTEXT_FIELDS /* none */ +#define NOTE_DELETE(c, xoff) (files[0].changed[files[0].realindexes[xoff]] = 1) +#define NOTE_INSERT(c, yoff) (files[1].changed[files[1].realindexes[yoff]] = 1) +#define USE_HEURISTIC 1 +#include <diffseq.h> + +/* Discard lines from one file that have no matches in the other file. + + A line which is discarded will not be considered by the actual + comparison algorithm; it will be as if that line were not in the file. + The file's `realindexes' table maps virtual line numbers + (which don't count the discarded lines) into real line numbers; + this is how the actual comparison algorithm produces results + that are comprehensible when the discarded lines are counted. + + When we discard a line, we also mark it as a deletion or insertion + so that it will be printed in the output. */ + +static void +discard_confusing_lines (struct file_data filevec[]) +{ + int f; + lin i; + char *discarded[2]; + lin *equiv_count[2]; + lin *p; + + /* Allocate our results. */ + p = xmalloc ((filevec[0].buffered_lines + filevec[1].buffered_lines) + * (2 * sizeof *p)); + for (f = 0; f < 2; f++) + { + filevec[f].undiscarded = p; p += filevec[f].buffered_lines; + filevec[f].realindexes = p; p += filevec[f].buffered_lines; + } + + /* Set up equiv_count[F][I] as the number of lines in file F + that fall in equivalence class I. */ + + p = zalloc (filevec[0].equiv_max * (2 * sizeof *p)); + equiv_count[0] = p; + equiv_count[1] = p + filevec[0].equiv_max; + + for (i = 0; i < filevec[0].buffered_lines; ++i) + ++equiv_count[0][filevec[0].equivs[i]]; + for (i = 0; i < filevec[1].buffered_lines; ++i) + ++equiv_count[1][filevec[1].equivs[i]]; + + /* Set up tables of which lines are going to be discarded. */ + + discarded[0] = zalloc (filevec[0].buffered_lines + + filevec[1].buffered_lines); + discarded[1] = discarded[0] + filevec[0].buffered_lines; + + /* Mark to be discarded each line that matches no line of the other file. + If a line matches many lines, mark it as provisionally discardable. */ + + for (f = 0; f < 2; f++) + { + size_t end = filevec[f].buffered_lines; + char *discards = discarded[f]; + lin *counts = equiv_count[1 - f]; + lin *equivs = filevec[f].equivs; + size_t many = 5; + size_t tem = end / 64; + + /* Multiply MANY by approximate square root of number of lines. + That is the threshold for provisionally discardable lines. */ + while ((tem = tem >> 2) > 0) + many *= 2; + + for (i = 0; i < end; i++) + { + lin nmatch; + if (equivs[i] == 0) + continue; + nmatch = counts[equivs[i]]; + if (nmatch == 0) + discards[i] = 1; + else if (nmatch > many) + discards[i] = 2; + } + } + + /* Don't really discard the provisional lines except when they occur + in a run of discardables, with nonprovisionals at the beginning + and end. */ + + for (f = 0; f < 2; f++) + { + lin end = filevec[f].buffered_lines; + register char *discards = discarded[f]; + + for (i = 0; i < end; i++) + { + /* Cancel provisional discards not in middle of run of discards. */ + if (discards[i] == 2) + discards[i] = 0; + else if (discards[i] != 0) + { + /* We have found a nonprovisional discard. */ + register lin j; + lin length; + lin provisional = 0; + + /* Find end of this run of discardable lines. + Count how many are provisionally discardable. */ + for (j = i; j < end; j++) + { + if (discards[j] == 0) + break; + if (discards[j] == 2) + ++provisional; + } + + /* Cancel provisional discards at end, and shrink the run. */ + while (j > i && discards[j - 1] == 2) + discards[--j] = 0, --provisional; + + /* Now we have the length of a run of discardable lines + whose first and last are not provisional. */ + length = j - i; + + /* If 1/4 of the lines in the run are provisional, + cancel discarding of all provisional lines in the run. */ + if (provisional * 4 > length) + { + while (j > i) + if (discards[--j] == 2) + discards[j] = 0; + } + else + { + register lin consec; + lin minimum = 1; + lin tem = length >> 2; + + /* MINIMUM is approximate square root of LENGTH/4. + A subrun of two or more provisionals can stand + when LENGTH is at least 16. + A subrun of 4 or more can stand when LENGTH >= 64. */ + while (0 < (tem >>= 2)) + minimum <<= 1; + minimum++; + + /* Cancel any subrun of MINIMUM or more provisionals + within the larger run. */ + for (j = 0, consec = 0; j < length; j++) + if (discards[i + j] != 2) + consec = 0; + else if (minimum == ++consec) + /* Back up to start of subrun, to cancel it all. */ + j -= consec; + else if (minimum < consec) + discards[i + j] = 0; + + /* Scan from beginning of run + until we find 3 or more nonprovisionals in a row + or until the first nonprovisional at least 8 lines in. + Until that point, cancel any provisionals. */ + for (j = 0, consec = 0; j < length; j++) + { + if (j >= 8 && discards[i + j] == 1) + break; + if (discards[i + j] == 2) + consec = 0, discards[i + j] = 0; + else if (discards[i + j] == 0) + consec = 0; + else + consec++; + if (consec == 3) + break; + } + + /* I advances to the last line of the run. */ + i += length - 1; + + /* Same thing, from end. */ + for (j = 0, consec = 0; j < length; j++) + { + if (j >= 8 && discards[i - j] == 1) + break; + if (discards[i - j] == 2) + consec = 0, discards[i - j] = 0; + else if (discards[i - j] == 0) + consec = 0; + else + consec++; + if (consec == 3) + break; + } + } + } + } + } + + /* Actually discard the lines. */ + for (f = 0; f < 2; f++) + { + char *discards = discarded[f]; + lin end = filevec[f].buffered_lines; + lin j = 0; + for (i = 0; i < end; ++i) + if (minimal || discards[i] == 0) + { + filevec[f].undiscarded[j] = filevec[f].equivs[i]; + filevec[f].realindexes[j++] = i; + } + else + filevec[f].changed[i] = 1; + filevec[f].nondiscarded_lines = j; + } + + free (discarded[0]); + free (equiv_count[0]); +} + +/* Adjust inserts/deletes of identical lines to join changes + as much as possible. + + We do something when a run of changed lines include a + line at one end and have an excluded, identical line at the other. + We are free to choose which identical line is included. + `compareseq' usually chooses the one at the beginning, + but usually it is cleaner to consider the following identical line + to be the "change". */ + +static void +shift_boundaries (struct file_data filevec[]) +{ + int f; + + for (f = 0; f < 2; f++) + { + char *changed = filevec[f].changed; + char *other_changed = filevec[1 - f].changed; + lin const *equivs = filevec[f].equivs; + lin i = 0; + lin j = 0; + lin i_end = filevec[f].buffered_lines; + + while (1) + { + lin runlength, start, corresponding; + + /* Scan forwards to find beginning of another run of changes. + Also keep track of the corresponding point in the other file. */ + + while (i < i_end && !changed[i]) + { + while (other_changed[j++]) + continue; + i++; + } + + if (i == i_end) + break; + + start = i; + + /* Find the end of this run of changes. */ + + while (changed[++i]) + continue; + while (other_changed[j]) + j++; + + do + { + /* Record the length of this run of changes, so that + we can later determine whether the run has grown. */ + runlength = i - start; + + /* Move the changed region back, so long as the + previous unchanged line matches the last changed one. + This merges with previous changed regions. */ + + while (start && equivs[start - 1] == equivs[i - 1]) + { + changed[--start] = 1; + changed[--i] = 0; + while (changed[start - 1]) + start--; + while (other_changed[--j]) + continue; + } + + /* Set CORRESPONDING to the end of the changed run, at the last + point where it corresponds to a changed run in the other file. + CORRESPONDING == I_END means no such point has been found. */ + corresponding = other_changed[j - 1] ? i : i_end; + + /* Move the changed region forward, so long as the + first changed line matches the following unchanged one. + This merges with following changed regions. + Do this second, so that if there are no merges, + the changed region is moved forward as far as possible. */ + + while (i != i_end && equivs[start] == equivs[i]) + { + changed[start++] = 0; + changed[i++] = 1; + while (changed[i]) + i++; + while (other_changed[++j]) + corresponding = i; + } + } + while (runlength != i - start); + + /* If possible, move the fully-merged run of changes + back to a corresponding run in the other file. */ + + while (corresponding < i) + { + changed[--start] = 1; + changed[--i] = 0; + while (other_changed[--j]) + continue; + } + } + } +} + +/* Cons an additional entry onto the front of an edit script OLD. + LINE0 and LINE1 are the first affected lines in the two files (origin 0). + DELETED is the number of lines deleted here from file 0. + INSERTED is the number of lines inserted here in file 1. + + If DELETED is 0 then LINE0 is the number of the line before + which the insertion was done; vice versa for INSERTED and LINE1. */ + +static struct change * +add_change (lin line0, lin line1, lin deleted, lin inserted, + struct change *old) +{ + struct change *new = xmalloc (sizeof *new); + + new->line0 = line0; + new->line1 = line1; + new->inserted = inserted; + new->deleted = deleted; + new->link = old; + return new; +} + +/* Scan the tables of which lines are inserted and deleted, + producing an edit script in reverse order. */ + +static struct change * +build_reverse_script (struct file_data const filevec[]) +{ + struct change *script = 0; + char *changed0 = filevec[0].changed; + char *changed1 = filevec[1].changed; + lin len0 = filevec[0].buffered_lines; + lin len1 = filevec[1].buffered_lines; + + /* Note that changedN[lenN] does exist, and is 0. */ + + lin i0 = 0, i1 = 0; + + while (i0 < len0 || i1 < len1) + { + if (changed0[i0] | changed1[i1]) + { + lin line0 = i0, line1 = i1; + + /* Find # lines changed here in each file. */ + while (changed0[i0]) ++i0; + while (changed1[i1]) ++i1; + + /* Record this change. */ + script = add_change (line0, line1, i0 - line0, i1 - line1, script); + } + + /* We have reached lines in the two files that match each other. */ + i0++, i1++; + } + + return script; +} + +/* Scan the tables of which lines are inserted and deleted, + producing an edit script in forward order. */ + +static struct change * +build_script (struct file_data const filevec[]) +{ + struct change *script = 0; + char *changed0 = filevec[0].changed; + char *changed1 = filevec[1].changed; + lin i0 = filevec[0].buffered_lines, i1 = filevec[1].buffered_lines; + + /* Note that changedN[-1] does exist, and is 0. */ + + while (i0 >= 0 || i1 >= 0) + { + if (changed0[i0 - 1] | changed1[i1 - 1]) + { + lin line0 = i0, line1 = i1; + + /* Find # lines changed here in each file. */ + while (changed0[i0 - 1]) --i0; + while (changed1[i1 - 1]) --i1; + + /* Record this change. */ + script = add_change (i0, i1, line0 - i0, line1 - i1, script); + } + + /* We have reached lines in the two files that match each other. */ + i0--, i1--; + } + + return script; +} + +/* If CHANGES, briefly report that two files differed. + Return 2 if trouble, CHANGES otherwise. */ +static int +briefly_report (int changes, struct file_data const filevec[]) +{ + if (changes) + { + char const *label0 = file_label[0] ? file_label[0] : filevec[0].name; + char const *label1 = file_label[1] ? file_label[1] : filevec[1].name; + + if (brief) + message ("Files %s and %s differ\n", label0, label1); + else + { + message ("Binary files %s and %s differ\n", label0, label1); + changes = 2; + } + } + + return changes; +} + +/* Report the differences of two files. */ +int +diff_2_files (struct comparison *cmp) +{ + int f; + struct change *e, *p; + struct change *script; + int changes; + + + /* If we have detected that either file is binary, + compare the two files as binary. This can happen + only when the first chunk is read. + Also, --brief without any --ignore-* options means + we can speed things up by treating the files as binary. */ + + if (read_files (cmp->file, files_can_be_treated_as_binary)) + { + /* Files with different lengths must be different. */ + if (cmp->file[0].stat.st_size != cmp->file[1].stat.st_size + && (cmp->file[0].desc < 0 || S_ISREG (cmp->file[0].stat.st_mode)) + && (cmp->file[1].desc < 0 || S_ISREG (cmp->file[1].stat.st_mode))) + changes = 1; + + /* Standard input equals itself. */ + else if (cmp->file[0].desc == cmp->file[1].desc) + changes = 0; + + else + /* Scan both files, a buffer at a time, looking for a difference. */ + { + /* Allocate same-sized buffers for both files. */ + size_t lcm_max = PTRDIFF_MAX - 1; + size_t buffer_size = + buffer_lcm (sizeof (word), + buffer_lcm (STAT_BLOCKSIZE (cmp->file[0].stat), + STAT_BLOCKSIZE (cmp->file[1].stat), + lcm_max), + lcm_max); + for (f = 0; f < 2; f++) + cmp->file[f].buffer = xrealloc (cmp->file[f].buffer, buffer_size); + + for (;; cmp->file[0].buffered = cmp->file[1].buffered = 0) + { + /* Read a buffer's worth from both files. */ + for (f = 0; f < 2; f++) + if (0 <= cmp->file[f].desc) + file_block_read (&cmp->file[f], + buffer_size - cmp->file[f].buffered); + + /* If the buffers differ, the files differ. */ + if (cmp->file[0].buffered != cmp->file[1].buffered + || memcmp (cmp->file[0].buffer, + cmp->file[1].buffer, + cmp->file[0].buffered)) + { + changes = 1; + break; + } + + /* If we reach end of file, the files are the same. */ + if (cmp->file[0].buffered != buffer_size) + { + changes = 0; + break; + } + } + } + + changes = briefly_report (changes, cmp->file); + } + else + { + struct context ctxt; + lin diags; + lin too_expensive; + + /* Allocate vectors for the results of comparison: + a flag for each line of each file, saying whether that line + is an insertion or deletion. + Allocate an extra element, always 0, at each end of each vector. */ + + size_t s = cmp->file[0].buffered_lines + cmp->file[1].buffered_lines + 4; + char *flag_space = zalloc (s); + cmp->file[0].changed = flag_space + 1; + cmp->file[1].changed = flag_space + cmp->file[0].buffered_lines + 3; + + /* Some lines are obviously insertions or deletions + because they don't match anything. Detect them now, and + avoid even thinking about them in the main comparison algorithm. */ + + discard_confusing_lines (cmp->file); + + /* Now do the main comparison algorithm, considering just the + undiscarded lines. */ + + ctxt.xvec = cmp->file[0].undiscarded; + ctxt.yvec = cmp->file[1].undiscarded; + diags = (cmp->file[0].nondiscarded_lines + + cmp->file[1].nondiscarded_lines + 3); + ctxt.fdiag = xmalloc (diags * (2 * sizeof *ctxt.fdiag)); + ctxt.bdiag = ctxt.fdiag + diags; + ctxt.fdiag += cmp->file[1].nondiscarded_lines + 1; + ctxt.bdiag += cmp->file[1].nondiscarded_lines + 1; + + ctxt.heuristic = speed_large_files; + + /* Set TOO_EXPENSIVE to be approximate square root of input size, + bounded below by 256. */ + too_expensive = 1; + for (; diags != 0; diags >>= 2) + too_expensive <<= 1; + ctxt.too_expensive = MAX (256, too_expensive); + + files[0] = cmp->file[0]; + files[1] = cmp->file[1]; + + compareseq (0, cmp->file[0].nondiscarded_lines, + 0, cmp->file[1].nondiscarded_lines, minimal, &ctxt); + + free (ctxt.fdiag - (cmp->file[1].nondiscarded_lines + 1)); + + /* Modify the results slightly to make them prettier + in cases where that can validly be done. */ + + shift_boundaries (cmp->file); + + /* Get the results of comparison in the form of a chain + of `struct change's -- an edit script. */ + + if (output_style == OUTPUT_ED) + script = build_reverse_script (cmp->file); + else + script = build_script (cmp->file); + + /* Set CHANGES if we had any diffs. + If some changes are ignored, we must scan the script to decide. */ + if (ignore_blank_lines || ignore_regexp.fastmap) + { + struct change *next = script; + changes = 0; + + while (next && changes == 0) + { + struct change *this, *end; + lin first0, last0, first1, last1; + + /* Find a set of changes that belong together. */ + this = next; + end = find_change (next); + + /* Disconnect them from the rest of the changes, making them + a hunk, and remember the rest for next iteration. */ + next = end->link; + end->link = 0; + + /* Determine whether this hunk is really a difference. */ + if (analyze_hunk (this, &first0, &last0, &first1, &last1)) + changes = 1; + + /* Reconnect the script so it will all be freed properly. */ + end->link = next; + } + } + else + changes = (script != 0); + + if (brief) + changes = briefly_report (changes, cmp->file); + else + { + if (changes || !no_diff_means_no_output) + { + /* Record info for starting up output, + to be used if and when we have some output to print. */ + setup_output (file_label[0] ? file_label[0] : cmp->file[0].name, + file_label[1] ? file_label[1] : cmp->file[1].name, + cmp->parent != 0); + + switch (output_style) + { + case OUTPUT_CONTEXT: + print_context_script (script, false); + break; + + case OUTPUT_UNIFIED: + print_context_script (script, true); + break; + + case OUTPUT_ED: + print_ed_script (script); + break; + + case OUTPUT_FORWARD_ED: + pr_forward_ed_script (script); + break; + + case OUTPUT_RCS: + print_rcs_script (script); + break; + + case OUTPUT_NORMAL: + print_normal_script (script); + break; + + case OUTPUT_IFDEF: + print_ifdef_script (script); + break; + + case OUTPUT_SDIFF: + print_sdiff_script (script); + break; + + default: + abort (); + } + + finish_output (); + } + } + + free (cmp->file[0].undiscarded); + + free (flag_space); + + for (f = 0; f < 2; f++) + { + free (cmp->file[f].equivs); + free (cmp->file[f].linbuf + cmp->file[f].linbuf_base); + } + + for (e = script; e; e = p) + { + p = e->link; + free (e); + } + + if (! ROBUST_OUTPUT_STYLE (output_style)) + for (f = 0; f < 2; ++f) + if (cmp->file[f].missing_newline) + { + error (0, 0, "%s: %s\n", + file_label[f] ? file_label[f] : cmp->file[f].name, + _("No newline at end of file")); + changes = 2; + } + } + + if (cmp->file[0].buffer != cmp->file[1].buffer) + free (cmp->file[0].buffer); + free (cmp->file[1].buffer); + + return changes; +} diff --git a/src/cmp.c b/src/cmp.c new file mode 100644 index 0000000..2455dc4 --- /dev/null +++ b/src/cmp.c @@ -0,0 +1,685 @@ +/* cmp - compare two files byte by byte + + Copyright (C) 1990-1996, 1998, 2001-2002, 2004, 2006-2007, 2009-2010 Free + Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "system.h" +#include "paths.h" + +#include <stdio.h> + +#include <c-stack.h> +#include <cmpbuf.h> +#include <error.h> +#include <exitfail.h> +#include <file-type.h> +#include <getopt.h> +#include <hard-locale.h> +#include <inttostr.h> +#include <progname.h> +#include <unlocked-io.h> +#include <version-etc.h> +#include <xalloc.h> +#include <xfreopen.h> +#include <xstrtol.h> + +/* The official name of this program (e.g., no `g' prefix). */ +#define PROGRAM_NAME "cmp" + +#define AUTHORS \ + proper_name_utf8 ("Torbjorn Granlund", "Torbj\303\266rn Granlund"), \ + proper_name ("David MacKenzie") + +#if defined LC_MESSAGES && ENABLE_NLS +# define hard_locale_LC_MESSAGES hard_locale (LC_MESSAGES) +#else +# define hard_locale_LC_MESSAGES 0 +#endif + +static int cmp (void); +static off_t file_position (int); +static size_t block_compare (word const *, word const *); +static size_t block_compare_and_count (word const *, word const *, off_t *); +static void sprintc (char *, unsigned char); + +/* Filenames of the compared files. */ +static char const *file[2]; + +/* File descriptors of the files. */ +static int file_desc[2]; + +/* Status of the files. */ +static struct stat stat_buf[2]; + +/* Read buffers for the files. */ +static word *buffer[2]; + +/* Optimal block size for the files. */ +static size_t buf_size; + +/* Initial prefix to ignore for each file. */ +static off_t ignore_initial[2]; + +/* Number of bytes to compare. */ +static uintmax_t bytes = UINTMAX_MAX; + +/* Output format. */ +static enum comparison_type + { + type_first_diff, /* Print the first difference. */ + type_all_diffs, /* Print all differences. */ + type_no_stdout, /* Do not output to stdout; only stderr. */ + type_status /* Exit status only. */ + } comparison_type; + +/* If nonzero, print values of bytes quoted like cat -t does. */ +static bool opt_print_bytes; + +/* Values for long options that do not have single-letter equivalents. */ +enum +{ + HELP_OPTION = CHAR_MAX + 1 +}; + +static struct option const long_options[] = +{ + {"print-bytes", 0, 0, 'b'}, + {"print-chars", 0, 0, 'c'}, /* obsolescent as of diffutils 2.7.3 */ + {"ignore-initial", 1, 0, 'i'}, + {"verbose", 0, 0, 'l'}, + {"bytes", 1, 0, 'n'}, + {"silent", 0, 0, 's'}, + {"quiet", 0, 0, 's'}, + {"version", 0, 0, 'v'}, + {"help", 0, 0, HELP_OPTION}, + {0, 0, 0, 0} +}; + +static void try_help (char const *, char const *) __attribute__((noreturn)); +static void +try_help (char const *reason_msgid, char const *operand) +{ + if (reason_msgid) + error (0, 0, _(reason_msgid), operand); + error (EXIT_TROUBLE, 0, + _("Try `%s --help' for more information."), program_name); + abort (); +} + +static char const valid_suffixes[] = "kKMGTPEZY0"; + +/* Update ignore_initial[F] according to the result of parsing an + *operand ARGPTR of --ignore-initial, updating *ARGPTR to point + *after the operand. If DELIMITER is nonzero, the operand may be + *followed by DELIMITER; otherwise it must be null-terminated. */ +static void +specify_ignore_initial (int f, char **argptr, char delimiter) +{ + uintmax_t val; + char const *arg = *argptr; + strtol_error e = xstrtoumax (arg, argptr, 0, &val, valid_suffixes); + if (! (e == LONGINT_OK + || (e == LONGINT_INVALID_SUFFIX_CHAR && **argptr == delimiter)) + || TYPE_MAXIMUM (off_t) < val) + try_help ("invalid --ignore-initial value `%s'", arg); + if (ignore_initial[f] < val) + ignore_initial[f] = val; +} + +/* Specify the output format. */ +static void +specify_comparison_type (enum comparison_type t) +{ + if (comparison_type && comparison_type != t) + try_help ("options -l and -s are incompatible", 0); + comparison_type = t; +} + +static void +check_stdout (void) +{ + if (ferror (stdout)) + error (EXIT_TROUBLE, 0, "%s", _("write failed")); + else if (fclose (stdout) != 0) + error (EXIT_TROUBLE, errno, "%s", _("standard output")); +} + +static char const * const option_help_msgid[] = { + N_("-b --print-bytes Print differing bytes."), + N_("-i SKIP --ignore-initial=SKIP Skip the first SKIP bytes of input."), + N_("-i SKIP1:SKIP2 --ignore-initial=SKIP1:SKIP2"), + N_(" Skip the first SKIP1 bytes of FILE1 and the first SKIP2 bytes of FILE2."), + N_("-l --verbose Output byte numbers and values of all differing bytes."), + N_("-n LIMIT --bytes=LIMIT Compare at most LIMIT bytes."), + N_("-s --quiet --silent Output nothing; yield exit status only."), + N_("-v --version Output version info."), + N_("--help Output this help."), + 0 +}; + +static void +usage (void) +{ + char const * const *p; + + printf (_("Usage: %s [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]\n"), + program_name); + printf ("%s\n\n", _("Compare two files byte by byte.")); + for (p = option_help_msgid; *p; p++) + printf (" %s\n", _(*p)); + printf ("\n%s\n%s\n\n%s\n%s\n", + _("SKIP1 and SKIP2 are the number of bytes to skip in each file."), + _("SKIP values may be followed by the following multiplicative suffixes:\n\ +kB 1000, K 1024, MB 1,000,000, M 1,048,576,\n\ +GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y."), + _("If a FILE is `-' or missing, read standard input."), + _("Exit status is 0 if inputs are the same, 1 if different, 2 if trouble.")); + emit_bug_reporting_address (); +} + +int +main (int argc, char **argv) +{ + int c, f, exit_status; + size_t words_per_buffer; + + exit_failure = EXIT_TROUBLE; + initialize_main (&argc, &argv); + set_program_name (argv[0]); + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + c_stack_action (0); + + /* Parse command line options. */ + + while ((c = getopt_long (argc, argv, "bci:ln:sv", long_options, 0)) + != -1) + switch (c) + { + case 'b': + case 'c': /* 'c' is obsolescent as of diffutils 2.7.3 */ + opt_print_bytes = true; + break; + + case 'i': + specify_ignore_initial (0, &optarg, ':'); + if (*optarg++ == ':') + specify_ignore_initial (1, &optarg, 0); + else if (ignore_initial[1] < ignore_initial[0]) + ignore_initial[1] = ignore_initial[0]; + break; + + case 'l': + specify_comparison_type (type_all_diffs); + break; + + case 'n': + { + uintmax_t n; + if (xstrtoumax (optarg, 0, 0, &n, valid_suffixes) != LONGINT_OK) + try_help ("invalid --bytes value `%s'", optarg); + if (n < bytes) + bytes = n; + } + break; + + case 's': + specify_comparison_type (type_status); + break; + + case 'v': + version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, PACKAGE_VERSION, + AUTHORS, (char *) NULL); + check_stdout (); + return EXIT_SUCCESS; + + case HELP_OPTION: + usage (); + check_stdout (); + return EXIT_SUCCESS; + + default: + try_help (0, 0); + } + + if (optind == argc) + try_help ("missing operand after `%s'", argv[argc - 1]); + + file[0] = argv[optind++]; + file[1] = optind < argc ? argv[optind++] : "-"; + + for (f = 0; f < 2 && optind < argc; f++) + { + char *arg = argv[optind++]; + specify_ignore_initial (f, &arg, 0); + } + + if (optind < argc) + try_help ("extra operand `%s'", argv[optind]); + + for (f = 0; f < 2; f++) + { + /* If file[1] is "-", treat it first; this avoids a misdiagnostic if + stdin is closed and opening file[0] yields file descriptor 0. */ + int f1 = f ^ (STREQ (file[1], "-")); + + /* Two files with the same name and offset are identical. + But wait until we open the file once, for proper diagnostics. */ + if (f && ignore_initial[0] == ignore_initial[1] + && file_name_cmp (file[0], file[1]) == 0) + return EXIT_SUCCESS; + + if (STREQ (file[f1], "-")) + { + file_desc[f1] = STDIN_FILENO; + if (O_BINARY && ! isatty (STDIN_FILENO)) + xfreopen (NULL, "rb", stdin); + } + else + file_desc[f1] = open (file[f1], O_RDONLY | O_BINARY, 0); + + if (file_desc[f1] < 0 || fstat (file_desc[f1], stat_buf + f1) != 0) + { + if (file_desc[f1] < 0 && comparison_type == type_status) + exit (EXIT_TROUBLE); + else + error (EXIT_TROUBLE, errno, "%s", file[f1]); + } + } + + /* If the files are links to the same inode and have the same file position, + they are identical. */ + + if (0 < same_file (&stat_buf[0], &stat_buf[1]) + && same_file_attributes (&stat_buf[0], &stat_buf[1]) + && file_position (0) == file_position (1)) + return EXIT_SUCCESS; + + /* If output is redirected to the null device, we can avoid some of + the work. */ + + if (comparison_type != type_status) + { + struct stat outstat, nullstat; + + if (fstat (STDOUT_FILENO, &outstat) == 0 + && stat (NULL_DEVICE, &nullstat) == 0 + && 0 < same_file (&outstat, &nullstat)) + comparison_type = type_no_stdout; + } + + /* If only a return code is needed, + and if both input descriptors are associated with plain files, + conclude that the files differ if they have different sizes + and if more bytes will be compared than are in the smaller file. */ + + if (comparison_type == type_status + && S_ISREG (stat_buf[0].st_mode) + && S_ISREG (stat_buf[1].st_mode)) + { + off_t s0 = stat_buf[0].st_size - file_position (0); + off_t s1 = stat_buf[1].st_size - file_position (1); + if (s0 < 0) + s0 = 0; + if (s1 < 0) + s1 = 0; + if (s0 != s1 && MIN (s0, s1) < bytes) + exit (EXIT_FAILURE); + } + + /* Get the optimal block size of the files. */ + + buf_size = buffer_lcm (STAT_BLOCKSIZE (stat_buf[0]), + STAT_BLOCKSIZE (stat_buf[1]), + PTRDIFF_MAX - sizeof (word)); + + /* Allocate word-aligned buffers, with space for sentinels at the end. */ + + words_per_buffer = (buf_size + 2 * sizeof (word) - 1) / sizeof (word); + buffer[0] = xmalloc (2 * sizeof (word) * words_per_buffer); + buffer[1] = buffer[0] + words_per_buffer; + + exit_status = cmp (); + + for (f = 0; f < 2; f++) + if (close (file_desc[f]) != 0) + error (EXIT_TROUBLE, errno, "%s", file[f]); + if (exit_status != EXIT_SUCCESS && comparison_type < type_no_stdout) + check_stdout (); + exit (exit_status); + return exit_status; +} + +/* Compare the two files already open on `file_desc[0]' and `file_desc[1]', + using `buffer[0]' and `buffer[1]'. + Return EXIT_SUCCESS if identical, EXIT_FAILURE if different, + >1 if error. */ + +static int +cmp (void) +{ + off_t line_number = 1; /* Line number (1...) of difference. */ + off_t byte_number = 1; /* Byte number (1...) of difference. */ + uintmax_t remaining = bytes; /* Remaining number of bytes to compare. */ + size_t read0, read1; /* Number of bytes read from each file. */ + size_t first_diff; /* Offset (0...) in buffers of 1st diff. */ + size_t smaller; /* The lesser of `read0' and `read1'. */ + word *buffer0 = buffer[0]; + word *buffer1 = buffer[1]; + char *buf0 = (char *) buffer0; + char *buf1 = (char *) buffer1; + int differing = 0; + int f; + int offset_width IF_LINT (= 0); + + if (comparison_type == type_all_diffs) + { + off_t byte_number_max = MIN (bytes, TYPE_MAXIMUM (off_t)); + + for (f = 0; f < 2; f++) + if (S_ISREG (stat_buf[f].st_mode)) + { + off_t file_bytes = stat_buf[f].st_size - file_position (f); + if (file_bytes < byte_number_max) + byte_number_max = file_bytes; + } + + for (offset_width = 1; (byte_number_max /= 10) != 0; offset_width++) + continue; + } + + for (f = 0; f < 2; f++) + { + off_t ig = ignore_initial[f]; + if (ig && file_position (f) == -1) + { + /* lseek failed; read and discard the ignored initial prefix. */ + do + { + size_t bytes_to_read = MIN (ig, buf_size); + size_t r = block_read (file_desc[f], buf0, bytes_to_read); + if (r != bytes_to_read) + { + if (r == SIZE_MAX) + error (EXIT_TROUBLE, errno, "%s", file[f]); + break; + } + ig -= r; + } + while (ig); + } + } + + do + { + size_t bytes_to_read = buf_size; + + if (remaining != UINTMAX_MAX) + { + if (remaining < bytes_to_read) + bytes_to_read = remaining; + remaining -= bytes_to_read; + } + + read0 = block_read (file_desc[0], buf0, bytes_to_read); + if (read0 == SIZE_MAX) + error (EXIT_TROUBLE, errno, "%s", file[0]); + read1 = block_read (file_desc[1], buf1, bytes_to_read); + if (read1 == SIZE_MAX) + error (EXIT_TROUBLE, errno, "%s", file[1]); + + /* Insert sentinels for the block compare. */ + + buf0[read0] = ~buf1[read0]; + buf1[read1] = ~buf0[read1]; + + /* If the line number should be written for differing files, + compare the blocks and count the number of newlines + simultaneously. */ + first_diff = (comparison_type == type_first_diff + ? block_compare_and_count (buffer0, buffer1, &line_number) + : block_compare (buffer0, buffer1)); + + byte_number += first_diff; + smaller = MIN (read0, read1); + + if (first_diff < smaller) + { + switch (comparison_type) + { + case type_first_diff: + { + char byte_buf[INT_BUFSIZE_BOUND (off_t)]; + char line_buf[INT_BUFSIZE_BOUND (off_t)]; + char const *byte_num = offtostr (byte_number, byte_buf); + char const *line_num = offtostr (line_number, line_buf); + if (!opt_print_bytes) + { + /* See POSIX 1003.1-2001 for this format. This + message is used only in the POSIX locale, so it + need not be translated. */ + static char const char_message[] = + "%s %s differ: char %s, line %s\n"; + + /* The POSIX rationale recommends using the word + "byte" outside the POSIX locale. Some gettext + implementations translate even in the POSIX + locale if certain other environment variables + are set, so use "byte" if a translation is + available, or if outside the POSIX locale. */ + static char const byte_msgid[] = + N_("%s %s differ: byte %s, line %s\n"); + char const *byte_message = _(byte_msgid); + bool use_byte_message = (byte_message != byte_msgid + || hard_locale_LC_MESSAGES); + + printf (use_byte_message ? byte_message : char_message, + file[0], file[1], byte_num, line_num); + } + else + { + unsigned char c0 = buf0[first_diff]; + unsigned char c1 = buf1[first_diff]; + char s0[5]; + char s1[5]; + sprintc (s0, c0); + sprintc (s1, c1); + printf (_("%s %s differ: byte %s, line %s is %3o %s %3o %s\n"), + file[0], file[1], byte_num, line_num, + c0, s0, c1, s1); + } + } + /* Fall through. */ + case type_status: + return EXIT_FAILURE; + + case type_all_diffs: + do + { + unsigned char c0 = buf0[first_diff]; + unsigned char c1 = buf1[first_diff]; + if (c0 != c1) + { + char byte_buf[INT_BUFSIZE_BOUND (off_t)]; + char const *byte_num = offtostr (byte_number, byte_buf); + if (!opt_print_bytes) + { + /* See POSIX 1003.1-2001 for this format. */ + printf ("%*s %3o %3o\n", + offset_width, byte_num, c0, c1); + } + else + { + char s0[5]; + char s1[5]; + sprintc (s0, c0); + sprintc (s1, c1); + printf ("%*s %3o %-4s %3o %s\n", + offset_width, byte_num, c0, s0, c1, s1); + } + } + byte_number++; + first_diff++; + } + while (first_diff < smaller); + differing = -1; + break; + + case type_no_stdout: + differing = 1; + break; + } + } + + if (read0 != read1) + { + if (differing <= 0 && comparison_type != type_status) + { + /* See POSIX 1003.1-2001 for this format. */ + fprintf (stderr, _("cmp: EOF on %s\n"), file[read1 < read0]); + } + + return EXIT_FAILURE; + } + } + while (differing <= 0 && read0 == buf_size); + + return differing == 0 ? EXIT_SUCCESS : EXIT_FAILURE; +} + +/* Compare two blocks of memory P0 and P1 until they differ, + and count the number of '\n' occurrences in the common + part of P0 and P1. + If the blocks are not guaranteed to be different, put sentinels at the ends + of the blocks before calling this function. + + Return the offset of the first byte that differs. + Increment *COUNT by the count of '\n' occurrences. */ + +static size_t +block_compare_and_count (word const *p0, word const *p1, off_t *count) +{ + word l; /* One word from first buffer. */ + word const *l0, *l1; /* Pointers into each buffer. */ + char const *c0, *c1; /* Pointers for finding exact address. */ + size_t cnt = 0; /* Number of '\n' occurrences. */ + word nnnn; /* Newline, sizeof (word) times. */ + int i; + + nnnn = 0; + for (i = 0; i < sizeof nnnn; i++) + nnnn = (nnnn << CHAR_BIT) | '\n'; + + /* Find the rough position of the first difference by reading words, + not bytes. */ + + for (l0 = p0, l1 = p1; (l = *l0) == *l1; l0++, l1++) + { + l ^= nnnn; + for (i = 0; i < sizeof l; i++) + { + unsigned char uc = l; + cnt += ! uc; + l >>= CHAR_BIT; + } + } + + /* Find the exact differing position (endianness independent). */ + + for (c0 = (char const *) l0, c1 = (char const *) l1; + *c0 == *c1; + c0++, c1++) + cnt += *c0 == '\n'; + + *count += cnt; + return c0 - (char const *) p0; +} + +/* Compare two blocks of memory P0 and P1 until they differ. + If the blocks are not guaranteed to be different, put sentinels at the ends + of the blocks before calling this function. + + Return the offset of the first byte that differs. */ + +static size_t +block_compare (word const *p0, word const *p1) +{ + word const *l0, *l1; + char const *c0, *c1; + + /* Find the rough position of the first difference by reading words, + not bytes. */ + + for (l0 = p0, l1 = p1; *l0 == *l1; l0++, l1++) + continue; + + /* Find the exact differing position (endianness independent). */ + + for (c0 = (char const *) l0, c1 = (char const *) l1; + *c0 == *c1; + c0++, c1++) + continue; + + return c0 - (char const *) p0; +} + +/* Put into BUF the unsigned char C, making unprintable bytes + visible by quoting like cat -t does. */ + +static void +sprintc (char *buf, unsigned char c) +{ + if (! isprint (c)) + { + if (c >= 128) + { + *buf++ = 'M'; + *buf++ = '-'; + c -= 128; + } + if (c < 32) + { + *buf++ = '^'; + c += 64; + } + else if (c == 127) + { + *buf++ = '^'; + c = '?'; + } + } + + *buf++ = c; + *buf = 0; +} + +/* Position file F to ignore_initial[F] bytes from its initial position, + and yield its new position. Don't try more than once. */ + +static off_t +file_position (int f) +{ + static bool positioned[2]; + static off_t position[2]; + + if (! positioned[f]) + { + positioned[f] = true; + position[f] = lseek (file_desc[f], ignore_initial[f], SEEK_CUR); + } + return position[f]; +} diff --git a/src/context.c b/src/context.c new file mode 100644 index 0000000..0be8cc5 --- /dev/null +++ b/src/context.c @@ -0,0 +1,493 @@ +/* Context-format output routines for GNU DIFF. + + Copyright (C) 1988-1989, 1991-1995, 1998, 2001-2002, 2004, 2006, 2009-2010 + Free Software Foundation, Inc. + + This file is part of GNU DIFF. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "diff.h" +#include "c-ctype.h" +#include <inttostr.h> +#include <stat-time.h> +#include <strftime.h> + +static char const *find_function (char const * const *, lin); +static struct change *find_hunk (struct change *); +static void mark_ignorable (struct change *); +static void pr_context_hunk (struct change *); +static void pr_unidiff_hunk (struct change *); + +/* Last place find_function started searching from. */ +static lin find_function_last_search; + +/* The value find_function returned when it started searching there. */ +static lin find_function_last_match; + +/* Print a label for a context diff, with a file name and date or a label. */ + +static void +print_context_label (char const *mark, + struct file_data *inf, + char const *label) +{ + if (label) + fprintf (outfile, "%s %s\n", mark, label); + else + { + char buf[MAX (INT_STRLEN_BOUND (int) + 32, + INT_STRLEN_BOUND (time_t) + 11)]; + struct tm const *tm = localtime (&inf->stat.st_mtime); + int nsec = get_stat_mtime_ns (&inf->stat); + if (! (tm && nstrftime (buf, sizeof buf, time_format, tm, 0, nsec))) + { + verify (TYPE_IS_INTEGER (time_t)); + if (LONG_MIN <= TYPE_MINIMUM (time_t) + && TYPE_MAXIMUM (time_t) <= LONG_MAX) + { + long int sec = inf->stat.st_mtime; + sprintf (buf, "%ld.%.9d", sec, nsec); + } + else if (TYPE_MAXIMUM (time_t) <= INTMAX_MAX) + { + intmax_t sec = inf->stat.st_mtime; + sprintf (buf, "%"PRIdMAX".%.9d", sec, nsec); + } + else + { + uintmax_t sec = inf->stat.st_mtime; + sprintf (buf, "%"PRIuMAX".%.9d", sec, nsec); + } + } + fprintf (outfile, "%s %s\t%s\n", mark, inf->name, buf); + } +} + +/* Print a header for a context diff, with the file names and dates. */ + +void +print_context_header (struct file_data inf[], bool unidiff) +{ + if (unidiff) + { + print_context_label ("---", &inf[0], file_label[0]); + print_context_label ("+++", &inf[1], file_label[1]); + } + else + { + print_context_label ("***", &inf[0], file_label[0]); + print_context_label ("---", &inf[1], file_label[1]); + } +} + +/* Print an edit script in context format. */ + +void +print_context_script (struct change *script, bool unidiff) +{ + if (ignore_blank_lines || ignore_regexp.fastmap) + mark_ignorable (script); + else + { + struct change *e; + for (e = script; e; e = e->link) + e->ignore = false; + } + + find_function_last_search = - files[0].prefix_lines; + find_function_last_match = LIN_MAX; + + if (unidiff) + print_script (script, find_hunk, pr_unidiff_hunk); + else + print_script (script, find_hunk, pr_context_hunk); +} + +/* Print a pair of line numbers with a comma, translated for file FILE. + If the second number is not greater, use the first in place of it. + + Args A and B are internal line numbers. + We print the translated (real) line numbers. */ + +static void +print_context_number_range (struct file_data const *file, lin a, lin b) +{ + long int trans_a, trans_b; + translate_range (file, a, b, &trans_a, &trans_b); + + /* We can have B <= A in the case of a range of no lines. + In this case, we should print the line number before the range, + which is B. + + POSIX 1003.1-2001 requires two line numbers separated by a comma + even if the line numbers are the same. However, this does not + match existing practice and is surely an error in the + specification. */ + + if (trans_b <= trans_a) + fprintf (outfile, "%ld", trans_b); + else + fprintf (outfile, "%ld,%ld", trans_a, trans_b); +} + +/* Print FUNCTION in a context header. */ +static void +print_context_function (FILE *out, char const *function) +{ + int i, j; + putc (' ', out); + for (i = 0; c_isspace ((unsigned char) function[i]) && function[i] != '\n'; i++) + continue; + for (j = i; j < i + 40 && function[j] != '\n'; j++) + continue; + while (i < j && c_isspace ((unsigned char) function[j - 1])) + j--; + fwrite (function + i, sizeof (char), j - i, out); +} + +/* Print a portion of an edit script in context format. + HUNK is the beginning of the portion to be printed. + The end is marked by a `link' that has been nulled out. + + Prints out lines from both files, and precedes each + line with the appropriate flag-character. */ + +static void +pr_context_hunk (struct change *hunk) +{ + lin first0, last0, first1, last1, i; + char const *prefix; + char const *function; + FILE *out; + + /* Determine range of line numbers involved in each file. */ + + enum changes changes = analyze_hunk (hunk, &first0, &last0, &first1, &last1); + if (! changes) + return; + + /* Include a context's width before and after. */ + + i = - files[0].prefix_lines; + first0 = MAX (first0 - context, i); + first1 = MAX (first1 - context, i); + if (last0 < files[0].valid_lines - context) + last0 += context; + else + last0 = files[0].valid_lines - 1; + if (last1 < files[1].valid_lines - context) + last1 += context; + else + last1 = files[1].valid_lines - 1; + + /* If desired, find the preceding function definition line in file 0. */ + function = NULL; + if (function_regexp.fastmap) + function = find_function (files[0].linbuf, first0); + + begin_output (); + out = outfile; + + fputs ("***************", out); + + if (function) + print_context_function (out, function); + + fputs ("\n*** ", out); + print_context_number_range (&files[0], first0, last0); + fputs (" ****\n", out); + + if (changes & OLD) + { + struct change *next = hunk; + + for (i = first0; i <= last0; i++) + { + /* Skip past changes that apply (in file 0) + only to lines before line I. */ + + while (next && next->line0 + next->deleted <= i) + next = next->link; + + /* Compute the marking for line I. */ + + prefix = " "; + if (next && next->line0 <= i) + /* The change NEXT covers this line. + If lines were inserted here in file 1, this is "changed". + Otherwise it is "deleted". */ + prefix = (next->inserted > 0 ? "!" : "-"); + + print_1_line (prefix, &files[0].linbuf[i]); + } + } + + fputs ("--- ", out); + print_context_number_range (&files[1], first1, last1); + fputs (" ----\n", out); + + if (changes & NEW) + { + struct change *next = hunk; + + for (i = first1; i <= last1; i++) + { + /* Skip past changes that apply (in file 1) + only to lines before line I. */ + + while (next && next->line1 + next->inserted <= i) + next = next->link; + + /* Compute the marking for line I. */ + + prefix = " "; + if (next && next->line1 <= i) + /* The change NEXT covers this line. + If lines were deleted here in file 0, this is "changed". + Otherwise it is "inserted". */ + prefix = (next->deleted > 0 ? "!" : "+"); + + print_1_line (prefix, &files[1].linbuf[i]); + } + } +} + +/* Print a pair of line numbers with a comma, translated for file FILE. + If the second number is smaller, use the first in place of it. + If the numbers are equal, print just one number. + + Args A and B are internal line numbers. + We print the translated (real) line numbers. */ + +static void +print_unidiff_number_range (struct file_data const *file, lin a, lin b) +{ + long int trans_a, trans_b; + translate_range (file, a, b, &trans_a, &trans_b); + + /* We can have B < A in the case of a range of no lines. + In this case, we print the line number before the range, + which is B. It would be more logical to print A, but + 'patch' expects B in order to detect diffs against empty files. */ + if (trans_b <= trans_a) + fprintf (outfile, trans_b < trans_a ? "%ld,0" : "%ld", trans_b); + else + fprintf (outfile, "%ld,%ld", trans_a, trans_b - trans_a + 1); +} + +/* Print a portion of an edit script in unidiff format. + HUNK is the beginning of the portion to be printed. + The end is marked by a `link' that has been nulled out. + + Prints out lines from both files, and precedes each + line with the appropriate flag-character. */ + +static void +pr_unidiff_hunk (struct change *hunk) +{ + lin first0, last0, first1, last1; + lin i, j, k; + struct change *next; + char const *function; + FILE *out; + + /* Determine range of line numbers involved in each file. */ + + if (! analyze_hunk (hunk, &first0, &last0, &first1, &last1)) + return; + + /* Include a context's width before and after. */ + + i = - files[0].prefix_lines; + first0 = MAX (first0 - context, i); + first1 = MAX (first1 - context, i); + if (last0 < files[0].valid_lines - context) + last0 += context; + else + last0 = files[0].valid_lines - 1; + if (last1 < files[1].valid_lines - context) + last1 += context; + else + last1 = files[1].valid_lines - 1; + + /* If desired, find the preceding function definition line in file 0. */ + function = NULL; + if (function_regexp.fastmap) + function = find_function (files[0].linbuf, first0); + + begin_output (); + out = outfile; + + fputs ("@@ -", out); + print_unidiff_number_range (&files[0], first0, last0); + fputs (" +", out); + print_unidiff_number_range (&files[1], first1, last1); + fputs (" @@", out); + + if (function) + print_context_function (out, function); + + putc ('\n', out); + + next = hunk; + i = first0; + j = first1; + + while (i <= last0 || j <= last1) + { + + /* If the line isn't a difference, output the context from file 0. */ + + if (!next || i < next->line0) + { + char const *const *line = &files[0].linbuf[i++]; + if (! (suppress_blank_empty && **line == '\n')) + putc (initial_tab ? '\t' : ' ', out); + print_1_line (NULL, line); + j++; + } + else + { + /* For each difference, first output the deleted part. */ + + k = next->deleted; + while (k--) + { + char const * const *line = &files[0].linbuf[i++]; + putc ('-', out); + if (initial_tab && ! (suppress_blank_empty && **line == '\n')) + putc ('\t', out); + print_1_line (NULL, line); + } + + /* Then output the inserted part. */ + + k = next->inserted; + while (k--) + { + char const * const *line = &files[1].linbuf[j++]; + putc ('+', out); + if (initial_tab && ! (suppress_blank_empty && **line == '\n')) + putc ('\t', out); + print_1_line (NULL, line); + } + + /* We're done with this hunk, so on to the next! */ + + next = next->link; + } + } +} + +/* Scan a (forward-ordered) edit script for the first place that more than + 2*CONTEXT unchanged lines appear, and return a pointer + to the `struct change' for the last change before those lines. */ + +static struct change * +find_hunk (struct change *start) +{ + struct change *prev; + lin top0, top1; + lin thresh; + + /* Threshold distance is 2 * CONTEXT + 1 between two non-ignorable + changes, but only CONTEXT if one is ignorable. Watch out for + integer overflow, though. */ + lin non_ignorable_threshold = + (LIN_MAX - 1) / 2 < context ? LIN_MAX : 2 * context + 1; + lin ignorable_threshold = context; + + do + { + /* Compute number of first line in each file beyond this changed. */ + top0 = start->line0 + start->deleted; + top1 = start->line1 + start->inserted; + prev = start; + start = start->link; + thresh = (prev->ignore || (start && start->ignore) + ? ignorable_threshold + : non_ignorable_threshold); + /* It is not supposed to matter which file we check in the end-test. + If it would matter, crash. */ + if (start && start->line0 - top0 != start->line1 - top1) + abort (); + } while (start + /* Keep going if less than THRESH lines + elapse before the affected line. */ + && start->line0 - top0 < thresh); + + return prev; +} + +/* Set the `ignore' flag properly in each change in SCRIPT. + It should be 1 if all the lines inserted or deleted in that change + are ignorable lines. */ + +static void +mark_ignorable (struct change *script) +{ + while (script) + { + struct change *next = script->link; + lin first0, last0, first1, last1; + + /* Turn this change into a hunk: detach it from the others. */ + script->link = NULL; + + /* Determine whether this change is ignorable. */ + script->ignore = ! analyze_hunk (script, + &first0, &last0, &first1, &last1); + + /* Reconnect the chain as before. */ + script->link = next; + + /* Advance to the following change. */ + script = next; + } +} + +/* Find the last function-header line in LINBUF prior to line number LINENUM. + This is a line containing a match for the regexp in `function_regexp'. + Return the address of the text, or NULL if no function-header is found. */ + +static char const * +find_function (char const * const *linbuf, lin linenum) +{ + lin i = linenum; + lin last = find_function_last_search; + find_function_last_search = i; + + while (last <= --i) + { + /* See if this line is what we want. */ + char const *line = linbuf[i]; + size_t linelen = linbuf[i + 1] - line - 1; + + /* FIXME: re_search's size args should be size_t, not int. */ + int len = MIN (linelen, INT_MAX); + + if (0 <= re_search (&function_regexp, line, len, 0, len, NULL)) + { + find_function_last_match = i; + return line; + } + } + /* If we search back to where we started searching the previous time, + find the line we found last time. */ + if (find_function_last_match != LIN_MAX) + return linbuf[find_function_last_match]; + + return NULL; +} diff --git a/src/diff.c b/src/diff.c new file mode 100644 index 0000000..cc1b611 --- /dev/null +++ b/src/diff.c @@ -0,0 +1,1330 @@ +/* diff - compare files line by line + + Copyright (C) 1988-1989, 1992-1994, 1996, 1998, 2001-2002, 2004, 2006-2007, + 2009-2010 Free Software Foundation, Inc. + + This file is part of GNU DIFF. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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/>. */ + +#define GDIFF_MAIN +#include "diff.h" +#include <assert.h> +#include "paths.h" +#include <c-stack.h> +#include <dirname.h> +#include <error.h> +#include <exclude.h> +#include <exitfail.h> +#include <file-type.h> +#include <fnmatch.h> +#include <getopt.h> +#include <hard-locale.h> +#include <prepargs.h> +#include <progname.h> +#include <sh-quote.h> +#include <stat-time.h> +#include <timespec.h> +#include <version-etc.h> +#include <xalloc.h> +#include <xfreopen.h> + +/* The official name of this program (e.g., no `g' prefix). */ +#define PROGRAM_NAME "diff" + +#define AUTHORS \ + proper_name ("Paul Eggert"), \ + proper_name ("Mike Haertel"), \ + proper_name ("David Hayes"), \ + proper_name ("Richard Stallman"), \ + proper_name ("Len Tower") + +#ifndef GUTTER_WIDTH_MINIMUM +# define GUTTER_WIDTH_MINIMUM 3 +#endif + +struct regexp_list +{ + char *regexps; /* chars representing disjunction of the regexps */ + size_t len; /* chars used in `regexps' */ + size_t size; /* size malloc'ed for `regexps'; 0 if not malloc'ed */ + bool multiple_regexps;/* Does `regexps' represent a disjunction? */ + struct re_pattern_buffer *buf; +}; + +static int compare_files (struct comparison const *, char const *, char const *); +static void add_regexp (struct regexp_list *, char const *); +static void summarize_regexp_list (struct regexp_list *); +static void specify_style (enum output_style); +static void specify_value (char const **, char const *, char const *); +static void try_help (char const *, char const *) __attribute__((noreturn)); +static void check_stdout (void); +static void usage (void); + +/* If comparing directories, compare their common subdirectories + recursively. */ +static bool recursive; + +/* In context diffs, show previous lines that match these regexps. */ +static struct regexp_list function_regexp_list; + +/* Ignore changes affecting only lines that match these regexps. */ +static struct regexp_list ignore_regexp_list; + +#if O_BINARY +/* Use binary I/O when reading and writing data (--binary). + On POSIX hosts, this has no effect. */ +static bool binary; +#else +enum { binary = true }; +#endif + +/* When comparing directories, if a file appears only in one + directory, treat it as present but empty in the other (-N). + Then `patch' would create the file with appropriate contents. */ +static bool new_file; + +/* When comparing directories, if a file appears only in the second + directory of the two, treat it as present but empty in the other + (--unidirectional-new-file). + Then `patch' would create the file with appropriate contents. */ +static bool unidirectional_new_file; + +/* Report files compared that are the same (-s). + Normally nothing is output when that happens. */ +static bool report_identical_files; + +static char const shortopts[] = +"0123456789abBcC:dD:eEfF:hHiI:lL:nNpPqrsS:tTuU:vwW:x:X:y"; + +/* Values for long options that do not have single-letter equivalents. */ +enum +{ + BINARY_OPTION = CHAR_MAX + 1, + FROM_FILE_OPTION, + HELP_OPTION, + HORIZON_LINES_OPTION, + IGNORE_FILE_NAME_CASE_OPTION, + INHIBIT_HUNK_MERGE_OPTION, + LEFT_COLUMN_OPTION, + LINE_FORMAT_OPTION, + NO_IGNORE_FILE_NAME_CASE_OPTION, + NORMAL_OPTION, + SDIFF_MERGE_ASSIST_OPTION, + STRIP_TRAILING_CR_OPTION, + SUPPRESS_BLANK_EMPTY_OPTION, + SUPPRESS_COMMON_LINES_OPTION, + TABSIZE_OPTION, + TO_FILE_OPTION, + + /* These options must be in sequence. */ + UNCHANGED_LINE_FORMAT_OPTION, + OLD_LINE_FORMAT_OPTION, + NEW_LINE_FORMAT_OPTION, + + /* These options must be in sequence. */ + UNCHANGED_GROUP_FORMAT_OPTION, + OLD_GROUP_FORMAT_OPTION, + NEW_GROUP_FORMAT_OPTION, + CHANGED_GROUP_FORMAT_OPTION +}; + +static char const group_format_option[][sizeof "--unchanged-group-format"] = + { + "--unchanged-group-format", + "--old-group-format", + "--new-group-format", + "--changed-group-format" + }; + +static char const line_format_option[][sizeof "--unchanged-line-format"] = + { + "--unchanged-line-format", + "--old-line-format", + "--new-line-format" + }; + +static struct option const longopts[] = +{ + {"binary", 0, 0, BINARY_OPTION}, + {"brief", 0, 0, 'q'}, + {"changed-group-format", 1, 0, CHANGED_GROUP_FORMAT_OPTION}, + {"context", 2, 0, 'C'}, + {"ed", 0, 0, 'e'}, + {"exclude", 1, 0, 'x'}, + {"exclude-from", 1, 0, 'X'}, + {"expand-tabs", 0, 0, 't'}, + {"forward-ed", 0, 0, 'f'}, + {"from-file", 1, 0, FROM_FILE_OPTION}, + {"help", 0, 0, HELP_OPTION}, + {"horizon-lines", 1, 0, HORIZON_LINES_OPTION}, + {"ifdef", 1, 0, 'D'}, + {"ignore-all-space", 0, 0, 'w'}, + {"ignore-blank-lines", 0, 0, 'B'}, + {"ignore-case", 0, 0, 'i'}, + {"ignore-file-name-case", 0, 0, IGNORE_FILE_NAME_CASE_OPTION}, + {"ignore-matching-lines", 1, 0, 'I'}, + {"ignore-space-change", 0, 0, 'b'}, + {"ignore-tab-expansion", 0, 0, 'E'}, + {"inhibit-hunk-merge", 0, 0, INHIBIT_HUNK_MERGE_OPTION}, + {"initial-tab", 0, 0, 'T'}, + {"label", 1, 0, 'L'}, + {"left-column", 0, 0, LEFT_COLUMN_OPTION}, + {"line-format", 1, 0, LINE_FORMAT_OPTION}, + {"minimal", 0, 0, 'd'}, + {"new-file", 0, 0, 'N'}, + {"new-group-format", 1, 0, NEW_GROUP_FORMAT_OPTION}, + {"new-line-format", 1, 0, NEW_LINE_FORMAT_OPTION}, + {"no-ignore-file-name-case", 0, 0, NO_IGNORE_FILE_NAME_CASE_OPTION}, + {"normal", 0, 0, NORMAL_OPTION}, + {"old-group-format", 1, 0, OLD_GROUP_FORMAT_OPTION}, + {"old-line-format", 1, 0, OLD_LINE_FORMAT_OPTION}, + {"paginate", 0, 0, 'l'}, + {"rcs", 0, 0, 'n'}, + {"recursive", 0, 0, 'r'}, + {"report-identical-files", 0, 0, 's'}, + {"sdiff-merge-assist", 0, 0, SDIFF_MERGE_ASSIST_OPTION}, + {"show-c-function", 0, 0, 'p'}, + {"show-function-line", 1, 0, 'F'}, + {"side-by-side", 0, 0, 'y'}, + {"speed-large-files", 0, 0, 'H'}, + {"starting-file", 1, 0, 'S'}, + {"strip-trailing-cr", 0, 0, STRIP_TRAILING_CR_OPTION}, + {"suppress-blank-empty", 0, 0, SUPPRESS_BLANK_EMPTY_OPTION}, + {"suppress-common-lines", 0, 0, SUPPRESS_COMMON_LINES_OPTION}, + {"tabsize", 1, 0, TABSIZE_OPTION}, + {"text", 0, 0, 'a'}, + {"to-file", 1, 0, TO_FILE_OPTION}, + {"unchanged-group-format", 1, 0, UNCHANGED_GROUP_FORMAT_OPTION}, + {"unchanged-line-format", 1, 0, UNCHANGED_LINE_FORMAT_OPTION}, + {"unidirectional-new-file", 0, 0, 'P'}, + {"unified", 2, 0, 'U'}, + {"version", 0, 0, 'v'}, + {"width", 1, 0, 'W'}, + {0, 0, 0, 0} +}; + +/* Return a string containing the command options with which diff was invoked. + Spaces appear between what were separate ARGV-elements. + There is a space at the beginning but none at the end. + If there were no options, the result is an empty string. + + Arguments: OPTIONVEC, a vector containing separate ARGV-elements, and COUNT, + the length of that vector. */ + +static char * +option_list (char **optionvec, int count) +{ + int i; + size_t size = 1; + char *result; + char *p; + + for (i = 0; i < count; i++) + size += 1 + shell_quote_length (optionvec[i]); + + p = result = xmalloc (size); + + for (i = 0; i < count; i++) + { + *p++ = ' '; + p = shell_quote_copy (p, optionvec[i]); + } + + *p = '\0'; + return result; +} + + +/* Return an option value suitable for add_exclude. */ + +static int +exclude_options (void) +{ + return EXCLUDE_WILDCARDS | (ignore_file_name_case ? FNM_CASEFOLD : 0); +} + +int +main (int argc, char **argv) +{ + int exit_status = EXIT_SUCCESS; + int c; + int i; + int prev = -1; + lin ocontext = -1; + bool explicit_context = false; + size_t width = 0; + bool show_c_function = false; + char const *from_file = NULL; + char const *to_file = NULL; + uintmax_t numval; + char *numend; + + /* Do our initializations. */ + exit_failure = EXIT_TROUBLE; + initialize_main (&argc, &argv); + set_program_name (argv[0]); + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + c_stack_action (0); + function_regexp_list.buf = &function_regexp; + ignore_regexp_list.buf = &ignore_regexp; + re_set_syntax (RE_SYNTAX_GREP | RE_NO_POSIX_BACKTRACKING); + excluded = new_exclude (); + + /* Decode the options. */ + + while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != -1) + { + switch (c) + { + case 0: + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (! ISDIGIT (prev)) + ocontext = c - '0'; + else if (LIN_MAX / 10 < ocontext + || ((ocontext = 10 * ocontext + c - '0') < 0)) + ocontext = LIN_MAX; + break; + + case 'a': + text = true; + break; + + case 'b': + if (ignore_white_space < IGNORE_SPACE_CHANGE) + ignore_white_space = IGNORE_SPACE_CHANGE; + break; + + case 'B': + ignore_blank_lines = true; + break; + + case 'C': + case 'U': + { + if (optarg) + { + numval = strtoumax (optarg, &numend, 10); + if (*numend) + try_help ("invalid context length `%s'", optarg); + if (LIN_MAX < numval) + numval = LIN_MAX; + } + else + numval = 3; + + specify_style (c == 'U' ? OUTPUT_UNIFIED : OUTPUT_CONTEXT); + if (context < numval) + context = numval; + explicit_context = true; + } + break; + + case 'c': + specify_style (OUTPUT_CONTEXT); + if (context < 3) + context = 3; + break; + + case 'd': + minimal = true; + break; + + case 'D': + specify_style (OUTPUT_IFDEF); + { + static char const C_ifdef_group_formats[] = + "%%=%c#ifndef %s\n%%<#endif /* ! %s */\n%c#ifdef %s\n%%>#endif /* %s */\n%c#ifndef %s\n%%<#else /* %s */\n%%>#endif /* %s */\n"; + char *b = xmalloc (sizeof C_ifdef_group_formats + + 7 * strlen (optarg) - 14 /* 7*"%s" */ + - 8 /* 5*"%%" + 3*"%c" */); + sprintf (b, C_ifdef_group_formats, + 0, + optarg, optarg, 0, + optarg, optarg, 0, + optarg, optarg, optarg); + for (i = 0; i < sizeof group_format / sizeof group_format[0]; i++) + { + specify_value (&group_format[i], b, "-D"); + b += strlen (b) + 1; + } + } + break; + + case 'e': + specify_style (OUTPUT_ED); + break; + + case 'E': + if (ignore_white_space < IGNORE_TAB_EXPANSION) + ignore_white_space = IGNORE_TAB_EXPANSION; + break; + + case 'f': + specify_style (OUTPUT_FORWARD_ED); + break; + + case 'F': + add_regexp (&function_regexp_list, optarg); + break; + + case 'h': + /* Split the files into chunks for faster processing. + Usually does not change the result. + + This currently has no effect. */ + break; + + case 'H': + speed_large_files = true; + break; + + case 'i': + ignore_case = true; + break; + + case 'I': + add_regexp (&ignore_regexp_list, optarg); + break; + + case 'l': + if (!pr_program[0]) + try_help ("pagination not supported on this host", NULL); + paginate = true; +#ifdef SIGCHLD + /* Pagination requires forking and waiting, and + System V fork+wait does not work if SIGCHLD is ignored. */ + signal (SIGCHLD, SIG_DFL); +#endif + break; + + case 'L': + if (!file_label[0]) + file_label[0] = optarg; + else if (!file_label[1]) + file_label[1] = optarg; + else + fatal ("too many file label options"); + break; + + case 'n': + specify_style (OUTPUT_RCS); + break; + + case 'N': + new_file = true; + break; + + case 'p': + show_c_function = true; + add_regexp (&function_regexp_list, "^[[:alpha:]$_]"); + break; + + case 'P': + unidirectional_new_file = true; + break; + + case 'q': + brief = true; + break; + + case 'r': + recursive = true; + break; + + case 's': + report_identical_files = true; + break; + + case 'S': + specify_value (&starting_file, optarg, "-S"); + break; + + case 't': + expand_tabs = true; + break; + + case 'T': + initial_tab = true; + break; + + case 'u': + specify_style (OUTPUT_UNIFIED); + if (context < 3) + context = 3; + break; + + case 'v': + version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, PACKAGE_VERSION, + AUTHORS, (char *) NULL); + check_stdout (); + return EXIT_SUCCESS; + + case 'w': + ignore_white_space = IGNORE_ALL_SPACE; + break; + + case 'x': + add_exclude (excluded, optarg, exclude_options ()); + break; + + case 'X': + if (add_exclude_file (add_exclude, excluded, optarg, + exclude_options (), '\n')) + pfatal_with_name (optarg); + break; + + case 'y': + specify_style (OUTPUT_SDIFF); + break; + + case 'W': + numval = strtoumax (optarg, &numend, 10); + if (! (0 < numval && numval <= SIZE_MAX) || *numend) + try_help ("invalid width `%s'", optarg); + if (width != numval) + { + if (width) + fatal ("conflicting width options"); + width = numval; + } + break; + + case BINARY_OPTION: +#if O_BINARY + binary = true; + if (! isatty (STDOUT_FILENO)) + xfreopen (NULL, "wb", stdout); +#endif + break; + + case FROM_FILE_OPTION: + specify_value (&from_file, optarg, "--from-file"); + break; + + case HELP_OPTION: + usage (); + check_stdout (); + return EXIT_SUCCESS; + + case HORIZON_LINES_OPTION: + numval = strtoumax (optarg, &numend, 10); + if (*numend) + try_help ("invalid horizon length `%s'", optarg); + horizon_lines = MAX (horizon_lines, MIN (numval, LIN_MAX)); + break; + + case IGNORE_FILE_NAME_CASE_OPTION: + ignore_file_name_case = true; + break; + + case INHIBIT_HUNK_MERGE_OPTION: + /* This option is obsolete, but accept it for backward + compatibility. */ + break; + + case LEFT_COLUMN_OPTION: + left_column = true; + break; + + case LINE_FORMAT_OPTION: + specify_style (OUTPUT_IFDEF); + for (i = 0; i < sizeof line_format / sizeof line_format[0]; i++) + specify_value (&line_format[i], optarg, "--line-format"); + break; + + case NO_IGNORE_FILE_NAME_CASE_OPTION: + ignore_file_name_case = false; + break; + + case NORMAL_OPTION: + specify_style (OUTPUT_NORMAL); + break; + + case SDIFF_MERGE_ASSIST_OPTION: + specify_style (OUTPUT_SDIFF); + sdiff_merge_assist = true; + break; + + case STRIP_TRAILING_CR_OPTION: + strip_trailing_cr = true; + break; + + case SUPPRESS_BLANK_EMPTY_OPTION: + suppress_blank_empty = true; + break; + + case SUPPRESS_COMMON_LINES_OPTION: + suppress_common_lines = true; + break; + + case TABSIZE_OPTION: + numval = strtoumax (optarg, &numend, 10); + if (! (0 < numval && numval <= SIZE_MAX) || *numend) + try_help ("invalid tabsize `%s'", optarg); + if (tabsize != numval) + { + if (tabsize) + fatal ("conflicting tabsize options"); + tabsize = numval; + } + break; + + case TO_FILE_OPTION: + specify_value (&to_file, optarg, "--to-file"); + break; + + case UNCHANGED_LINE_FORMAT_OPTION: + case OLD_LINE_FORMAT_OPTION: + case NEW_LINE_FORMAT_OPTION: + specify_style (OUTPUT_IFDEF); + c -= UNCHANGED_LINE_FORMAT_OPTION; + specify_value (&line_format[c], optarg, line_format_option[c]); + break; + + case UNCHANGED_GROUP_FORMAT_OPTION: + case OLD_GROUP_FORMAT_OPTION: + case NEW_GROUP_FORMAT_OPTION: + case CHANGED_GROUP_FORMAT_OPTION: + specify_style (OUTPUT_IFDEF); + c -= UNCHANGED_GROUP_FORMAT_OPTION; + specify_value (&group_format[c], optarg, group_format_option[c]); + break; + + default: + try_help (NULL, NULL); + } + prev = c; + } + + if (output_style == OUTPUT_UNSPECIFIED) + { + if (show_c_function) + { + specify_style (OUTPUT_CONTEXT); + if (ocontext < 0) + context = 3; + } + else + specify_style (OUTPUT_NORMAL); + } + + if (output_style != OUTPUT_CONTEXT || hard_locale (LC_TIME)) + { +#if (defined STAT_TIMESPEC || defined STAT_TIMESPEC_NS \ + || defined HAVE_STRUCT_STAT_ST_SPARE1) + time_format = "%Y-%m-%d %H:%M:%S.%N %z"; +#else + time_format = "%Y-%m-%d %H:%M:%S %z"; +#endif + } + else + { + /* See POSIX 1003.1-2001 for this format. */ + time_format = "%a %b %e %T %Y"; + } + + if (0 <= ocontext + && (output_style == OUTPUT_CONTEXT + || output_style == OUTPUT_UNIFIED) + && (context < ocontext + || (ocontext < context && ! explicit_context))) + context = ocontext; + + if (! tabsize) + tabsize = 8; + if (! width) + width = 130; + + { + /* Maximize first the half line width, and then the gutter width, + according to the following constraints: + + 1. Two half lines plus a gutter must fit in a line. + 2. If the half line width is nonzero: + a. The gutter width is at least GUTTER_WIDTH_MINIMUM. + b. If tabs are not expanded to spaces, + a half line plus a gutter is an integral number of tabs, + so that tabs in the right column line up. */ + + intmax_t t = expand_tabs ? 1 : tabsize; + intmax_t w = width; + intmax_t off = (w + t + GUTTER_WIDTH_MINIMUM) / (2 * t) * t; + sdiff_half_width = MAX (0, MIN (off - GUTTER_WIDTH_MINIMUM, w - off)), + sdiff_column2_offset = sdiff_half_width ? off : w; + } + + /* Make the horizon at least as large as the context, so that + shift_boundaries has more freedom to shift the first and last hunks. */ + if (horizon_lines < context) + horizon_lines = context; + + summarize_regexp_list (&function_regexp_list); + summarize_regexp_list (&ignore_regexp_list); + + if (output_style == OUTPUT_IFDEF) + { + for (i = 0; i < sizeof line_format / sizeof line_format[0]; i++) + if (!line_format[i]) + line_format[i] = "%l\n"; + if (!group_format[OLD]) + group_format[OLD] + = group_format[CHANGED] ? group_format[CHANGED] : "%<"; + if (!group_format[NEW]) + group_format[NEW] + = group_format[CHANGED] ? group_format[CHANGED] : "%>"; + if (!group_format[UNCHANGED]) + group_format[UNCHANGED] = "%="; + if (!group_format[CHANGED]) + group_format[CHANGED] = concat (group_format[OLD], + group_format[NEW], ""); + } + + no_diff_means_no_output = + (output_style == OUTPUT_IFDEF ? + (!*group_format[UNCHANGED] + || (STREQ (group_format[UNCHANGED], "%=") + && !*line_format[UNCHANGED])) + : (output_style != OUTPUT_SDIFF) | suppress_common_lines); + + files_can_be_treated_as_binary = + (brief & binary + & ~ (ignore_blank_lines | ignore_case | strip_trailing_cr + | (ignore_regexp_list.regexps || ignore_white_space))); + + switch_string = option_list (argv + 1, optind - 1); + + if (from_file) + { + if (to_file) + fatal ("--from-file and --to-file both specified"); + else + for (; optind < argc; optind++) + { + int status = compare_files (NULL, from_file, argv[optind]); + if (exit_status < status) + exit_status = status; + } + } + else + { + if (to_file) + for (; optind < argc; optind++) + { + int status = compare_files (NULL, argv[optind], to_file); + if (exit_status < status) + exit_status = status; + } + else + { + if (argc - optind != 2) + { + if (argc - optind < 2) + try_help ("missing operand after `%s'", argv[argc - 1]); + else + try_help ("extra operand `%s'", argv[optind + 2]); + } + + exit_status = compare_files (NULL, argv[optind], argv[optind + 1]); + } + } + + /* Print any messages that were saved up for last. */ + print_message_queue (); + + check_stdout (); + exit (exit_status); + return exit_status; +} + +/* Append to REGLIST the regexp PATTERN. */ + +static void +add_regexp (struct regexp_list *reglist, char const *pattern) +{ + size_t patlen = strlen (pattern); + char const *m = re_compile_pattern (pattern, patlen, reglist->buf); + + if (m != 0) + error (0, 0, "%s: %s", pattern, m); + else + { + char *regexps = reglist->regexps; + size_t len = reglist->len; + bool multiple_regexps = reglist->multiple_regexps = regexps != 0; + size_t newlen = reglist->len = len + 2 * multiple_regexps + patlen; + size_t size = reglist->size; + + if (size <= newlen) + { + if (!size) + size = 1; + + do size *= 2; + while (size <= newlen); + + reglist->size = size; + reglist->regexps = regexps = xrealloc (regexps, size); + } + if (multiple_regexps) + { + regexps[len++] = '\\'; + regexps[len++] = '|'; + } + memcpy (regexps + len, pattern, patlen + 1); + } +} + +/* Ensure that REGLIST represents the disjunction of its regexps. + This is done here, rather than earlier, to avoid O(N^2) behavior. */ + +static void +summarize_regexp_list (struct regexp_list *reglist) +{ + if (reglist->regexps) + { + /* At least one regexp was specified. Allocate a fastmap for it. */ + reglist->buf->fastmap = xmalloc (1 << CHAR_BIT); + if (reglist->multiple_regexps) + { + /* Compile the disjunction of the regexps. + (If just one regexp was specified, it is already compiled.) */ + char const *m = re_compile_pattern (reglist->regexps, reglist->len, + reglist->buf); + if (m) + error (EXIT_TROUBLE, 0, "%s: %s", reglist->regexps, m); + } + } +} + +static void +try_help (char const *reason_msgid, char const *operand) +{ + if (reason_msgid) + error (0, 0, _(reason_msgid), operand); + error (EXIT_TROUBLE, 0, _("Try `%s --help' for more information."), + program_name); + abort (); +} + +static void +check_stdout (void) +{ + if (ferror (stdout)) + fatal ("write failed"); + else if (fclose (stdout) != 0) + pfatal_with_name (_("standard output")); +} + +static char const * const option_help_msgid[] = { + N_("Compare files line by line."), + "", + N_("-i --ignore-case Ignore case differences in file contents."), + N_("--ignore-file-name-case Ignore case when comparing file names."), + N_("--no-ignore-file-name-case Consider case when comparing file names."), + N_("-E --ignore-tab-expansion Ignore changes due to tab expansion."), + N_("-b --ignore-space-change Ignore changes in the amount of white space."), + N_("-w --ignore-all-space Ignore all white space."), + N_("-B --ignore-blank-lines Ignore changes whose lines are all blank."), + N_("-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE."), + N_("--strip-trailing-cr Strip trailing carriage return on input."), +#if O_BINARY + N_("--binary Read and write data in binary mode."), +#endif + N_("-a --text Treat all files as text."), + "", + N_("-c -C NUM --context[=NUM] Output NUM (default 3) lines of copied context.\n\ +-u -U NUM --unified[=NUM] Output NUM (default 3) lines of unified context.\n\ + --label LABEL Use LABEL instead of file name.\n\ + -p --show-c-function Show which C function each change is in.\n\ + -F RE --show-function-line=RE Show the most recent line matching RE."), + N_("-q --brief Output only whether files differ."), + N_("-e --ed Output an ed script."), + N_("--normal Output a normal diff."), + N_("-n --rcs Output an RCS format diff."), + N_("-y --side-by-side Output in two columns.\n\ + -W NUM --width=NUM Output at most NUM (default 130) print columns.\n\ + --left-column Output only the left column of common lines.\n\ + --suppress-common-lines Do not output common lines."), + N_("-D NAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs."), + N_("--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT."), + N_("--line-format=LFMT Similar, but format all input lines with LFMT."), + N_("--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT."), + N_(" LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'."), + N_(" GFMT may contain:\n\ + %< lines from FILE1\n\ + %> lines from FILE2\n\ + %= lines common to FILE1 and FILE2\n\ + %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n\ + LETTERs are as follows for new group, lower case for old group:\n\ + F first line number\n\ + L last line number\n\ + N number of lines = L-F+1\n\ + E F-1\n\ + M L+1"), + N_(" LFMT may contain:\n\ + %L contents of line\n\ + %l contents of line, excluding any trailing newline\n\ + %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number"), + N_(" Either GFMT or LFMT may contain:\n\ + %% %\n\ + %c'C' the single character C\n\ + %c'\\OOO' the character with octal code OOO"), + "", + N_("-l --paginate Pass the output through `pr' to paginate it."), + N_("-t --expand-tabs Expand tabs to spaces in output."), + N_("-T --initial-tab Make tabs line up by prepending a tab."), + N_("--tabsize=NUM Tab stops are every NUM (default 8) print columns."), + N_("--suppress-blank-empty Suppress space or tab before empty output lines."), + "", + N_("-r --recursive Recursively compare any subdirectories found."), + N_("-N --new-file Treat absent files as empty."), + N_("--unidirectional-new-file Treat absent first files as empty."), + N_("-s --report-identical-files Report when two files are the same."), + N_("-x PAT --exclude=PAT Exclude files that match PAT."), + N_("-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE."), + N_("-S FILE --starting-file=FILE Start with FILE when comparing directories."), + N_("--from-file=FILE1 Compare FILE1 to all operands. FILE1 can be a directory."), + N_("--to-file=FILE2 Compare all operands to FILE2. FILE2 can be a directory."), + "", + N_("--horizon-lines=NUM Keep NUM lines of the common prefix and suffix."), + N_("-d --minimal Try hard to find a smaller set of changes."), + N_("--speed-large-files Assume large files and many scattered small changes."), + "", + N_("-v --version Output version info."), + N_("--help Output this help."), + "", + N_("FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'."), + N_("If --from-file or --to-file is given, there are no restrictions on FILES."), + N_("If a FILE is `-', read standard input."), + N_("Exit status is 0 if inputs are the same, 1 if different, 2 if trouble."), + 0 +}; + +static void +usage (void) +{ + char const * const *p; + + printf (_("Usage: %s [OPTION]... FILES\n"), program_name); + + for (p = option_help_msgid; *p; p++) + { + if (!**p) + putchar ('\n'); + else + { + char const *msg = _(*p); + char const *nl; + while ((nl = strchr (msg, '\n'))) + { + int msglen = nl + 1 - msg; + printf (" %.*s", msglen, msg); + msg = nl + 1; + } + + printf (" %s\n" + 2 * (*msg != ' ' && *msg != '-'), msg); + } + } + emit_bug_reporting_address (); +} + +/* Set VAR to VALUE, reporting an OPTION error if this is a + conflict. */ +static void +specify_value (char const **var, char const *value, char const *option) +{ + if (*var && strcmp (*var, value) != 0) + { + error (0, 0, _("conflicting %s option value `%s'"), option, value); + try_help (NULL, NULL); + } + *var = value; +} + +/* Set the output style to STYLE, diagnosing conflicts. */ +static void +specify_style (enum output_style style) +{ + if (output_style != style) + { + if (output_style != OUTPUT_UNSPECIFIED) + try_help ("conflicting output style options", NULL); + output_style = style; + } +} + +/* Set the last-modified time of *ST to be the current time. */ + +static void +set_mtime_to_now (struct stat *st) +{ +#ifdef STAT_TIMESPEC + gettime (&STAT_TIMESPEC (st, st_mtim)); +#else + struct timespec t; + gettime (&t); + st->st_mtime = t.tv_sec; +# if defined STAT_TIMESPEC_NS + STAT_TIMESPEC_NS (st, st_mtim) = t.tv_nsec; +# elif defined HAVE_STRUCT_STAT_ST_SPARE1 + st->st_spare1 = t.tv_nsec / 1000; +# endif +#endif +} + +/* Compare two files (or dirs) with parent comparison PARENT + and names NAME0 and NAME1. + (If PARENT is null, then the first name is just NAME0, etc.) + This is self-contained; it opens the files and closes them. + + Value is EXIT_SUCCESS if files are the same, EXIT_FAILURE if + different, EXIT_TROUBLE if there is a problem opening them. */ + +static int +compare_files (struct comparison const *parent, + char const *name0, + char const *name1) +{ + struct comparison cmp; +#define DIR_P(f) (S_ISDIR (cmp.file[f].stat.st_mode) != 0) + register int f; + int status = EXIT_SUCCESS; + bool same_files; + char *free0; + char *free1; + + /* If this is directory comparison, perhaps we have a file + that exists only in one of the directories. + If so, just print a message to that effect. */ + + if (! ((name0 && name1) + || (unidirectional_new_file && name1) + || new_file)) + { + char const *name = name0 ? name0 : name1; + char const *dir = parent->file[!name0].name; + + /* See POSIX 1003.1-2001 for this format. */ + message ("Only in %s: %s\n", dir, name); + + /* Return EXIT_FAILURE so that diff_dirs will return + EXIT_FAILURE ("some files differ"). */ + return EXIT_FAILURE; + } + + memset (cmp.file, 0, sizeof cmp.file); + cmp.parent = parent; + + /* cmp.file[f].desc markers */ +#define NONEXISTENT (-1) /* nonexistent file */ +#define UNOPENED (-2) /* unopened file (e.g. directory) */ +#define ERRNO_ENCODE(errno) (-3 - (errno)) /* encoded errno value */ + +#define ERRNO_DECODE(desc) (-3 - (desc)) /* inverse of ERRNO_ENCODE */ + + cmp.file[0].desc = name0 ? UNOPENED : NONEXISTENT; + cmp.file[1].desc = name1 ? UNOPENED : NONEXISTENT; + + /* Now record the full name of each file, including nonexistent ones. */ + + if (!name0) + name0 = name1; + if (!name1) + name1 = name0; + + if (!parent) + { + free0 = NULL; + free1 = NULL; + cmp.file[0].name = name0; + cmp.file[1].name = name1; + } + else + { + cmp.file[0].name = free0 + = dir_file_pathname (parent->file[0].name, name0); + cmp.file[1].name = free1 + = dir_file_pathname (parent->file[1].name, name1); + } + + /* Stat the files. */ + + for (f = 0; f < 2; f++) + { + if (cmp.file[f].desc != NONEXISTENT) + { + if (f && file_name_cmp (cmp.file[f].name, cmp.file[0].name) == 0) + { + cmp.file[f].desc = cmp.file[0].desc; + cmp.file[f].stat = cmp.file[0].stat; + } + else if (STREQ (cmp.file[f].name, "-")) + { + cmp.file[f].desc = STDIN_FILENO; + if (O_BINARY && binary && ! isatty (STDIN_FILENO)) + xfreopen (NULL, "rb", stdin); + if (fstat (STDIN_FILENO, &cmp.file[f].stat) != 0) + cmp.file[f].desc = ERRNO_ENCODE (errno); + else + { + if (S_ISREG (cmp.file[f].stat.st_mode)) + { + off_t pos = lseek (STDIN_FILENO, 0, SEEK_CUR); + if (pos < 0) + cmp.file[f].desc = ERRNO_ENCODE (errno); + else + cmp.file[f].stat.st_size = + MAX (0, cmp.file[f].stat.st_size - pos); + } + + /* POSIX 1003.1-2001 requires current time for + stdin. */ + set_mtime_to_now (&cmp.file[f].stat); + } + } + else if (stat (cmp.file[f].name, &cmp.file[f].stat) != 0) + cmp.file[f].desc = ERRNO_ENCODE (errno); + } + } + + /* Mark files as nonexistent as needed for -N and -P, if they are + inaccessible empty regular files (the kind of files that 'patch' + creates to indicate nonexistent backups), or if they are + top-level files that do not exist but their counterparts do + exist. */ + for (f = 0; f < 2; f++) + if ((new_file || (f == 0 && unidirectional_new_file)) + && (cmp.file[f].desc == UNOPENED + ? (S_ISREG (cmp.file[f].stat.st_mode) + && ! (cmp.file[f].stat.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO)) + && cmp.file[f].stat.st_size == 0) + : (cmp.file[f].desc == ERRNO_ENCODE (ENOENT) + && ! parent + && cmp.file[1 - f].desc == UNOPENED))) + cmp.file[f].desc = NONEXISTENT; + + for (f = 0; f < 2; f++) + if (cmp.file[f].desc == NONEXISTENT) + { + memset (&cmp.file[f].stat, 0, sizeof cmp.file[f].stat); + cmp.file[f].stat.st_mode = cmp.file[1 - f].stat.st_mode; + } + + for (f = 0; f < 2; f++) + { + int e = ERRNO_DECODE (cmp.file[f].desc); + if (0 <= e) + { + errno = e; + perror_with_name (cmp.file[f].name); + status = EXIT_TROUBLE; + } + } + + if (status == EXIT_SUCCESS && ! parent && DIR_P (0) != DIR_P (1)) + { + /* If one is a directory, and it was specified in the command line, + use the file in that dir with the other file's basename. */ + + int fnm_arg = DIR_P (0); + int dir_arg = 1 - fnm_arg; + char const *fnm = cmp.file[fnm_arg].name; + char const *dir = cmp.file[dir_arg].name; + char const *filename = cmp.file[dir_arg].name = free0 + = dir_file_pathname (dir, last_component (fnm)); + + if (STREQ (fnm, "-")) + fatal ("cannot compare `-' to a directory"); + + if (stat (filename, &cmp.file[dir_arg].stat) != 0) + { + perror_with_name (filename); + status = EXIT_TROUBLE; + } + } + + if (status != EXIT_SUCCESS) + { + /* One of the files should exist but does not. */ + } + else if (cmp.file[0].desc == NONEXISTENT + && cmp.file[1].desc == NONEXISTENT) + { + /* Neither file "exists", so there's nothing to compare. */ + } + else if ((same_files + = (cmp.file[0].desc != NONEXISTENT + && cmp.file[1].desc != NONEXISTENT + && 0 < same_file (&cmp.file[0].stat, &cmp.file[1].stat) + && same_file_attributes (&cmp.file[0].stat, + &cmp.file[1].stat))) + && no_diff_means_no_output) + { + /* The two named files are actually the same physical file. + We know they are identical without actually reading them. */ + } + else if (DIR_P (0) & DIR_P (1)) + { + if (output_style == OUTPUT_IFDEF) + fatal ("-D option not supported with directories"); + + /* If both are directories, compare the files in them. */ + + if (parent && !recursive) + { + /* But don't compare dir contents one level down + unless -r was specified. + See POSIX 1003.1-2001 for this format. */ + message ("Common subdirectories: %s and %s\n", + cmp.file[0].name, cmp.file[1].name); + } + else + status = diff_dirs (&cmp, compare_files); + } + else if ((DIR_P (0) | DIR_P (1)) + || (parent + && (! S_ISREG (cmp.file[0].stat.st_mode) + || ! S_ISREG (cmp.file[1].stat.st_mode)))) + { + if (cmp.file[0].desc == NONEXISTENT || cmp.file[1].desc == NONEXISTENT) + { + /* We have a subdirectory that exists only in one directory. */ + + if ((DIR_P (0) | DIR_P (1)) + && recursive + && (new_file + || (unidirectional_new_file + && cmp.file[0].desc == NONEXISTENT))) + status = diff_dirs (&cmp, compare_files); + else + { + char const *dir; + + /* PARENT must be non-NULL here. */ + assert (parent); + dir = parent->file[cmp.file[0].desc == NONEXISTENT].name; + + /* See POSIX 1003.1-2001 for this format. */ + message ("Only in %s: %s\n", dir, name0); + + status = EXIT_FAILURE; + } + } + else + { + /* We have two files that are not to be compared. */ + + /* See POSIX 1003.1-2001 for this format. */ + message5 ("File %s is a %s while file %s is a %s\n", + file_label[0] ? file_label[0] : cmp.file[0].name, + file_type (&cmp.file[0].stat), + file_label[1] ? file_label[1] : cmp.file[1].name, + file_type (&cmp.file[1].stat)); + + /* This is a difference. */ + status = EXIT_FAILURE; + } + } + else if (files_can_be_treated_as_binary + && S_ISREG (cmp.file[0].stat.st_mode) + && S_ISREG (cmp.file[1].stat.st_mode) + && cmp.file[0].stat.st_size != cmp.file[1].stat.st_size) + { + message ("Files %s and %s differ\n", + file_label[0] ? file_label[0] : cmp.file[0].name, + file_label[1] ? file_label[1] : cmp.file[1].name); + status = EXIT_FAILURE; + } + else + { + /* Both exist and neither is a directory. */ + + /* Open the files and record their descriptors. */ + + int oflags = O_RDONLY | (binary ? O_BINARY : 0); + + if (cmp.file[0].desc == UNOPENED) + if ((cmp.file[0].desc = open (cmp.file[0].name, oflags, 0)) < 0) + { + perror_with_name (cmp.file[0].name); + status = EXIT_TROUBLE; + } + if (cmp.file[1].desc == UNOPENED) + { + if (same_files) + cmp.file[1].desc = cmp.file[0].desc; + else if ((cmp.file[1].desc = open (cmp.file[1].name, oflags, 0)) < 0) + { + perror_with_name (cmp.file[1].name); + status = EXIT_TROUBLE; + } + } + + /* Compare the files, if no error was found. */ + + if (status == EXIT_SUCCESS) + status = diff_2_files (&cmp); + + /* Close the file descriptors. */ + + if (0 <= cmp.file[0].desc && close (cmp.file[0].desc) != 0) + { + perror_with_name (cmp.file[0].name); + status = EXIT_TROUBLE; + } + if (0 <= cmp.file[1].desc && cmp.file[0].desc != cmp.file[1].desc + && close (cmp.file[1].desc) != 0) + { + perror_with_name (cmp.file[1].name); + status = EXIT_TROUBLE; + } + } + + /* Now the comparison has been done, if no error prevented it, + and STATUS is the value this function will return. */ + + if (status == EXIT_SUCCESS) + { + if (report_identical_files && !DIR_P (0)) + message ("Files %s and %s are identical\n", + file_label[0] ? file_label[0] : cmp.file[0].name, + file_label[1] ? file_label[1] : cmp.file[1].name); + } + else + { + /* Flush stdout so that the user sees differences immediately. + This can hurt performance, unfortunately. */ + if (fflush (stdout) != 0) + pfatal_with_name (_("standard output")); + } + + free (free0); + free (free1); + + return status; +} diff --git a/src/diff.h b/src/diff.h new file mode 100644 index 0000000..71b33f4 --- /dev/null +++ b/src/diff.h @@ -0,0 +1,373 @@ +/* Shared definitions for GNU DIFF + + Copyright (C) 1988-1989, 1991-1995, 1998, 2001-2002, 2004, 2009-2010 Free + Software Foundation, Inc. + + This file is part of GNU DIFF. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "system.h" +#include <regex.h> +#include <stdio.h> +#include <unlocked-io.h> + +/* What kind of changes a hunk contains. */ +enum changes +{ + /* No changes: lines common to both files. */ + UNCHANGED, + + /* Deletes only: lines taken from just the first file. */ + OLD, + + /* Inserts only: lines taken from just the second file. */ + NEW, + + /* Both deletes and inserts: a hunk containing both old and new lines. */ + CHANGED +}; + +/* Variables for command line options */ + +#ifndef GDIFF_MAIN +# define XTERN extern +#else +# define XTERN +#endif + +enum output_style +{ + /* No output style specified. */ + OUTPUT_UNSPECIFIED, + + /* Default output style. */ + OUTPUT_NORMAL, + + /* Output the differences with lines of context before and after (-c). */ + OUTPUT_CONTEXT, + + /* Output the differences in a unified context diff format (-u). */ + OUTPUT_UNIFIED, + + /* Output the differences as commands suitable for `ed' (-e). */ + OUTPUT_ED, + + /* Output the diff as a forward ed script (-f). */ + OUTPUT_FORWARD_ED, + + /* Like -f, but output a count of changed lines in each "command" (-n). */ + OUTPUT_RCS, + + /* Output merged #ifdef'd file (-D). */ + OUTPUT_IFDEF, + + /* Output sdiff style (-y). */ + OUTPUT_SDIFF +}; + +/* True for output styles that are robust, + i.e. can handle a file that ends in a non-newline. */ +#define ROBUST_OUTPUT_STYLE(S) ((S) != OUTPUT_ED && (S) != OUTPUT_FORWARD_ED) + +XTERN enum output_style output_style; + +/* Nonzero if output cannot be generated for identical files. */ +XTERN bool no_diff_means_no_output; + +/* Number of lines of context to show in each set of diffs. + This is zero when context is not to be shown. */ +XTERN lin context; + +/* Consider all files as text files (-a). + Don't interpret codes over 0177 as implying a "binary file". */ +XTERN bool text; + +/* Number of lines to keep in identical prefix and suffix. */ +XTERN lin horizon_lines; + +/* The significance of white space during comparisons. */ +XTERN enum +{ + /* All white space is significant (the default). */ + IGNORE_NO_WHITE_SPACE, + + /* Ignore changes due to tab expansion (-E). */ + IGNORE_TAB_EXPANSION, + + /* Ignore changes in horizontal white space (-b). */ + IGNORE_SPACE_CHANGE, + + /* Ignore all horizontal white space (-w). */ + IGNORE_ALL_SPACE +} ignore_white_space; + +/* Ignore changes that affect only blank lines (-B). */ +XTERN bool ignore_blank_lines; + +/* Files can be compared byte-by-byte, as if they were binary. + This depends on various options. */ +XTERN bool files_can_be_treated_as_binary; + +/* Ignore differences in case of letters (-i). */ +XTERN bool ignore_case; + +/* Ignore differences in case of letters in file names. */ +XTERN bool ignore_file_name_case; + +/* File labels for `-c' output headers (--label). */ +XTERN char *file_label[2]; + +/* Regexp to identify function-header lines (-F). */ +XTERN struct re_pattern_buffer function_regexp; + +/* Ignore changes that affect only lines matching this regexp (-I). */ +XTERN struct re_pattern_buffer ignore_regexp; + +/* Say only whether files differ, not how (-q). */ +XTERN bool brief; + +/* Expand tabs in the output so the text lines up properly + despite the characters added to the front of each line (-t). */ +XTERN bool expand_tabs; + +/* Number of columns between tab stops. */ +XTERN size_t tabsize; + +/* Use a tab in the output, rather than a space, before the text of an + input line, so as to keep the proper alignment in the input line + without changing the characters in it (-T). */ +XTERN bool initial_tab; + +/* Do not output an initial space or tab before the text of an empty line. */ +XTERN bool suppress_blank_empty; + +/* Remove trailing carriage returns from input. */ +XTERN bool strip_trailing_cr; + +/* In directory comparison, specify file to start with (-S). + This is used for resuming an aborted comparison. + All file names less than this name are ignored. */ +XTERN char const *starting_file; + +/* Pipe each file's output through pr (-l). */ +XTERN bool paginate; + +/* Line group formats for unchanged, old, new, and changed groups. */ +XTERN char const *group_format[CHANGED + 1]; + +/* Line formats for unchanged, old, and new lines. */ +XTERN char const *line_format[NEW + 1]; + +/* If using OUTPUT_SDIFF print extra information to help the sdiff filter. */ +XTERN bool sdiff_merge_assist; + +/* Tell OUTPUT_SDIFF to show only the left version of common lines. */ +XTERN bool left_column; + +/* Tell OUTPUT_SDIFF to not show common lines. */ +XTERN bool suppress_common_lines; + +/* The half line width and column 2 offset for OUTPUT_SDIFF. */ +XTERN size_t sdiff_half_width; +XTERN size_t sdiff_column2_offset; + +/* String containing all the command options diff received, + with spaces between and at the beginning but none at the end. + If there were no options given, this string is empty. */ +XTERN char *switch_string; + +/* Use heuristics for better speed with large files with a small + density of changes. */ +XTERN bool speed_large_files; + +/* Patterns that match file names to be excluded. */ +XTERN struct exclude *excluded; + +/* Don't discard lines. This makes things slower (sometimes much + slower) but will find a guaranteed minimal set of changes. */ +XTERN bool minimal; + +/* The strftime format to use for time strings. */ +XTERN char const *time_format; + +/* The result of comparison is an "edit script": a chain of `struct change'. + Each `struct change' represents one place where some lines are deleted + and some are inserted. + + LINE0 and LINE1 are the first affected lines in the two files (origin 0). + DELETED is the number of lines deleted here from file 0. + INSERTED is the number of lines inserted here in file 1. + + If DELETED is 0 then LINE0 is the number of the line before + which the insertion was done; vice versa for INSERTED and LINE1. */ + +struct change +{ + struct change *link; /* Previous or next edit command */ + lin inserted; /* # lines of file 1 changed here. */ + lin deleted; /* # lines of file 0 changed here. */ + lin line0; /* Line number of 1st deleted line. */ + lin line1; /* Line number of 1st inserted line. */ + bool ignore; /* Flag used in context.c. */ +}; + +/* Structures that describe the input files. */ + +/* Data on one input file being compared. */ + +struct file_data { + int desc; /* File descriptor */ + char const *name; /* File name */ + struct stat stat; /* File status */ + + /* Buffer in which text of file is read. */ + word *buffer; + + /* Allocated size of buffer, in bytes. Always a multiple of + sizeof *buffer. */ + size_t bufsize; + + /* Number of valid bytes now in the buffer. */ + size_t buffered; + + /* Array of pointers to lines in the file. */ + char const **linbuf; + + /* linbuf_base <= buffered_lines <= valid_lines <= alloc_lines. + linebuf[linbuf_base ... buffered_lines - 1] are possibly differing. + linebuf[linbuf_base ... valid_lines - 1] contain valid data. + linebuf[linbuf_base ... alloc_lines - 1] are allocated. */ + lin linbuf_base, buffered_lines, valid_lines, alloc_lines; + + /* Pointer to end of prefix of this file to ignore when hashing. */ + char const *prefix_end; + + /* Count of lines in the prefix. + There are this many lines in the file before linbuf[0]. */ + lin prefix_lines; + + /* Pointer to start of suffix of this file to ignore when hashing. */ + char const *suffix_begin; + + /* Vector, indexed by line number, containing an equivalence code for + each line. It is this vector that is actually compared with that + of another file to generate differences. */ + lin *equivs; + + /* Vector, like the previous one except that + the elements for discarded lines have been squeezed out. */ + lin *undiscarded; + + /* Vector mapping virtual line numbers (not counting discarded lines) + to real ones (counting those lines). Both are origin-0. */ + lin *realindexes; + + /* Total number of nondiscarded lines. */ + lin nondiscarded_lines; + + /* Vector, indexed by real origin-0 line number, + containing 1 for a line that is an insertion or a deletion. + The results of comparison are stored here. */ + char *changed; + + /* 1 if file ends in a line with no final newline. */ + bool missing_newline; + + /* 1 if at end of file. */ + bool eof; + + /* 1 more than the maximum equivalence value used for this or its + sibling file. */ + lin equiv_max; +}; + +/* The file buffer, considered as an array of bytes rather than + as an array of words. */ +#define FILE_BUFFER(f) ((char *) (f)->buffer) + +/* Data on two input files being compared. */ + +struct comparison + { + struct file_data file[2]; + struct comparison const *parent; /* parent, if a recursive comparison */ + }; + +/* Describe the two files currently being compared. */ + +XTERN struct file_data files[2]; + +/* Stdio stream to output diffs to. */ + +XTERN FILE *outfile; + +/* Declare various functions. */ + +/* analyze.c */ +int diff_2_files (struct comparison *); + +/* context.c */ +void print_context_header (struct file_data[], bool); +void print_context_script (struct change *, bool); + +/* dir.c */ +int diff_dirs (struct comparison const *, int (*) (struct comparison const *, char const *, char const *)); + +/* ed.c */ +void print_ed_script (struct change *); +void pr_forward_ed_script (struct change *); + +/* ifdef.c */ +void print_ifdef_script (struct change *); + +/* io.c */ +void file_block_read (struct file_data *, size_t); +bool read_files (struct file_data[], bool); + +/* normal.c */ +void print_normal_script (struct change *); + +/* rcs.c */ +void print_rcs_script (struct change *); + +/* side.c */ +void print_sdiff_script (struct change *); + +/* util.c */ +extern char const change_letter[4]; +extern char const pr_program[]; +char *concat (char const *, char const *, char const *); +char *dir_file_pathname (char const *, char const *); +bool lines_differ (char const *, char const *); +lin translate_line_number (struct file_data const *, lin); +struct change *find_change (struct change *); +struct change *find_reverse_change (struct change *); +void *zalloc (size_t); +enum changes analyze_hunk (struct change *, lin *, lin *, lin *, lin *); +void begin_output (void); +void debug_script (struct change *); +void fatal (char const *) __attribute__((noreturn)); +void finish_output (void); +void message (char const *, char const *, char const *); +void message5 (char const *, char const *, char const *, char const *, char const *); +void output_1_line (char const *, char const *, char const *, char const *); +void perror_with_name (char const *); +void pfatal_with_name (char const *) __attribute__((noreturn)); +void print_1_line (char const *, char const * const *); +void print_message_queue (void); +void print_number_range (char, struct file_data *, lin, lin); +void print_script (struct change *, struct change * (*) (struct change *), void (*) (struct change *)); +void setup_output (char const *, char const *, bool); +void translate_range (struct file_data const *, lin, lin, long int *, long int *); diff --git a/src/diff3.c b/src/diff3.c new file mode 100644 index 0000000..0f11fdc --- /dev/null +++ b/src/diff3.c @@ -0,0 +1,1747 @@ +/* diff3 - compare three files line by line + + Copyright (C) 1988-1989, 1992-1996, 1998, 2001-2002, 2004, 2006, 2009-2010 + Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "system.h" +#include "paths.h" + +#include <stdio.h> +#include <unlocked-io.h> + +#include <c-stack.h> +#include <cmpbuf.h> +#include <error.h> +#include <exitfail.h> +#include <file-type.h> +#include <getopt.h> +#include <inttostr.h> +#include <progname.h> +#include <sh-quote.h> +#include <version-etc.h> +#include <xalloc.h> +#include <xfreopen.h> + +/* The official name of this program (e.g., no `g' prefix). */ +#define PROGRAM_NAME "diff3" + +#define AUTHORS \ + proper_name ("Randy Smith") + +/* Internal data structures and macros for the diff3 program; includes + data structures for both diff3 diffs and normal diffs. */ + +/* Different files within a three way diff. */ +#define FILE0 0 +#define FILE1 1 +#define FILE2 2 + +/* A three way diff is built from two two-way diffs; the file which + the two two-way diffs share is: */ +#define FILEC FILE2 + +/* Different files within a two way diff. + FC is the common file, FO the other file. */ +#define FO 0 +#define FC 1 + +/* The ranges are indexed by */ +#define RANGE_START 0 +#define RANGE_END 1 + +enum diff_type { + ERROR, /* Should not be used */ + ADD, /* Two way diff add */ + CHANGE, /* Two way diff change */ + DELETE, /* Two way diff delete */ + DIFF_ALL, /* All three are different */ + DIFF_1ST, /* Only the first is different */ + DIFF_2ND, /* Only the second */ + DIFF_3RD /* Only the third */ +}; + +/* Two way diff */ +struct diff_block { + lin ranges[2][2]; /* Ranges are inclusive */ + char **lines[2]; /* The actual lines (may contain nulls) */ + size_t *lengths[2]; /* Line lengths (including newlines, if any) */ + struct diff_block *next; +}; + +/* Three way diff */ + +struct diff3_block { + enum diff_type correspond; /* Type of diff */ + lin ranges[3][2]; /* Ranges are inclusive */ + char **lines[3]; /* The actual lines (may contain nulls) */ + size_t *lengths[3]; /* Line lengths (including newlines, if any) */ + struct diff3_block *next; +}; + +/* Access the ranges on a diff block. */ +#define D_LOWLINE(diff, filenum) \ + ((diff)->ranges[filenum][RANGE_START]) +#define D_HIGHLINE(diff, filenum) \ + ((diff)->ranges[filenum][RANGE_END]) +#define D_NUMLINES(diff, filenum) \ + (D_HIGHLINE (diff, filenum) - D_LOWLINE (diff, filenum) + 1) + +/* Access the line numbers in a file in a diff by relative line + numbers (i.e. line number within the diff itself). Note that these + are lvalues and can be used for assignment. */ +#define D_RELNUM(diff, filenum, linenum) \ + ((diff)->lines[filenum][linenum]) +#define D_RELLEN(diff, filenum, linenum) \ + ((diff)->lengths[filenum][linenum]) + +/* And get at them directly, when that should be necessary. */ +#define D_LINEARRAY(diff, filenum) \ + ((diff)->lines[filenum]) +#define D_LENARRAY(diff, filenum) \ + ((diff)->lengths[filenum]) + +/* Next block. */ +#define D_NEXT(diff) ((diff)->next) + +/* Access the type of a diff3 block. */ +#define D3_TYPE(diff) ((diff)->correspond) + +/* Line mappings based on diffs. The first maps off the top of the + diff, the second off of the bottom. */ +#define D_HIGH_MAPLINE(diff, fromfile, tofile, linenum) \ + ((linenum) \ + - D_HIGHLINE ((diff), (fromfile)) \ + + D_HIGHLINE ((diff), (tofile))) + +#define D_LOW_MAPLINE(diff, fromfile, tofile, linenum) \ + ((linenum) \ + - D_LOWLINE ((diff), (fromfile)) \ + + D_LOWLINE ((diff), (tofile))) + +/* Options variables for flags set on command line. */ + +/* If nonzero, treat all files as text files, never as binary. */ +static bool text; + +/* Remove trailing carriage returns from input. */ +static bool strip_trailing_cr; + +/* If nonzero, write out an ed script instead of the standard diff3 format. */ +static bool edscript; + +/* If nonzero, in the case of overlapping diffs (type DIFF_ALL), + preserve the lines which would normally be deleted from + file 1 with a special flagging mechanism. */ +static bool flagging; + +/* Use a tab to align output lines (-T). */ +static bool initial_tab; + +/* If nonzero, do not output information for overlapping diffs. */ +static bool simple_only; + +/* If nonzero, do not output information for non-overlapping diffs. */ +static bool overlap_only; + +/* If nonzero, show information for DIFF_2ND diffs. */ +static bool show_2nd; + +/* If nonzero, include `:wq' at the end of the script + to write out the file being edited. */ +static bool finalwrite; + +/* If nonzero, output a merged file. */ +static bool merge; + +static char *read_diff (char const *, char const *, char **); +static char *scan_diff_line (char *, char **, size_t *, char *, char); +static enum diff_type process_diff_control (char **, struct diff_block *); +static bool compare_line_list (char * const[], size_t const[], char * const[], size_t const[], lin); +static bool copy_stringlist (char * const[], size_t const[], char *[], size_t[], lin); +static bool output_diff3_edscript (FILE *, struct diff3_block *, int const[3], int const[3], char const *, char const *, char const *); +static bool output_diff3_merge (FILE *, FILE *, struct diff3_block *, int const[3], int const[3], char const *, char const *, char const *); +static struct diff3_block *create_diff3_block (lin, lin, lin, lin, lin, lin); +static struct diff3_block *make_3way_diff (struct diff_block *, struct diff_block *); +static struct diff3_block *reverse_diff3_blocklist (struct diff3_block *); +static struct diff3_block *using_to_diff3_block (struct diff_block *[2], struct diff_block *[2], int, int, struct diff3_block const *); +static struct diff_block *process_diff (char const *, char const *, struct diff_block **); +static void check_stdout (void); +static void fatal (char const *) __attribute__((noreturn)); +static void output_diff3 (FILE *, struct diff3_block *, int const[3], int const[3]); +static void perror_with_exit (char const *) __attribute__((noreturn)); +static void try_help (char const *, char const *) __attribute__((noreturn)); +static void usage (void); + +static char const *diff_program = DEFAULT_DIFF_PROGRAM; + +/* Values for long options that do not have single-letter equivalents. */ +enum +{ + DIFF_PROGRAM_OPTION = CHAR_MAX + 1, + HELP_OPTION, + STRIP_TRAILING_CR_OPTION +}; + +static struct option const longopts[] = +{ + {"diff-program", 1, 0, DIFF_PROGRAM_OPTION}, + {"easy-only", 0, 0, '3'}, + {"ed", 0, 0, 'e'}, + {"help", 0, 0, HELP_OPTION}, + {"initial-tab", 0, 0, 'T'}, + {"label", 1, 0, 'L'}, + {"merge", 0, 0, 'm'}, + {"overlap-only", 0, 0, 'x'}, + {"show-all", 0, 0, 'A'}, + {"show-overlap", 0, 0, 'E'}, + {"strip-trailing-cr", 0, 0, STRIP_TRAILING_CR_OPTION}, + {"text", 0, 0, 'a'}, + {"version", 0, 0, 'v'}, + {0, 0, 0, 0} +}; + +int +main (int argc, char **argv) +{ + int c, i; + int common; + int mapping[3]; + int rev_mapping[3]; + int incompat = 0; + bool conflicts_found; + struct diff_block *thread0, *thread1, *last_block; + struct diff3_block *diff3; + int tag_count = 0; + char *tag_strings[3]; + char *commonname; + char **file; + struct stat statb; + + exit_failure = EXIT_TROUBLE; + initialize_main (&argc, &argv); + set_program_name (argv[0]); + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + c_stack_action (0); + + while ((c = getopt_long (argc, argv, "aeimvx3AEL:TX", longopts, 0)) != -1) + { + switch (c) + { + case 'a': + text = true; + break; + case 'A': + show_2nd = true; + flagging = true; + incompat++; + break; + case 'x': + overlap_only = true; + incompat++; + break; + case '3': + simple_only = true; + incompat++; + break; + case 'i': + finalwrite = true; + break; + case 'm': + merge = true; + break; + case 'X': + overlap_only = true; + /* Fall through. */ + case 'E': + flagging = true; + /* Fall through. */ + case 'e': + incompat++; + break; + case 'T': + initial_tab = true; + break; + case STRIP_TRAILING_CR_OPTION: + strip_trailing_cr = true; + break; + case 'v': + version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, PACKAGE_VERSION, + AUTHORS, (char *) NULL); + check_stdout (); + return EXIT_SUCCESS; + case DIFF_PROGRAM_OPTION: + diff_program = optarg; + break; + case HELP_OPTION: + usage (); + check_stdout (); + return EXIT_SUCCESS; + case 'L': + /* Handle up to three -L options. */ + if (tag_count < 3) + { + tag_strings[tag_count++] = optarg; + break; + } + try_help ("too many file label options", 0); + default: + try_help (0, 0); + } + } + + edscript = incompat & ~merge; /* -AeExX3 without -m implies ed script. */ + show_2nd |= ~incompat & merge; /* -m without -AeExX3 implies -A. */ + flagging |= ~incompat & merge; + + if (incompat > 1 /* Ensure at most one of -AeExX3. */ + || finalwrite & merge /* -i -m would rewrite input file. */ + || (tag_count && ! flagging)) /* -L requires one of -AEX. */ + try_help ("incompatible options", 0); + + if (argc - optind != 3) + { + if (argc - optind < 3) + try_help ("missing operand after `%s'", argv[argc - 1]); + else + try_help ("extra operand `%s'", argv[optind + 3]); + } + + file = &argv[optind]; + + for (i = tag_count; i < 3; i++) + tag_strings[i] = file[i]; + + /* Always compare file1 to file2, even if file2 is "-". + This is needed for -mAeExX3. Using the file0 as + the common file would produce wrong results, because if the + file0-file1 diffs didn't line up with the file0-file2 diffs + (which is entirely possible since we don't use diff's -n option), + diff3 might report phantom changes from file1 to file2. + + Also, try to compare file0 to file1, because this is where + changes are expected to come from. Diffing between these pairs + of files is more likely to avoid phantom changes from file0 to file1. + + Historically, the default common file was file2, so some older + applications (e.g. Emacs ediff) used file2 as the ancestor. So, + for compatibility, if this is a 3-way diff (not a merge or + edscript), prefer file2 as the common file. */ + + common = 2 - (edscript | merge); + + if (STREQ (file[common], "-")) + { + /* Sigh. We've got standard input as the common file. We can't + call diff twice on stdin. Use the other arg as the common + file instead. */ + common = 3 - common; + if (STREQ (file[0], "-") || STREQ (file[common], "-")) + fatal ("`-' specified for more than one input file"); + } + + mapping[0] = 0; + mapping[1] = 3 - common; + mapping[2] = common; + + for (i = 0; i < 3; i++) + rev_mapping[mapping[i]] = i; + + for (i = 0; i < 3; i++) + if (strcmp (file[i], "-") != 0) + { + if (stat (file[i], &statb) < 0) + perror_with_exit (file[i]); + else if (S_ISDIR (statb.st_mode)) + error (EXIT_TROUBLE, EISDIR, "%s", file[i]); + } + +#ifdef SIGCHLD + /* System V fork+wait does not work if SIGCHLD is ignored. */ + signal (SIGCHLD, SIG_DFL); +#endif + + /* Invoke diff twice on two pairs of input files, combine the two + diffs, and output them. */ + + commonname = file[rev_mapping[FILEC]]; + thread1 = process_diff (file[rev_mapping[FILE1]], commonname, &last_block); + thread0 = process_diff (file[rev_mapping[FILE0]], commonname, &last_block); + diff3 = make_3way_diff (thread0, thread1); + if (edscript) + conflicts_found + = output_diff3_edscript (stdout, diff3, mapping, rev_mapping, + tag_strings[0], tag_strings[1], tag_strings[2]); + else if (merge) + { + xfreopen (file[rev_mapping[FILE0]], "r", stdin); + conflicts_found + = output_diff3_merge (stdin, stdout, diff3, mapping, rev_mapping, + tag_strings[0], tag_strings[1], tag_strings[2]); + if (ferror (stdin)) + fatal ("read failed"); + } + else + { + output_diff3 (stdout, diff3, mapping, rev_mapping); + conflicts_found = false; + } + + check_stdout (); + exit (conflicts_found); + return conflicts_found; +} + +static void +try_help (char const *reason_msgid, char const *operand) +{ + if (reason_msgid) + error (0, 0, _(reason_msgid), operand); + error (EXIT_TROUBLE, 0, + _("Try `%s --help' for more information."), program_name); + abort (); +} + +static void +check_stdout (void) +{ + if (ferror (stdout)) + fatal ("write failed"); + else if (fclose (stdout) != 0) + perror_with_exit (_("standard output")); +} + +static char const * const option_help_msgid[] = { + N_("-e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE."), + N_("-E --show-overlap Output unmerged changes, bracketing conflicts."), + N_("-A --show-all Output all changes, bracketing conflicts."), + N_("-x --overlap-only Output overlapping changes."), + N_("-X Output overlapping changes, bracketing them."), + N_("-3 --easy-only Output unmerged nonoverlapping changes."), + "", + N_("-m --merge Output merged file instead of ed script (default -A)."), + N_("-L LABEL --label=LABEL Use LABEL instead of file name."), + N_("-i Append `w' and `q' commands to ed scripts."), + N_("-a --text Treat all files as text."), + N_("--strip-trailing-cr Strip trailing carriage return on input."), + N_("-T --initial-tab Make tabs line up by prepending a tab."), + N_("--diff-program=PROGRAM Use PROGRAM to compare files."), + "", + N_("-v --version Output version info."), + N_("--help Output this help."), + 0 +}; + +static void +usage (void) +{ + char const * const *p; + + printf (_("Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n"), + program_name); + printf ("%s\n\n", _("Compare three files line by line.")); + for (p = option_help_msgid; *p; p++) + if (**p) + printf (" %s\n", _(*p)); + else + putchar ('\n'); + printf ("\n%s\n%s\n", + _("If a FILE is `-', read standard input."), + _("Exit status is 0 if successful, 1 if conflicts, 2 if trouble.")); + emit_bug_reporting_address (); +} + +/* Combine the two diffs together into one. + Here is the algorithm: + + File2 is shared in common between the two diffs. + Diff02 is the diff between 0 and 2. + Diff12 is the diff between 1 and 2. + + 1) Find the range for the first block in File2. + a) Take the lowest of the two ranges (in File2) in the two + current blocks (one from each diff) as being the low + water mark. Assign the upper end of this block as + being the high water mark and move the current block up + one. Mark the block just moved over as to be used. + b) Check the next block in the diff that the high water + mark is *not* from. + + *If* the high water mark is above + the low end of the range in that block, + + mark that block as to be used and move the current + block up. Set the high water mark to the max of + the high end of this block and the current. Repeat b. + + 2) Find the corresponding ranges in File0 (from the blocks + in diff02; line per line outside of diffs) and in File1. + Create a diff3_block, reserving space as indicated by the ranges. + + 3) Copy all of the pointers for file2 in. At least for now, + do memcmp's between corresponding strings in the two diffs. + + 4) Copy all of the pointers for file0 and 1 in. Get what is + needed from file2 (when there isn't a diff block, it's + identical to file2 within the range between diff blocks). + + 5) If the diff blocks used came from only one of the two + strings of diffs, then that file (i.e. the one other than + the common file in that diff) is the odd person out. If + diff blocks are used from both sets, check to see if files + 0 and 1 match: + + Same number of lines? If so, do a set of memcmp's (if + a memcmp matches; copy the pointer over; it'll be easier + later during comparisons). If they match, 0 & 1 are the + same. If not, all three different. + + Then do it again, until the blocks are exhausted. */ + + +/* Make a three way diff (chain of diff3_block's) from two two way + diffs (chains of diff_block's). Assume that each of the two diffs + passed are onto the same file (i.e. that each of the diffs were + made "to" the same file). Return a three way diff pointer with + numbering FILE0 = the other file in diff02, FILE1 = the other file + in diff12, and FILEC = the common file. */ + +static struct diff3_block * +make_3way_diff (struct diff_block *thread0, struct diff_block *thread1) +{ + /* Work on the two diffs passed to it as threads. Thread number 0 + is diff02, thread number 1 is diff12. USING is the base of the + list of blocks to be used to construct each block of the three + way diff; if no blocks from a particular thread are to be used, + that element of USING is 0. LAST_USING contains the last + elements on each of the using lists. + + HIGH_WATER_MARK is the highest line number in the common file + described in any of the diffs in either of the USING lists. + HIGH_WATER_THREAD names the thread. Similarly BASE_WATER_MARK + and BASE_WATER_THREAD describe the lowest line number in the + common file described in any of the diffs in either of the USING + lists. HIGH_WATER_DIFF is the diff from which the + HIGH_WATER_MARK was taken. + + HIGH_WATER_DIFF should always be equal to + LAST_USING[HIGH_WATER_THREAD]. OTHER_DIFF is the next diff to + check for higher water, and should always be equal to + CURRENT[HIGH_WATER_THREAD ^ 1]. OTHER_THREAD is the thread in + which the OTHER_DIFF is, and hence should always be equal to + HIGH_WATER_THREAD ^ 1. + + LAST_DIFF is the last diff block produced by this routine, for + line correspondence purposes between that diff and the one + currently being worked on. It is ZERO_DIFF before any blocks + have been created. */ + + struct diff_block *using[2]; + struct diff_block *last_using[2]; + struct diff_block *current[2]; + + lin high_water_mark; + + int high_water_thread; + int base_water_thread; + int other_thread; + + struct diff_block *high_water_diff; + struct diff_block *other_diff; + + struct diff3_block *result; + struct diff3_block *tmpblock; + struct diff3_block **result_end; + + struct diff3_block const *last_diff3; + + static struct diff3_block const zero_diff3; + + /* Initialization */ + result = 0; + result_end = &result; + current[0] = thread0; current[1] = thread1; + last_diff3 = &zero_diff3; + + /* Sniff up the threads until we reach the end */ + + while (current[0] || current[1]) + { + using[0] = using[1] = last_using[0] = last_using[1] = 0; + + /* Setup low and high water threads, diffs, and marks. */ + if (!current[0]) + base_water_thread = 1; + else if (!current[1]) + base_water_thread = 0; + else + base_water_thread = + (D_LOWLINE (current[0], FC) > D_LOWLINE (current[1], FC)); + + high_water_thread = base_water_thread; + + high_water_diff = current[high_water_thread]; + + high_water_mark = D_HIGHLINE (high_water_diff, FC); + + /* Make the diff you just got info from into the using class */ + using[high_water_thread] + = last_using[high_water_thread] + = high_water_diff; + current[high_water_thread] = high_water_diff->next; + last_using[high_water_thread]->next = 0; + + /* And mark the other diff */ + other_thread = high_water_thread ^ 0x1; + other_diff = current[other_thread]; + + /* Shuffle up the ladder, checking the other diff to see if it + needs to be incorporated. */ + while (other_diff + && D_LOWLINE (other_diff, FC) <= high_water_mark + 1) + { + + /* Incorporate this diff into the using list. Note that + this doesn't take it off the current list */ + if (using[other_thread]) + last_using[other_thread]->next = other_diff; + else + using[other_thread] = other_diff; + last_using[other_thread] = other_diff; + + /* Take it off the current list. Note that this following + code assumes that other_diff enters it equal to + current[high_water_thread ^ 0x1] */ + current[other_thread] = current[other_thread]->next; + other_diff->next = 0; + + /* Set the high_water stuff + If this comparison is equal, then this is the last pass + through this loop; since diff blocks within a given + thread cannot overlap, the high_water_mark will be + *below* the range_start of either of the next diffs. */ + + if (high_water_mark < D_HIGHLINE (other_diff, FC)) + { + high_water_thread ^= 1; + high_water_mark = D_HIGHLINE (other_diff, FC); + } + + /* Set the other diff */ + other_thread = high_water_thread ^ 0x1; + other_diff = current[other_thread]; + } + + /* The using lists contain a list of all of the blocks to be + included in this diff3_block. Create it. */ + + tmpblock = using_to_diff3_block (using, last_using, + base_water_thread, high_water_thread, + last_diff3); + + if (!tmpblock) + fatal ("internal error: screwup in format of diff blocks"); + + /* Put it on the list. */ + *result_end = tmpblock; + result_end = &tmpblock->next; + + /* Set up corresponding lines correctly. */ + last_diff3 = tmpblock; + } + return result; +} + +/* Take two lists of blocks (from two separate diff threads) and put + them together into one diff3 block. Return a pointer to this diff3 + block or 0 for failure. + + All arguments besides using are for the convenience of the routine; + they could be derived from the using array. LAST_USING is a pair + of pointers to the last blocks in the using structure. LOW_THREAD + and HIGH_THREAD tell which threads contain the lowest and highest + line numbers for File0. LAST_DIFF3 contains the last diff produced + in the calling routine. This is used for lines mappings that + would still be identical to the state that diff ended in. + + A distinction should be made in this routine between the two diffs + that are part of a normal two diff block, and the three diffs that + are part of a diff3_block. */ + +static struct diff3_block * +using_to_diff3_block (struct diff_block *using[2], + struct diff_block *last_using[2], + int low_thread, int high_thread, + struct diff3_block const *last_diff3) +{ + lin low[2], high[2]; + struct diff3_block *result; + struct diff_block *ptr; + int d; + lin i; + + /* Find the range in the common file. */ + lin lowc = D_LOWLINE (using[low_thread], FC); + lin highc = D_HIGHLINE (last_using[high_thread], FC); + + /* Find the ranges in the other files. + If using[d] is null, that means that the file to which that diff + refers is equivalent to the common file over this range. */ + + for (d = 0; d < 2; d++) + if (using[d]) + { + low[d] = D_LOW_MAPLINE (using[d], FC, FO, lowc); + high[d] = D_HIGH_MAPLINE (last_using[d], FC, FO, highc); + } + else + { + low[d] = D_HIGH_MAPLINE (last_diff3, FILEC, FILE0 + d, lowc); + high[d] = D_HIGH_MAPLINE (last_diff3, FILEC, FILE0 + d, highc); + } + + /* Create a block with the appropriate sizes */ + result = create_diff3_block (low[0], high[0], low[1], high[1], lowc, highc); + + /* Copy information for the common file. + Return with a zero if any of the compares failed. */ + + for (d = 0; d < 2; d++) + for (ptr = using[d]; ptr; ptr = D_NEXT (ptr)) + { + lin result_offset = D_LOWLINE (ptr, FC) - lowc; + + if (!copy_stringlist (D_LINEARRAY (ptr, FC), + D_LENARRAY (ptr, FC), + D_LINEARRAY (result, FILEC) + result_offset, + D_LENARRAY (result, FILEC) + result_offset, + D_NUMLINES (ptr, FC))) + return 0; + } + + /* Copy information for file d. First deal with anything that might be + before the first diff. */ + + for (d = 0; d < 2; d++) + { + struct diff_block *u = using[d]; + lin lo = low[d], hi = high[d]; + + for (i = 0; + i + lo < (u ? D_LOWLINE (u, FO) : hi + 1); + i++) + { + D_RELNUM (result, FILE0 + d, i) = D_RELNUM (result, FILEC, i); + D_RELLEN (result, FILE0 + d, i) = D_RELLEN (result, FILEC, i); + } + + for (ptr = u; ptr; ptr = D_NEXT (ptr)) + { + lin result_offset = D_LOWLINE (ptr, FO) - lo; + lin linec; + + if (!copy_stringlist (D_LINEARRAY (ptr, FO), + D_LENARRAY (ptr, FO), + D_LINEARRAY (result, FILE0 + d) + result_offset, + D_LENARRAY (result, FILE0 + d) + result_offset, + D_NUMLINES (ptr, FO))) + return 0; + + /* Catch the lines between here and the next diff */ + linec = D_HIGHLINE (ptr, FC) + 1 - lowc; + for (i = D_HIGHLINE (ptr, FO) + 1 - lo; + i < (D_NEXT (ptr) ? D_LOWLINE (D_NEXT (ptr), FO) : hi + 1) - lo; + i++) + { + D_RELNUM (result, FILE0 + d, i) = D_RELNUM (result, FILEC, linec); + D_RELLEN (result, FILE0 + d, i) = D_RELLEN (result, FILEC, linec); + linec++; + } + } + } + + /* Set correspond */ + if (!using[0]) + D3_TYPE (result) = DIFF_2ND; + else if (!using[1]) + D3_TYPE (result) = DIFF_1ST; + else + { + lin nl0 = D_NUMLINES (result, FILE0); + lin nl1 = D_NUMLINES (result, FILE1); + + if (nl0 != nl1 + || !compare_line_list (D_LINEARRAY (result, FILE0), + D_LENARRAY (result, FILE0), + D_LINEARRAY (result, FILE1), + D_LENARRAY (result, FILE1), + nl0)) + D3_TYPE (result) = DIFF_ALL; + else + D3_TYPE (result) = DIFF_3RD; + } + + return result; +} + +/* Copy pointers from a list of strings to a different list of + strings. If a spot in the second list is already filled, make sure + that it is filled with the same string; if not, return false, the copy + incomplete. Upon successful completion of the copy, return true. */ + +static bool +copy_stringlist (char * const fromptrs[], size_t const fromlengths[], + char *toptrs[], size_t tolengths[], + lin copynum) +{ + register char * const *f = fromptrs; + register char **t = toptrs; + register size_t const *fl = fromlengths; + register size_t *tl = tolengths; + + while (copynum--) + { + if (*t) + { + if (*fl != *tl || memcmp (*f, *t, *fl) != 0) + return false; + } + else + { + *t = *f; + *tl = *fl; + } + + t++; f++; tl++; fl++; + } + + return true; +} + +/* Create a diff3_block, with ranges as specified in the arguments. + Allocate the arrays for the various pointers (and zero them) based + on the arguments passed. Return the block as a result. */ + +static struct diff3_block * +create_diff3_block (lin low0, lin high0, + lin low1, lin high1, + lin low2, lin high2) +{ + struct diff3_block *result = xmalloc (sizeof *result); + lin numlines; + + D3_TYPE (result) = ERROR; + D_NEXT (result) = 0; + + /* Assign ranges */ + D_LOWLINE (result, FILE0) = low0; + D_HIGHLINE (result, FILE0) = high0; + D_LOWLINE (result, FILE1) = low1; + D_HIGHLINE (result, FILE1) = high1; + D_LOWLINE (result, FILE2) = low2; + D_HIGHLINE (result, FILE2) = high2; + + /* Allocate and zero space */ + numlines = D_NUMLINES (result, FILE0); + if (numlines) + { + D_LINEARRAY (result, FILE0) = xcalloc (numlines, sizeof (char *)); + D_LENARRAY (result, FILE0) = xcalloc (numlines, sizeof (size_t)); + } + else + { + D_LINEARRAY (result, FILE0) = 0; + D_LENARRAY (result, FILE0) = 0; + } + + numlines = D_NUMLINES (result, FILE1); + if (numlines) + { + D_LINEARRAY (result, FILE1) = xcalloc (numlines, sizeof (char *)); + D_LENARRAY (result, FILE1) = xcalloc (numlines, sizeof (size_t)); + } + else + { + D_LINEARRAY (result, FILE1) = 0; + D_LENARRAY (result, FILE1) = 0; + } + + numlines = D_NUMLINES (result, FILE2); + if (numlines) + { + D_LINEARRAY (result, FILE2) = xcalloc (numlines, sizeof (char *)); + D_LENARRAY (result, FILE2) = xcalloc (numlines, sizeof (size_t)); + } + else + { + D_LINEARRAY (result, FILE2) = 0; + D_LENARRAY (result, FILE2) = 0; + } + + /* Return */ + return result; +} + +/* Compare two lists of lines of text. + Return 1 if they are equivalent, 0 if not. */ + +static bool +compare_line_list (char * const list1[], size_t const lengths1[], + char * const list2[], size_t const lengths2[], + lin nl) +{ + char * const *l1 = list1; + char * const *l2 = list2; + size_t const *lgths1 = lengths1; + size_t const *lgths2 = lengths2; + + while (nl--) + if (!*l1 || !*l2 || *lgths1 != *lgths2++ + || memcmp (*l1++, *l2++, *lgths1++) != 0) + return false; + return true; +} + +/* Input and parse two way diffs. */ + +static struct diff_block * +process_diff (char const *filea, + char const *fileb, + struct diff_block **last_block) +{ + char *diff_contents; + char *diff_limit; + char *scan_diff; + enum diff_type dt; + lin i; + struct diff_block *block_list; + struct diff_block **block_list_end = &block_list; + struct diff_block *bptr IF_LINT (= NULL); + size_t too_many_lines = (PTRDIFF_MAX + / MIN (sizeof *bptr->lines[1], + sizeof *bptr->lengths[1])); + + diff_limit = read_diff (filea, fileb, &diff_contents); + scan_diff = diff_contents; + + while (scan_diff < diff_limit) + { + bptr = xmalloc (sizeof *bptr); + bptr->lines[0] = bptr->lines[1] = 0; + bptr->lengths[0] = bptr->lengths[1] = 0; + + dt = process_diff_control (&scan_diff, bptr); + if (dt == ERROR || *scan_diff != '\n') + { + fprintf (stderr, _("%s: diff failed: "), program_name); + do + { + putc (*scan_diff, stderr); + } + while (*scan_diff++ != '\n'); + exit (EXIT_TROUBLE); + } + scan_diff++; + + /* Force appropriate ranges to be null, if necessary */ + switch (dt) + { + case ADD: + bptr->ranges[0][0]++; + break; + case DELETE: + bptr->ranges[1][0]++; + break; + case CHANGE: + break; + default: + fatal ("internal error: invalid diff type in process_diff"); + break; + } + + /* Allocate space for the pointers for the lines from filea, and + parcel them out among these pointers */ + if (dt != ADD) + { + lin numlines = D_NUMLINES (bptr, 0); + if (too_many_lines <= numlines) + xalloc_die (); + bptr->lines[0] = xmalloc (numlines * sizeof *bptr->lines[0]); + bptr->lengths[0] = xmalloc (numlines * sizeof *bptr->lengths[0]); + for (i = 0; i < numlines; i++) + scan_diff = scan_diff_line (scan_diff, + &(bptr->lines[0][i]), + &(bptr->lengths[0][i]), + diff_limit, + '<'); + } + + /* Get past the separator for changes */ + if (dt == CHANGE) + { + if (strncmp (scan_diff, "---\n", 4)) + fatal ("invalid diff format; invalid change separator"); + scan_diff += 4; + } + + /* Allocate space for the pointers for the lines from fileb, and + parcel them out among these pointers */ + if (dt != DELETE) + { + lin numlines = D_NUMLINES (bptr, 1); + if (too_many_lines <= numlines) + xalloc_die (); + bptr->lines[1] = xmalloc (numlines * sizeof *bptr->lines[1]); + bptr->lengths[1] = xmalloc (numlines * sizeof *bptr->lengths[1]); + for (i = 0; i < numlines; i++) + scan_diff = scan_diff_line (scan_diff, + &(bptr->lines[1][i]), + &(bptr->lengths[1][i]), + diff_limit, + '>'); + } + + /* Place this block on the blocklist. */ + *block_list_end = bptr; + block_list_end = &bptr->next; + } + + *block_list_end = NULL; + *last_block = bptr; + return block_list; +} + +/* Skip tabs and spaces, and return the first character after them. */ + +static char * +skipwhite (char *s) +{ + while (*s == ' ' || *s == '\t') + s++; + return s; +} + +/* Read a nonnegative line number from S, returning the address of the + first character after the line number, and storing the number into + *PNUM. Return 0 if S does not point to a valid line number. */ + +static char * +readnum (char *s, lin *pnum) +{ + unsigned char c = *s; + lin num = 0; + + if (! ISDIGIT (c)) + return 0; + + do + { + num = c - '0' + num * 10; + c = *++s; + } + while (ISDIGIT (c)); + + *pnum = num; + return s; +} + +/* Parse a normal format diff control string. Return the type of the + diff (ERROR if the format is bad). All of the other important + information is filled into to the structure pointed to by db, and + the string pointer (whose location is passed to this routine) is + updated to point beyond the end of the string parsed. Note that + only the ranges in the diff_block will be set by this routine. + + If some specific pair of numbers has been reduced to a single + number, then both corresponding numbers in the diff block are set + to that number. In general these numbers are interpreted as ranges + inclusive, unless being used by the ADD or DELETE commands. It is + assumed that these will be special cased in a superior routine. */ + +static enum diff_type +process_diff_control (char **string, struct diff_block *db) +{ + char *s = *string; + enum diff_type type; + + /* Read first set of digits */ + s = readnum (skipwhite (s), &db->ranges[0][RANGE_START]); + if (! s) + return ERROR; + + /* Was that the only digit? */ + s = skipwhite (s); + if (*s == ',') + { + s = readnum (s + 1, &db->ranges[0][RANGE_END]); + if (! s) + return ERROR; + } + else + db->ranges[0][RANGE_END] = db->ranges[0][RANGE_START]; + + /* Get the letter */ + s = skipwhite (s); + switch (*s) + { + case 'a': + type = ADD; + break; + case 'c': + type = CHANGE; + break; + case 'd': + type = DELETE; + break; + default: + return ERROR; /* Bad format */ + } + s++; /* Past letter */ + + /* Read second set of digits */ + s = readnum (skipwhite (s), &db->ranges[1][RANGE_START]); + if (! s) + return ERROR; + + /* Was that the only digit? */ + s = skipwhite (s); + if (*s == ',') + { + s = readnum (s + 1, &db->ranges[1][RANGE_END]); + if (! s) + return ERROR; + s = skipwhite (s); /* To move to end */ + } + else + db->ranges[1][RANGE_END] = db->ranges[1][RANGE_START]; + + *string = s; + return type; +} + +static char * +read_diff (char const *filea, + char const *fileb, + char **output_placement) +{ + char *diff_result; + size_t current_chunk_size, total; + int fd, wstatus, status; + int werrno = 0; + struct stat pipestat; + +#if HAVE_WORKING_FORK || HAVE_WORKING_VFORK + + char const *argv[9]; + char const **ap; + int fds[2]; + pid_t pid; + + ap = argv; + *ap++ = diff_program; + if (text) + *ap++ = "-a"; + if (strip_trailing_cr) + *ap++ = "--strip-trailing-cr"; + *ap++ = "--horizon-lines=100"; + *ap++ = "--"; + *ap++ = filea; + *ap++ = fileb; + *ap = 0; + + if (pipe (fds) != 0) + perror_with_exit ("pipe"); + + pid = vfork (); + if (pid == 0) + { + /* Child */ + close (fds[0]); + if (fds[1] != STDOUT_FILENO) + { + dup2 (fds[1], STDOUT_FILENO); + close (fds[1]); + } + + /* The cast to (char **) is needed for portability to older + hosts with a nonstandard prototype for execvp. */ + execvp (diff_program, (char **) argv); + + _exit (errno == ENOENT ? 127 : 126); + } + + if (pid == -1) + perror_with_exit ("fork"); + + close (fds[1]); /* Prevent erroneous lack of EOF */ + fd = fds[0]; + +#else + + FILE *fpipe; + char const args[] = " --horizon-lines=100 -- "; + char *command = xmalloc (shell_quote_length (diff_program) + + sizeof "-a" + + sizeof "--strip-trailing-cr" + + sizeof args - 1 + + shell_quote_length (filea) + 1 + + shell_quote_length (fileb) + 1); + char *p = command; + p = shell_quote_copy (p, diff_program); + if (text) + { + strcpy (p, " -a"); + p += 3; + } + if (strip_trailing_cr) + { + strcpy (p, " --strip-trailing-cr"); + p += 20; + } + strcpy (p, args); + p += sizeof args - 1; + p = shell_quote_copy (p, filea); + *p++ = ' '; + p = shell_quote_copy (p, fileb); + *p = 0; + errno = 0; + fpipe = popen (command, "r"); + if (!fpipe) + perror_with_exit (command); + free (command); + fd = fileno (fpipe); + +#endif + + if (fstat (fd, &pipestat) != 0) + perror_with_exit ("fstat"); + current_chunk_size = MAX (1, STAT_BLOCKSIZE (pipestat)); + diff_result = xmalloc (current_chunk_size); + total = 0; + + for (;;) + { + size_t bytes_to_read = current_chunk_size - total; + size_t bytes = block_read (fd, diff_result + total, bytes_to_read); + total += bytes; + if (bytes != bytes_to_read) + { + if (bytes == SIZE_MAX) + perror_with_exit (_("read failed")); + break; + } + if (PTRDIFF_MAX / 2 <= current_chunk_size) + xalloc_die (); + current_chunk_size *= 2; + diff_result = xrealloc (diff_result, current_chunk_size); + } + + if (total != 0 && diff_result[total-1] != '\n') + fatal ("invalid diff format; incomplete last line"); + + *output_placement = diff_result; + +#if ! (HAVE_WORKING_FORK || HAVE_WORKING_VFORK) + + wstatus = pclose (fpipe); + if (wstatus == -1) + werrno = errno; + +#else + + if (close (fd) != 0) + perror_with_exit ("close"); + if (waitpid (pid, &wstatus, 0) < 0) + perror_with_exit ("waitpid"); + +#endif + + status = ! werrno && WIFEXITED (wstatus) ? WEXITSTATUS (wstatus) : INT_MAX; + + if (EXIT_TROUBLE <= status) + error (EXIT_TROUBLE, werrno, + _(status == 126 + ? "subsidiary program `%s' could not be invoked" + : status == 127 + ? "subsidiary program `%s' not found" + : status == INT_MAX + ? "subsidiary program `%s' failed" + : "subsidiary program `%s' failed (exit status %d)"), + diff_program, status); + + return diff_result + total; +} + + +/* Scan a regular diff line (consisting of > or <, followed by a + space, followed by text (including nulls) up to a newline. + + This next routine began life as a macro and many parameters in it + are used as call-by-reference values. */ +static char * +scan_diff_line (char *scan_ptr, char **set_start, size_t *set_length, + char *limit, char leadingchar) +{ + char *line_ptr; + + if (!(scan_ptr[0] == leadingchar + && scan_ptr[1] == ' ')) + fatal ("invalid diff format; incorrect leading line chars"); + + *set_start = line_ptr = scan_ptr + 2; + while (*line_ptr++ != '\n') + continue; + + /* Include newline if the original line ended in a newline, + or if an edit script is being generated. + Copy any missing newline message to stderr if an edit script is being + generated, because edit scripts cannot handle missing newlines. + Return the beginning of the next line. */ + *set_length = line_ptr - *set_start; + if (line_ptr < limit && *line_ptr == '\\') + { + if (edscript) + fprintf (stderr, "%s:", program_name); + else + --*set_length; + line_ptr++; + do + { + if (edscript) + putc (*line_ptr, stderr); + } + while (*line_ptr++ != '\n'); + } + + return line_ptr; +} + +/* Output a three way diff passed as a list of diff3_block's. The + argument MAPPING is indexed by external file number (in the + argument list) and contains the internal file number (from the diff + passed). This is important because the user expects outputs in + terms of the argument list number, and the diff passed may have + been done slightly differently (if the last argument was "-", for + example). REV_MAPPING is the inverse of MAPPING. */ + +static void +output_diff3 (FILE *outputfile, struct diff3_block *diff, + int const mapping[3], int const rev_mapping[3]) +{ + int i; + int oddoneout; + char *cp; + struct diff3_block *ptr; + lin line; + size_t length; + int dontprint; + static int skew_increment[3] = { 2, 3, 1 }; /* 0==>2==>1==>3 */ + char const *line_prefix = initial_tab ? "\t" : " "; + + for (ptr = diff; ptr; ptr = D_NEXT (ptr)) + { + char x[2]; + + switch (ptr->correspond) + { + case DIFF_ALL: + x[0] = 0; + dontprint = 3; /* Print them all */ + oddoneout = 3; /* Nobody's odder than anyone else */ + break; + case DIFF_1ST: + case DIFF_2ND: + case DIFF_3RD: + oddoneout = rev_mapping[ptr->correspond - DIFF_1ST]; + + x[0] = oddoneout + '1'; + x[1] = 0; + dontprint = oddoneout == 0; + break; + default: + fatal ("internal error: invalid diff type passed to output"); + } + fprintf (outputfile, "====%s\n", x); + + /* Go 0, 2, 1 if the first and third outputs are equivalent. */ + for (i = 0; i < 3; + i = (oddoneout == 1 ? skew_increment[i] : i + 1)) + { + int realfile = mapping[i]; + lin lowt = D_LOWLINE (ptr, realfile); + lin hight = D_HIGHLINE (ptr, realfile); + long int llowt = lowt; + long int lhight = hight; + + fprintf (outputfile, "%d:", i + 1); + switch (lowt - hight) + { + case 1: + fprintf (outputfile, "%lda\n", llowt - 1); + break; + case 0: + fprintf (outputfile, "%ldc\n", llowt); + break; + default: + fprintf (outputfile, "%ld,%ldc\n", llowt, lhight); + break; + } + + if (i == dontprint) continue; + + if (lowt <= hight) + { + line = 0; + do + { + fputs (line_prefix, outputfile); + cp = D_RELNUM (ptr, realfile, line); + length = D_RELLEN (ptr, realfile, line); + fwrite (cp, sizeof (char), length, outputfile); + } + while (++line < hight - lowt + 1); + if (cp[length - 1] != '\n') + fprintf (outputfile, "\n\\ %s\n", + _("No newline at end of file")); + } + } + } +} + + +/* Output to OUTPUTFILE the lines of B taken from FILENUM. Double any + initial '.'s; yield nonzero if any initial '.'s were doubled. */ + +static bool +dotlines (FILE *outputfile, struct diff3_block *b, int filenum) +{ + lin i; + bool leading_dot = false; + + for (i = 0; + i < D_NUMLINES (b, filenum); + i++) + { + char *line = D_RELNUM (b, filenum, i); + if (line[0] == '.') + { + leading_dot = true; + fputc ('.', outputfile); + } + fwrite (line, sizeof (char), + D_RELLEN (b, filenum, i), outputfile); + } + + return leading_dot; +} + +/* Output to OUTPUTFILE a '.' line. If LEADING_DOT is true, also + output a command that removes initial '.'s starting with line START + and continuing for NUM lines. (START is long int, not lin, for + convenience with printf %ld formats.) */ + +static void +undotlines (FILE *outputfile, bool leading_dot, long int start, lin num) +{ + fputs (".\n", outputfile); + if (leading_dot) + { + if (num == 1) + fprintf (outputfile, "%lds/^\\.//\n", start); + else + fprintf (outputfile, "%ld,%lds/^\\.//\n", start, start + num - 1); + } +} + +/* Output a diff3 set of blocks as an ed script. This script applies + the changes between file's 2 & 3 to file 1. Take the precise + format of the ed script to be output from global variables set + during options processing. Reverse the order of + the set of diff3 blocks in DIFF; this gets + around the problems involved with changing line numbers in an ed + script. + + As in `output_diff3', the variable MAPPING maps from file number + according to the argument list to file number according to the diff + passed. All files listed below are in terms of the argument list. + REV_MAPPING is the inverse of MAPPING. + + FILE0, FILE1 and FILE2 are the strings to print as the names of the + three files. These may be the actual names, or may be the + arguments specified with -L. + + Return 1 if conflicts were found. */ + +static bool +output_diff3_edscript (FILE *outputfile, struct diff3_block *diff, + int const mapping[3], int const rev_mapping[3], + char const *file0, char const *file1, char const *file2) +{ + bool leading_dot; + bool conflicts_found = false; + bool conflict; + struct diff3_block *b; + + for (b = reverse_diff3_blocklist (diff); b; b = b->next) + { + /* Must do mapping correctly. */ + enum diff_type type + = (b->correspond == DIFF_ALL + ? DIFF_ALL + : DIFF_1ST + rev_mapping[b->correspond - DIFF_1ST]); + + long int low0, high0; + + /* If we aren't supposed to do this output block, skip it. */ + switch (type) + { + default: continue; + case DIFF_2ND: if (!show_2nd) continue; conflict = true; break; + case DIFF_3RD: if (overlap_only) continue; conflict = false; break; + case DIFF_ALL: if (simple_only) continue; conflict = flagging; break; + } + + low0 = D_LOWLINE (b, mapping[FILE0]); + high0 = D_HIGHLINE (b, mapping[FILE0]); + + if (conflict) + { + conflicts_found = true; + + + /* Mark end of conflict. */ + + fprintf (outputfile, "%lda\n", high0); + leading_dot = false; + if (type == DIFF_ALL) + { + if (show_2nd) + { + /* Append lines from FILE1. */ + fprintf (outputfile, "||||||| %s\n", file1); + leading_dot = dotlines (outputfile, b, mapping[FILE1]); + } + /* Append lines from FILE2. */ + fputs ("=======\n", outputfile); + leading_dot |= dotlines (outputfile, b, mapping[FILE2]); + } + fprintf (outputfile, ">>>>>>> %s\n", file2); + undotlines (outputfile, leading_dot, high0 + 2, + (D_NUMLINES (b, mapping[FILE1]) + + D_NUMLINES (b, mapping[FILE2]) + 1)); + + + /* Mark start of conflict. */ + + fprintf (outputfile, "%lda\n<<<<<<< %s\n", low0 - 1, + type == DIFF_ALL ? file0 : file1); + leading_dot = false; + if (type == DIFF_2ND) + { + /* Prepend lines from FILE1. */ + leading_dot = dotlines (outputfile, b, mapping[FILE1]); + fputs ("=======\n", outputfile); + } + undotlines (outputfile, leading_dot, low0 + 1, + D_NUMLINES (b, mapping[FILE1])); + } + else if (D_NUMLINES (b, mapping[FILE2]) == 0) + /* Write out a delete */ + { + if (low0 == high0) + fprintf (outputfile, "%ldd\n", low0); + else + fprintf (outputfile, "%ld,%ldd\n", low0, high0); + } + else + /* Write out an add or change */ + { + switch (high0 - low0) + { + case -1: + fprintf (outputfile, "%lda\n", high0); + break; + case 0: + fprintf (outputfile, "%ldc\n", high0); + break; + default: + fprintf (outputfile, "%ld,%ldc\n", low0, high0); + break; + } + + undotlines (outputfile, dotlines (outputfile, b, mapping[FILE2]), + low0, D_NUMLINES (b, mapping[FILE2])); + } + } + if (finalwrite) + fputs ("w\nq\n", outputfile); + return conflicts_found; +} + +/* Read from INFILE and output to OUTPUTFILE a set of diff3_blocks + DIFF as a merged file. This acts like 'ed file0 + <[output_diff3_edscript]', except that it works even for binary + data or incomplete lines. + + As before, MAPPING maps from arg list file number to diff file + number, REV_MAPPING is its inverse, and FILE0, FILE1, and FILE2 are + the names of the files. + + Return 1 if conflicts were found. */ + +static bool +output_diff3_merge (FILE *infile, FILE *outputfile, struct diff3_block *diff, + int const mapping[3], int const rev_mapping[3], + char const *file0, char const *file1, char const *file2) +{ + int c; + lin i; + bool conflicts_found = false; + bool conflict; + struct diff3_block *b; + lin linesread = 0; + + for (b = diff; b; b = b->next) + { + /* Must do mapping correctly. */ + enum diff_type type + = ((b->correspond == DIFF_ALL) + ? DIFF_ALL + : DIFF_1ST + rev_mapping[b->correspond - DIFF_1ST]); + char const *format_2nd = "<<<<<<< %s\n"; + + /* If we aren't supposed to do this output block, skip it. */ + switch (type) + { + default: continue; + case DIFF_2ND: if (!show_2nd) continue; conflict = true; break; + case DIFF_3RD: if (overlap_only) continue; conflict = false; break; + case DIFF_ALL: if (simple_only) continue; conflict = flagging; + format_2nd = "||||||| %s\n"; + break; + } + + /* Copy I lines from file 0. */ + i = D_LOWLINE (b, FILE0) - linesread - 1; + linesread += i; + while (0 <= --i) + do + { + c = getc (infile); + if (c == EOF) + { + if (ferror (infile)) + perror_with_exit (_("read failed")); + else if (feof (infile)) + fatal ("input file shrank"); + } + putc (c, outputfile); + } + while (c != '\n'); + + if (conflict) + { + conflicts_found = true; + + if (type == DIFF_ALL) + { + /* Put in lines from FILE0 with bracket. */ + fprintf (outputfile, "<<<<<<< %s\n", file0); + for (i = 0; + i < D_NUMLINES (b, mapping[FILE0]); + i++) + fwrite (D_RELNUM (b, mapping[FILE0], i), sizeof (char), + D_RELLEN (b, mapping[FILE0], i), outputfile); + } + + if (show_2nd) + { + /* Put in lines from FILE1 with bracket. */ + fprintf (outputfile, format_2nd, file1); + for (i = 0; + i < D_NUMLINES (b, mapping[FILE1]); + i++) + fwrite (D_RELNUM (b, mapping[FILE1], i), sizeof (char), + D_RELLEN (b, mapping[FILE1], i), outputfile); + } + + fputs ("=======\n", outputfile); + } + + /* Put in lines from FILE2. */ + for (i = 0; + i < D_NUMLINES (b, mapping[FILE2]); + i++) + fwrite (D_RELNUM (b, mapping[FILE2], i), sizeof (char), + D_RELLEN (b, mapping[FILE2], i), outputfile); + + if (conflict) + fprintf (outputfile, ">>>>>>> %s\n", file2); + + /* Skip I lines in file 0. */ + i = D_NUMLINES (b, FILE0); + linesread += i; + while (0 <= --i) + while ((c = getc (infile)) != '\n') + if (c == EOF) + { + if (ferror (infile)) + perror_with_exit (_("read failed")); + else if (feof (infile)) + { + if (i || b->next) + fatal ("input file shrank"); + return conflicts_found; + } + } + } + /* Copy rest of common file. */ + while ((c = getc (infile)) != EOF || !(ferror (infile) | feof (infile))) + putc (c, outputfile); + return conflicts_found; +} + +/* Reverse the order of the list of diff3 blocks. */ + +static struct diff3_block * +reverse_diff3_blocklist (struct diff3_block *diff) +{ + register struct diff3_block *tmp, *next, *prev; + + for (tmp = diff, prev = 0; tmp; tmp = next) + { + next = tmp->next; + tmp->next = prev; + prev = tmp; + } + + return prev; +} + +static void +fatal (char const *msgid) +{ + error (EXIT_TROUBLE, 0, "%s", _(msgid)); + abort (); +} + +static void +perror_with_exit (char const *string) +{ + error (EXIT_TROUBLE, errno, "%s", string); + abort (); +} diff --git a/src/dir.c b/src/dir.c new file mode 100644 index 0000000..5b4eaec --- /dev/null +++ b/src/dir.c @@ -0,0 +1,283 @@ +/* Read, sort and compare two directories. Used for GNU DIFF. + + Copyright (C) 1988-1989, 1992-1995, 1998, 2001-2002, 2004, 2006-2007, + 2009-2010 Free Software Foundation, Inc. + + This file is part of GNU DIFF. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "diff.h" +#include <error.h> +#include <exclude.h> +#include <setjmp.h> +#include <xalloc.h> + +/* Read the directory named by DIR and store into DIRDATA a sorted vector + of filenames for its contents. DIR->desc == -1 means this directory is + known to be nonexistent, so set DIRDATA to an empty vector. + Return -1 (setting errno) if error, 0 otherwise. */ + +struct dirdata +{ + size_t nnames; /* Number of names. */ + char const **names; /* Sorted names of files in dir, followed by 0. */ + char *data; /* Allocated storage for file names. */ +}; + +/* Whether file names in directories should be compared with + locale-specific sorting. */ +static bool locale_specific_sorting; + +/* Where to go if locale-specific sorting fails. */ +static jmp_buf failed_locale_specific_sorting; + +static bool dir_loop (struct comparison const *, int); +static int compare_names_for_qsort (void const *, void const *); + + +/* Read a directory and get its vector of names. */ + +static bool +dir_read (struct file_data const *dir, struct dirdata *dirdata) +{ + register struct dirent *next; + register size_t i; + + /* Address of block containing the files that are described. */ + char const **names; + + /* Number of files in directory. */ + size_t nnames; + + /* Allocated and used storage for file name data. */ + char *data; + size_t data_alloc, data_used; + + dirdata->names = 0; + dirdata->data = 0; + nnames = 0; + data = 0; + + if (dir->desc != -1) + { + /* Open the directory and check for errors. */ + register DIR *reading = opendir (dir->name); + if (!reading) + return false; + + /* Initialize the table of filenames. */ + + data_alloc = 512; + data_used = 0; + dirdata->data = data = xmalloc (data_alloc); + + /* Read the directory entries, and insert the subfiles + into the `data' table. */ + + while ((errno = 0, (next = readdir (reading)) != 0)) + { + char *d_name = next->d_name; + size_t d_size = _D_EXACT_NAMLEN (next) + 1; + + /* Ignore "." and "..". */ + if (d_name[0] == '.' + && (d_name[1] == 0 || (d_name[1] == '.' && d_name[2] == 0))) + continue; + + if (excluded_file_name (excluded, d_name)) + continue; + + while (data_alloc < data_used + d_size) + { + if (PTRDIFF_MAX / 2 <= data_alloc) + xalloc_die (); + dirdata->data = data = xrealloc (data, data_alloc *= 2); + } + + memcpy (data + data_used, d_name, d_size); + data_used += d_size; + nnames++; + } + if (errno) + { + int e = errno; + closedir (reading); + errno = e; + return false; + } +#if CLOSEDIR_VOID + closedir (reading); +#else + if (closedir (reading) != 0) + return false; +#endif + } + + /* Create the `names' table from the `data' table. */ + if (PTRDIFF_MAX / sizeof *names - 1 <= nnames) + xalloc_die (); + dirdata->names = names = xmalloc ((nnames + 1) * sizeof *names); + dirdata->nnames = nnames; + for (i = 0; i < nnames; i++) + { + names[i] = data; + data += strlen (data) + 1; + } + names[nnames] = 0; + return true; +} + +/* Compare file names, returning a value compatible with strcmp. */ + +static int +compare_names (char const *name1, char const *name2) +{ + if (locale_specific_sorting) + { + int r; + errno = 0; + if (ignore_file_name_case) + r = strcasecoll (name1, name2); + else + r = strcoll (name1, name2); + if (errno) + { + error (0, errno, _("cannot compare file names `%s' and `%s'"), + name1, name2); + longjmp (failed_locale_specific_sorting, 1); + } + return r; + } + + return (ignore_file_name_case + ? strcasecmp (name1, name2) + : file_name_cmp (name1, name2)); +} + +/* A wrapper for compare_names suitable as an argument for qsort. */ + +static int +compare_names_for_qsort (void const *file1, void const *file2) +{ + char const *const *f1 = file1; + char const *const *f2 = file2; + return compare_names (*f1, *f2); +} + +/* Compare the contents of two directories named in CMP. + This is a top-level routine; it does everything necessary for diff + on two directories. + + CMP->file[0].desc == -1 says directory CMP->file[0] doesn't exist, + but pretend it is empty. Likewise for CMP->file[1]. + + HANDLE_FILE is a caller-provided subroutine called to handle each file. + It gets three operands: CMP, name of file in dir 0, name of file in dir 1. + These names are relative to the original working directory. + + For a file that appears in only one of the dirs, one of the name-args + to HANDLE_FILE is zero. + + Returns the maximum of all the values returned by HANDLE_FILE, + or EXIT_TROUBLE if trouble is encountered in opening files. */ + +int +diff_dirs (struct comparison const *cmp, + int (*handle_file) (struct comparison const *, + char const *, char const *)) +{ + struct dirdata dirdata[2]; + int volatile val = EXIT_SUCCESS; + int i; + + if ((cmp->file[0].desc == -1 || dir_loop (cmp, 0)) + && (cmp->file[1].desc == -1 || dir_loop (cmp, 1))) + { + error (0, 0, _("%s: recursive directory loop"), + cmp->file[cmp->file[0].desc == -1].name); + return EXIT_TROUBLE; + } + + /* Get contents of both dirs. */ + for (i = 0; i < 2; i++) + if (! dir_read (&cmp->file[i], &dirdata[i])) + { + perror_with_name (cmp->file[i].name); + val = EXIT_TROUBLE; + } + + if (val == EXIT_SUCCESS) + { + char const **volatile names[2]; + names[0] = dirdata[0].names; + names[1] = dirdata[1].names; + + /* Use locale-specific sorting if possible, else native byte order. */ + locale_specific_sorting = true; + if (setjmp (failed_locale_specific_sorting)) + locale_specific_sorting = false; + + /* Sort the directories. */ + for (i = 0; i < 2; i++) + qsort (names[i], dirdata[i].nnames, sizeof *dirdata[i].names, + compare_names_for_qsort); + + /* If `-S name' was given, and this is the topmost level of comparison, + ignore all file names less than the specified starting name. */ + + if (starting_file && ! cmp->parent) + { + while (*names[0] && compare_names (*names[0], starting_file) < 0) + names[0]++; + while (*names[1] && compare_names (*names[1], starting_file) < 0) + names[1]++; + } + + /* Loop while files remain in one or both dirs. */ + while (*names[0] || *names[1]) + { + /* Compare next name in dir 0 with next name in dir 1. + At the end of a dir, + pretend the "next name" in that dir is very large. */ + int nameorder = (!*names[0] ? 1 : !*names[1] ? -1 + : compare_names (*names[0], *names[1])); + int v1 = (*handle_file) (cmp, + 0 < nameorder ? 0 : *names[0]++, + nameorder < 0 ? 0 : *names[1]++); + if (val < v1) + val = v1; + } + } + + for (i = 0; i < 2; i++) + { + free (dirdata[i].names); + free (dirdata[i].data); + } + + return val; +} + +/* Return nonzero if CMP is looping recursively in argument I. */ + +static bool +dir_loop (struct comparison const *cmp, int i) +{ + struct comparison const *p = cmp; + while ((p = p->parent)) + if (0 < same_file (&p->file[i].stat, &cmp->file[i].stat)) + return true; + return false; +} diff --git a/src/ed.c b/src/ed.c new file mode 100644 index 0000000..08acf50 --- /dev/null +++ b/src/ed.c @@ -0,0 +1,175 @@ +/* Output routines for ed-script format. + + Copyright (C) 1988-1989, 1991-1993, 1995, 1998, 2001, 2004, 2006, 2009-2010 + Free Software Foundation, Inc. + + This file is part of GNU DIFF. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "diff.h" + +static void print_ed_hunk (struct change *); +static void print_rcs_hunk (struct change *); +static void pr_forward_ed_hunk (struct change *); + +/* Print our script as ed commands. */ + +void +print_ed_script (struct change *script) +{ + print_script (script, find_reverse_change, print_ed_hunk); +} + +/* Print a hunk of an ed diff */ + +static void +print_ed_hunk (struct change *hunk) +{ + lin f0, l0, f1, l1; + enum changes changes; + +#ifdef DEBUG + debug_script (hunk); +#endif + + /* Determine range of line numbers involved in each file. */ + changes = analyze_hunk (hunk, &f0, &l0, &f1, &l1); + if (!changes) + return; + + begin_output (); + + /* Print out the line number header for this hunk */ + print_number_range (',', &files[0], f0, l0); + fputc (change_letter[changes], outfile); + fputc ('\n', outfile); + + /* Print new/changed lines from second file, if needed */ + if (changes != OLD) + { + lin i; + bool insert_mode = true; + + for (i = f1; i <= l1; i++) + { + if (!insert_mode) + { + fputs ("a\n", outfile); + insert_mode = true; + } + if (files[1].linbuf[i][0] == '.' && files[1].linbuf[i][1] == '\n') + { + /* The file's line is just a dot, and it would exit + insert mode. Precede the dot with another dot, exit + insert mode and remove the extra dot. */ + fputs ("..\n.\ns/.//\n", outfile); + insert_mode = false; + } + else + print_1_line ("", &files[1].linbuf[i]); + } + + if (insert_mode) + fputs (".\n", outfile); + } +} + +/* Print change script in the style of ed commands, + but print the changes in the order they appear in the input files, + which means that the commands are not truly useful with ed. + Because of the issue with lines containing just a dot, the output + is not even parseable. */ + +void +pr_forward_ed_script (struct change *script) +{ + print_script (script, find_change, pr_forward_ed_hunk); +} + +static void +pr_forward_ed_hunk (struct change *hunk) +{ + lin i, f0, l0, f1, l1; + + /* Determine range of line numbers involved in each file. */ + enum changes changes = analyze_hunk (hunk, &f0, &l0, &f1, &l1); + if (!changes) + return; + + begin_output (); + + fputc (change_letter[changes], outfile); + print_number_range (' ', files, f0, l0); + fputc ('\n', outfile); + + /* If deletion only, print just the number range. */ + + if (changes == OLD) + return; + + /* For insertion (with or without deletion), print the number range + and the lines from file 2. */ + + for (i = f1; i <= l1; i++) + print_1_line ("", &files[1].linbuf[i]); + + fputs (".\n", outfile); +} + +/* Print in a format somewhat like ed commands + except that each insert command states the number of lines it inserts. + This format is used for RCS. */ + +void +print_rcs_script (struct change *script) +{ + print_script (script, find_change, print_rcs_hunk); +} + +/* Print a hunk of an RCS diff */ + +static void +print_rcs_hunk (struct change *hunk) +{ + lin i, f0, l0, f1, l1; + long int tf0, tl0, tf1, tl1; + + /* Determine range of line numbers involved in each file. */ + enum changes changes = analyze_hunk (hunk, &f0, &l0, &f1, &l1); + if (!changes) + return; + + begin_output (); + + translate_range (&files[0], f0, l0, &tf0, &tl0); + + if (changes & OLD) + { + /* For deletion, print just the starting line number from file 0 + and the number of lines deleted. */ + fprintf (outfile, "d%ld %ld\n", tf0, tf0 <= tl0 ? tl0 - tf0 + 1 : 1); + } + + if (changes & NEW) + { + /* Take last-line-number from file 0 and # lines from file 1. */ + translate_range (&files[1], f1, l1, &tf1, &tl1); + fprintf (outfile, "a%ld %ld\n", tl0, tf1 <= tl1 ? tl1 - tf1 + 1 : 1); + + /* Print the inserted lines. */ + for (i = f1; i <= l1; i++) + print_1_line ("", &files[1].linbuf[i]); + } +} diff --git a/src/ifdef.c b/src/ifdef.c new file mode 100644 index 0000000..a48f830 --- /dev/null +++ b/src/ifdef.c @@ -0,0 +1,430 @@ +/* #ifdef-format output routines for GNU DIFF. + + Copyright (C) 1989, 1991-1994, 2001-2002, 2004, 2006, 2009-2010 Free + Software Foundation, Inc. + + This file is part of GNU DIFF. + + GNU DIFF is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY. No author or distributor + accepts responsibility to anyone for the consequences of using it + or for whether it serves any particular purpose or works at all, + unless he says so in writing. Refer to the GNU General Public + License for full details. + + Everyone is granted permission to copy, modify and redistribute + GNU DIFF, but only under the conditions described in the + GNU General Public License. A copy of this license is + supposed to have been given to you along with GNU DIFF so you + can know your rights and responsibilities. It should be in a + file named COPYING. Among other things, the copyright notice + and this notice must be preserved on all copies. */ + +#include "diff.h" + +#include <xalloc.h> + +struct group +{ + struct file_data const *file; + lin from, upto; /* start and limit lines for this group of lines */ +}; + +static char const *format_group (FILE *, char const *, char, + struct group const *); +static char const *do_printf_spec (FILE *, char const *, + struct file_data const *, lin, + struct group const *); +static char const *scan_char_literal (char const *, char *); +static lin groups_letter_value (struct group const *, char); +static void format_ifdef (char const *, lin, lin, lin, lin); +static void print_ifdef_hunk (struct change *); +static void print_ifdef_lines (FILE *, char const *, struct group const *); + +static lin next_line0; +static lin next_line1; + +/* Print the edit-script SCRIPT as a merged #ifdef file. */ + +void +print_ifdef_script (struct change *script) +{ + next_line0 = next_line1 = - files[0].prefix_lines; + print_script (script, find_change, print_ifdef_hunk); + if (next_line0 < files[0].valid_lines + || next_line1 < files[1].valid_lines) + { + begin_output (); + format_ifdef (group_format[UNCHANGED], + next_line0, files[0].valid_lines, + next_line1, files[1].valid_lines); + } +} + +/* Print a hunk of an ifdef diff. + This is a contiguous portion of a complete edit script, + describing changes in consecutive lines. */ + +static void +print_ifdef_hunk (struct change *hunk) +{ + lin first0, last0, first1, last1; + + /* Determine range of line numbers involved in each file. */ + enum changes changes = analyze_hunk (hunk, &first0, &last0, &first1, &last1); + if (!changes) + return; + + begin_output (); + + /* Print lines up to this change. */ + if (next_line0 < first0 || next_line1 < first1) + format_ifdef (group_format[UNCHANGED], + next_line0, first0, + next_line1, first1); + + /* Print this change. */ + next_line0 = last0 + 1; + next_line1 = last1 + 1; + format_ifdef (group_format[changes], + first0, next_line0, + first1, next_line1); +} + +/* Print a set of lines according to FORMAT. + Lines BEG0 up to END0 are from the first file; + lines BEG1 up to END1 are from the second file. */ + +static void +format_ifdef (char const *format, lin beg0, lin end0, lin beg1, lin end1) +{ + struct group groups[2]; + + groups[0].file = &files[0]; + groups[0].from = beg0; + groups[0].upto = end0; + groups[1].file = &files[1]; + groups[1].from = beg1; + groups[1].upto = end1; + format_group (outfile, format, 0, groups); +} + +/* Print to file OUT a set of lines according to FORMAT. + The format ends at the first free instance of ENDCHAR. + Yield the address of the terminating character. + GROUPS specifies which lines to print. + If OUT is zero, do not actually print anything; just scan the format. */ + +static char const * +format_group (register FILE *out, char const *format, char endchar, + struct group const *groups) +{ + register char c; + register char const *f = format; + + while ((c = *f) != endchar && c != 0) + { + char const *f1 = ++f; + if (c == '%') + switch ((c = *f++)) + { + case '%': + break; + + case '(': + /* Print if-then-else format e.g. `%(n=1?thenpart:elsepart)'. */ + { + int i; + uintmax_t value[2]; + FILE *thenout, *elseout; + + for (i = 0; i < 2; i++) + { + if (ISDIGIT (*f)) + { + char *fend; + errno = 0; + value[i] = strtoumax (f, &fend, 10); + if (errno) + goto bad_format; + f = fend; + } + else + { + value[i] = groups_letter_value (groups, *f); + if (value[i] == -1) + goto bad_format; + f++; + } + if (*f++ != "=?"[i]) + goto bad_format; + } + if (value[0] == value[1]) + thenout = out, elseout = 0; + else + thenout = 0, elseout = out; + f = format_group (thenout, f, ':', groups); + if (*f) + { + f = format_group (elseout, f + 1, ')', groups); + if (*f) + f++; + } + } + continue; + + case '<': + /* Print lines deleted from first file. */ + print_ifdef_lines (out, line_format[OLD], &groups[0]); + continue; + + case '=': + /* Print common lines. */ + print_ifdef_lines (out, line_format[UNCHANGED], &groups[0]); + continue; + + case '>': + /* Print lines inserted from second file. */ + print_ifdef_lines (out, line_format[NEW], &groups[1]); + continue; + + default: + f = do_printf_spec (out, f - 2, 0, 0, groups); + if (f) + continue; + /* Fall through. */ + bad_format: + c = '%'; + f = f1; + break; + } + + if (out) + putc (c, out); + } + + return f; +} + +/* For the line group pair G, return the number corresponding to LETTER. + Return -1 if LETTER is not a group format letter. */ +static lin +groups_letter_value (struct group const *g, char letter) +{ + switch (letter) + { + case 'E': letter = 'e'; g++; break; + case 'F': letter = 'f'; g++; break; + case 'L': letter = 'l'; g++; break; + case 'M': letter = 'm'; g++; break; + case 'N': letter = 'n'; g++; break; + } + + switch (letter) + { + case 'e': return translate_line_number (g->file, g->from) - 1; + case 'f': return translate_line_number (g->file, g->from); + case 'l': return translate_line_number (g->file, g->upto) - 1; + case 'm': return translate_line_number (g->file, g->upto); + case 'n': return g->upto - g->from; + default: return -1; + } +} + +/* Print to file OUT, using FORMAT to print the line group GROUP. + But do nothing if OUT is zero. */ +static void +print_ifdef_lines (register FILE *out, char const *format, + struct group const *group) +{ + struct file_data const *file = group->file; + char const * const *linbuf = file->linbuf; + lin from = group->from, upto = group->upto; + + if (!out) + return; + + /* If possible, use a single fwrite; it's faster. */ + if (!expand_tabs && format[0] == '%') + { + if (format[1] == 'l' && format[2] == '\n' && !format[3] && from < upto) + { + fwrite (linbuf[from], sizeof (char), + linbuf[upto] + (linbuf[upto][-1] != '\n') - linbuf[from], + out); + return; + } + if (format[1] == 'L' && !format[2]) + { + fwrite (linbuf[from], sizeof (char), + linbuf[upto] - linbuf[from], out); + return; + } + } + + for (; from < upto; from++) + { + register char c; + register char const *f = format; + + while ((c = *f++) != 0) + { + char const *f1 = f; + if (c == '%') + switch ((c = *f++)) + { + case '%': + break; + + case 'l': + output_1_line (linbuf[from], + (linbuf[from + 1] + - (linbuf[from + 1][-1] == '\n')), + 0, 0); + continue; + + case 'L': + output_1_line (linbuf[from], linbuf[from + 1], 0, 0); + continue; + + default: + f = do_printf_spec (out, f - 2, file, from, 0); + if (f) + continue; + c = '%'; + f = f1; + break; + } + + putc (c, out); + } + } +} + +static char const * +do_printf_spec (FILE *out, char const *spec, + struct file_data const *file, lin n, + struct group const *groups) +{ + char const *f = spec; + char c; + char c1; + + /* Scan printf-style SPEC of the form %[-'0]*[0-9]*(.[0-9]*)?[cdoxX]. */ + /* assert (*f == '%'); */ + f++; + while ((c = *f++) == '-' || c == '\'' || c == '0') + continue; + while (ISDIGIT (c)) + c = *f++; + if (c == '.') + while (ISDIGIT (c = *f++)) + continue; + c1 = *f++; + + switch (c) + { + case 'c': + if (c1 != '\'') + return 0; + else + { + char value IF_LINT (= 0); + f = scan_char_literal (f, &value); + if (!f) + return 0; + if (out) + putc (value, out); + } + break; + + case 'd': case 'o': case 'x': case 'X': + { + lin value; + + if (file) + { + if (c1 != 'n') + return 0; + value = translate_line_number (file, n); + } + else + { + value = groups_letter_value (groups, c1); + if (value < 0) + return 0; + } + + if (out) + { + /* For example, if the spec is "%3xn", use the printf + format spec "%3lx". Here the spec prefix is "%3". */ + long int long_value = value; + size_t spec_prefix_len = f - spec - 2; +#if HAVE_C_VARARRAYS + char format[spec_prefix_len + 3]; +#else + char *format = xmalloc (spec_prefix_len + 3); +#endif + char *p = format + spec_prefix_len; + memcpy (format, spec, spec_prefix_len); + *p++ = 'l'; + *p++ = c; + *p = '\0'; + fprintf (out, format, long_value); +#if ! HAVE_C_VARARRAYS + free (format); +#endif + } + } + break; + + default: + return 0; + } + + return f; +} + +/* Scan the character literal represented in the string LIT; LIT points just + after the initial apostrophe. Put the literal's value into *VALPTR. + Yield the address of the first character after the closing apostrophe, + or a null pointer if the literal is ill-formed. */ +static char const * +scan_char_literal (char const *lit, char *valptr) +{ + register char const *p = lit; + char value; + ptrdiff_t digits; + char c = *p++; + + switch (c) + { + case 0: + case '\'': + return NULL; + + case '\\': + value = 0; + while ((c = *p++) != '\'') + { + unsigned int digit = c - '0'; + if (8 <= digit) + return NULL; + value = 8 * value + digit; + } + digits = p - lit - 2; + if (! (1 <= digits && digits <= 3)) + return NULL; + break; + + default: + value = c; + if (*p++ != '\'') + return NULL; + break; + } + + *valptr = value; + return p; +} diff --git a/src/io.c b/src/io.c new file mode 100644 index 0000000..031be3d --- /dev/null +++ b/src/io.c @@ -0,0 +1,845 @@ +/* File I/O for GNU DIFF. + + Copyright (C) 1988-1989, 1992-1995, 1998, 2001-2002, 2004, 2006, 2009-2010 + Free Software Foundation, Inc. + + This file is part of GNU DIFF. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "diff.h" +#include <cmpbuf.h> +#include <file-type.h> +#include <xalloc.h> + +/* Rotate an unsigned value to the left. */ +#define ROL(v, n) ((v) << (n) | (v) >> (sizeof (v) * CHAR_BIT - (n))) + +/* Given a hash value and a new character, return a new hash value. */ +#define HASH(h, c) ((c) + ROL (h, 7)) + +/* The type of a hash value. */ +typedef size_t hash_value; +verify (! TYPE_SIGNED (hash_value)); + +/* Lines are put into equivalence classes of lines that match in lines_differ. + Each equivalence class is represented by one of these structures, + but only while the classes are being computed. + Afterward, each class is represented by a number. */ +struct equivclass +{ + lin next; /* Next item in this bucket. */ + hash_value hash; /* Hash of lines in this class. */ + char const *line; /* A line that fits this class. */ + size_t length; /* That line's length, not counting its newline. */ +}; + +/* Hash-table: array of buckets, each being a chain of equivalence classes. + buckets[-1] is reserved for incomplete lines. */ +static lin *buckets; + +/* Number of buckets in the hash table array, not counting buckets[-1]. */ +static size_t nbuckets; + +/* Array in which the equivalence classes are allocated. + The bucket-chains go through the elements in this array. + The number of an equivalence class is its index in this array. */ +static struct equivclass *equivs; + +/* Index of first free element in the array `equivs'. */ +static lin equivs_index; + +/* Number of elements allocated in the array `equivs'. */ +static lin equivs_alloc; + +/* Read a block of data into a file buffer, checking for EOF and error. */ + +void +file_block_read (struct file_data *current, size_t size) +{ + if (size && ! current->eof) + { + size_t s = block_read (current->desc, + FILE_BUFFER (current) + current->buffered, size); + if (s == SIZE_MAX) + pfatal_with_name (current->name); + current->buffered += s; + current->eof = s < size; + } +} + +/* Check for binary files and compare them for exact identity. */ + +/* Return 1 if BUF contains a non text character. + SIZE is the number of characters in BUF. */ + +#define binary_file_p(buf, size) (memchr (buf, 0, size) != 0) + +/* Get ready to read the current file. + Return nonzero if SKIP_TEST is zero, + and if it appears to be a binary file. */ + +static bool +sip (struct file_data *current, bool skip_test) +{ + /* If we have a nonexistent file at this stage, treat it as empty. */ + if (current->desc < 0) + { + /* Leave room for a sentinel. */ + current->bufsize = sizeof (word); + current->buffer = xmalloc (current->bufsize); + } + else + { + current->bufsize = buffer_lcm (sizeof (word), + STAT_BLOCKSIZE (current->stat), + PTRDIFF_MAX - 2 * sizeof (word)); + current->buffer = xmalloc (current->bufsize); + + if (! skip_test) + { + /* Check first part of file to see if it's a binary file. */ + + /* FIXME: if O_BINARY, this should revert to text mode + if the file is not binary. */ + + file_block_read (current, current->bufsize); + return binary_file_p (current->buffer, current->buffered); + } + } + + current->buffered = 0; + current->eof = false; + return false; +} + +/* Slurp the rest of the current file completely into memory. */ + +static void +slurp (struct file_data *current) +{ + size_t cc; + + if (current->desc < 0) + { + /* The file is nonexistent. */ + return; + } + + if (S_ISREG (current->stat.st_mode)) + { + /* It's a regular file; slurp in the rest all at once. */ + + /* Get the size out of the stat block. + Allocate just enough room for appended newline plus word sentinel, + plus word-alignment since we want the buffer word-aligned. */ + size_t file_size = current->stat.st_size; + cc = file_size + 2 * sizeof (word) - file_size % sizeof (word); + if (file_size != current->stat.st_size || cc < file_size + || PTRDIFF_MAX <= cc) + xalloc_die (); + + if (current->bufsize < cc) + { + current->bufsize = cc; + current->buffer = xrealloc (current->buffer, cc); + } + + /* Try to read at least 1 more byte than the size indicates, to + detect whether the file is growing. This is a nicety for + users who run 'diff' on files while they are changing. */ + + if (current->buffered <= file_size) + { + file_block_read (current, file_size + 1 - current->buffered); + if (current->buffered <= file_size) + return; + } + } + + /* It's not a regular file, or it's a growing regular file; read it, + growing the buffer as needed. */ + + file_block_read (current, current->bufsize - current->buffered); + + if (current->buffered) + { + while (current->buffered == current->bufsize) + { + if (PTRDIFF_MAX / 2 - sizeof (word) < current->bufsize) + xalloc_die (); + current->bufsize *= 2; + current->buffer = xrealloc (current->buffer, current->bufsize); + file_block_read (current, current->bufsize - current->buffered); + } + + /* Allocate just enough room for appended newline plus word + sentinel, plus word-alignment. */ + cc = current->buffered + 2 * sizeof (word); + current->bufsize = cc - cc % sizeof (word); + current->buffer = xrealloc (current->buffer, current->bufsize); + } +} + +/* Split the file into lines, simultaneously computing the equivalence + class for each line. */ + +static void +find_and_hash_each_line (struct file_data *current) +{ + hash_value h; + char const *p = current->prefix_end; + unsigned char c; + lin i, *bucket; + size_t length; + + /* Cache often-used quantities in local variables to help the compiler. */ + char const **linbuf = current->linbuf; + lin alloc_lines = current->alloc_lines; + lin line = 0; + lin linbuf_base = current->linbuf_base; + lin *cureqs = xmalloc (alloc_lines * sizeof *cureqs); + struct equivclass *eqs = equivs; + lin eqs_index = equivs_index; + lin eqs_alloc = equivs_alloc; + char const *suffix_begin = current->suffix_begin; + char const *bufend = FILE_BUFFER (current) + current->buffered; + bool diff_length_compare_anyway = + ignore_white_space != IGNORE_NO_WHITE_SPACE; + bool same_length_diff_contents_compare_anyway = + diff_length_compare_anyway | ignore_case; + + while (p < suffix_begin) + { + char const *ip = p; + + h = 0; + + /* Hash this line until we find a newline. */ + if (ignore_case) + switch (ignore_white_space) + { + case IGNORE_ALL_SPACE: + while ((c = *p++) != '\n') + if (! isspace (c)) + h = HASH (h, tolower (c)); + break; + + case IGNORE_SPACE_CHANGE: + while ((c = *p++) != '\n') + { + if (isspace (c)) + { + do + if ((c = *p++) == '\n') + goto hashing_done; + while (isspace (c)); + + h = HASH (h, ' '); + } + + /* C is now the first non-space. */ + h = HASH (h, tolower (c)); + } + break; + + case IGNORE_TAB_EXPANSION: + { + size_t column = 0; + while ((c = *p++) != '\n') + { + size_t repetitions = 1; + + switch (c) + { + case '\b': + column -= 0 < column; + break; + + case '\t': + c = ' '; + repetitions = tabsize - column % tabsize; + column = (column + repetitions < column + ? 0 + : column + repetitions); + break; + + case '\r': + column = 0; + break; + + default: + c = tolower (c); + column++; + break; + } + + do + h = HASH (h, c); + while (--repetitions != 0); + } + } + break; + + default: + while ((c = *p++) != '\n') + h = HASH (h, tolower (c)); + break; + } + else + switch (ignore_white_space) + { + case IGNORE_ALL_SPACE: + while ((c = *p++) != '\n') + if (! isspace (c)) + h = HASH (h, c); + break; + + case IGNORE_SPACE_CHANGE: + while ((c = *p++) != '\n') + { + if (isspace (c)) + { + do + if ((c = *p++) == '\n') + goto hashing_done; + while (isspace (c)); + + h = HASH (h, ' '); + } + + /* C is now the first non-space. */ + h = HASH (h, c); + } + break; + + case IGNORE_TAB_EXPANSION: + { + size_t column = 0; + while ((c = *p++) != '\n') + { + size_t repetitions = 1; + + switch (c) + { + case '\b': + column -= 0 < column; + break; + + case '\t': + c = ' '; + repetitions = tabsize - column % tabsize; + column = (column + repetitions < column + ? 0 + : column + repetitions); + break; + + case '\r': + column = 0; + break; + + default: + column++; + break; + } + + do + h = HASH (h, c); + while (--repetitions != 0); + } + } + break; + + default: + while ((c = *p++) != '\n') + h = HASH (h, c); + break; + } + + hashing_done:; + + bucket = &buckets[h % nbuckets]; + length = p - ip - 1; + + if (p == bufend + && current->missing_newline + && ROBUST_OUTPUT_STYLE (output_style)) + { + /* The last line is incomplete and we do not silently + complete lines. If the line cannot compare equal to any + complete line, put it into buckets[-1] so that it can + compare equal only to the other file's incomplete line + (if one exists). */ + if (ignore_white_space < IGNORE_SPACE_CHANGE) + bucket = &buckets[-1]; + } + + for (i = *bucket; ; i = eqs[i].next) + if (!i) + { + /* Create a new equivalence class in this bucket. */ + i = eqs_index++; + if (i == eqs_alloc) + { + if (PTRDIFF_MAX / (2 * sizeof *eqs) <= eqs_alloc) + xalloc_die (); + eqs_alloc *= 2; + eqs = xrealloc (eqs, eqs_alloc * sizeof *eqs); + } + eqs[i].next = *bucket; + eqs[i].hash = h; + eqs[i].line = ip; + eqs[i].length = length; + *bucket = i; + break; + } + else if (eqs[i].hash == h) + { + char const *eqline = eqs[i].line; + + /* Reuse existing class if lines_differ reports the lines + equal. */ + if (eqs[i].length == length) + { + /* Reuse existing equivalence class if the lines are identical. + This detects the common case of exact identity + faster than lines_differ would. */ + if (memcmp (eqline, ip, length) == 0) + break; + if (!same_length_diff_contents_compare_anyway) + continue; + } + else if (!diff_length_compare_anyway) + continue; + + if (! lines_differ (eqline, ip)) + break; + } + + /* Maybe increase the size of the line table. */ + if (line == alloc_lines) + { + /* Double (alloc_lines - linbuf_base) by adding to alloc_lines. */ + if (PTRDIFF_MAX / 3 <= alloc_lines + || PTRDIFF_MAX / sizeof *cureqs <= 2 * alloc_lines - linbuf_base + || PTRDIFF_MAX / sizeof *linbuf <= alloc_lines - linbuf_base) + xalloc_die (); + alloc_lines = 2 * alloc_lines - linbuf_base; + cureqs = xrealloc (cureqs, alloc_lines * sizeof *cureqs); + linbuf += linbuf_base; + linbuf = xrealloc (linbuf, + (alloc_lines - linbuf_base) * sizeof *linbuf); + linbuf -= linbuf_base; + } + linbuf[line] = ip; + cureqs[line] = i; + ++line; + } + + current->buffered_lines = line; + + for (i = 0; ; i++) + { + /* Record the line start for lines in the suffix that we care about. + Record one more line start than lines, + so that we can compute the length of any buffered line. */ + if (line == alloc_lines) + { + /* Double (alloc_lines - linbuf_base) by adding to alloc_lines. */ + if (PTRDIFF_MAX / 3 <= alloc_lines + || PTRDIFF_MAX / sizeof *cureqs <= 2 * alloc_lines - linbuf_base + || PTRDIFF_MAX / sizeof *linbuf <= alloc_lines - linbuf_base) + xalloc_die (); + alloc_lines = 2 * alloc_lines - linbuf_base; + linbuf += linbuf_base; + linbuf = xrealloc (linbuf, + (alloc_lines - linbuf_base) * sizeof *linbuf); + linbuf -= linbuf_base; + } + linbuf[line] = p; + + if (p == bufend) + { + /* If the last line is incomplete and we do not silently + complete lines, don't count its appended newline. */ + if (current->missing_newline && ROBUST_OUTPUT_STYLE (output_style)) + linbuf[line]--; + break; + } + + if (context <= i && no_diff_means_no_output) + break; + + line++; + + while (*p++ != '\n') + continue; + } + + /* Done with cache in local variables. */ + current->linbuf = linbuf; + current->valid_lines = line; + current->alloc_lines = alloc_lines; + current->equivs = cureqs; + equivs = eqs; + equivs_alloc = eqs_alloc; + equivs_index = eqs_index; +} + +/* Prepare the text. Make sure the text end is initialized. + Make sure text ends in a newline, + but remember that we had to add one. + Strip trailing CRs, if that was requested. */ + +static void +prepare_text (struct file_data *current) +{ + size_t buffered = current->buffered; + char *p = FILE_BUFFER (current); + char *dst; + + if (buffered == 0 || p[buffered - 1] == '\n') + current->missing_newline = false; + else + { + p[buffered++] = '\n'; + current->missing_newline = true; + } + + if (!p) + return; + + /* Don't use uninitialized storage when planting or using sentinels. */ + memset (p + buffered, 0, sizeof (word)); + + if (strip_trailing_cr && (dst = memchr (p, '\r', buffered))) + { + char const *src = dst; + char const *srclim = p + buffered; + + do + dst += ! ((*dst = *src++) == '\r' && *src == '\n'); + while (src < srclim); + + buffered -= src - dst; + } + + current->buffered = buffered; +} + +/* We have found N lines in a buffer of size S; guess the + proportionate number of lines that will be found in a buffer of + size T. However, do not guess a number of lines so large that the + resulting line table might cause overflow in size calculations. */ +static lin +guess_lines (lin n, size_t s, size_t t) +{ + size_t guessed_bytes_per_line = n < 10 ? 32 : s / (n - 1); + lin guessed_lines = MAX (1, t / guessed_bytes_per_line); + return MIN (guessed_lines, PTRDIFF_MAX / (2 * sizeof (char *) + 1) - 5) + 5; +} + +/* Given a vector of two file_data objects, find the identical + prefixes and suffixes of each object. */ + +static void +find_identical_ends (struct file_data filevec[]) +{ + word *w0, *w1; + char *p0, *p1, *buffer0, *buffer1; + char const *end0, *beg0; + char const **linbuf0, **linbuf1; + lin i, lines; + size_t n0, n1; + lin alloc_lines0, alloc_lines1; + lin buffered_prefix, prefix_count, prefix_mask; + lin middle_guess, suffix_guess; + + slurp (&filevec[0]); + prepare_text (&filevec[0]); + if (filevec[0].desc != filevec[1].desc) + { + slurp (&filevec[1]); + prepare_text (&filevec[1]); + } + else + { + filevec[1].buffer = filevec[0].buffer; + filevec[1].bufsize = filevec[0].bufsize; + filevec[1].buffered = filevec[0].buffered; + filevec[1].missing_newline = filevec[0].missing_newline; + } + + /* Find identical prefix. */ + + w0 = filevec[0].buffer; + w1 = filevec[1].buffer; + p0 = buffer0 = (char *) w0; + p1 = buffer1 = (char *) w1; + n0 = filevec[0].buffered; + n1 = filevec[1].buffered; + + if (p0 == p1) + /* The buffers are the same; sentinels won't work. */ + p0 = p1 += n1; + else + { + /* Insert end sentinels, in this case characters that are guaranteed + to make the equality test false, and thus terminate the loop. */ + + if (n0 < n1) + p0[n0] = ~p1[n0]; + else + p1[n1] = ~p0[n1]; + + /* Loop until first mismatch, or to the sentinel characters. */ + + /* Compare a word at a time for speed. */ + while (*w0 == *w1) + w0++, w1++; + + /* Do the last few bytes of comparison a byte at a time. */ + p0 = (char *) w0; + p1 = (char *) w1; + while (*p0 == *p1) + p0++, p1++; + + /* Don't mistakenly count missing newline as part of prefix. */ + if (ROBUST_OUTPUT_STYLE (output_style) + && ((buffer0 + n0 - filevec[0].missing_newline < p0) + != + (buffer1 + n1 - filevec[1].missing_newline < p1))) + p0--, p1--; + } + + /* Now P0 and P1 point at the first nonmatching characters. */ + + /* Skip back to last line-beginning in the prefix, + and then discard up to HORIZON_LINES lines from the prefix. */ + i = horizon_lines; + while (p0 != buffer0 && (p0[-1] != '\n' || i--)) + p0--, p1--; + + /* Record the prefix. */ + filevec[0].prefix_end = p0; + filevec[1].prefix_end = p1; + + /* Find identical suffix. */ + + /* P0 and P1 point beyond the last chars not yet compared. */ + p0 = buffer0 + n0; + p1 = buffer1 + n1; + + if (! ROBUST_OUTPUT_STYLE (output_style) + || filevec[0].missing_newline == filevec[1].missing_newline) + { + end0 = p0; /* Addr of last char in file 0. */ + + /* Get value of P0 at which we should stop scanning backward: + this is when either P0 or P1 points just past the last char + of the identical prefix. */ + beg0 = filevec[0].prefix_end + (n0 < n1 ? 0 : n0 - n1); + + /* Scan back until chars don't match or we reach that point. */ + while (p0 != beg0) + if (*--p0 != *--p1) + { + /* Point at the first char of the matching suffix. */ + ++p0, ++p1; + beg0 = p0; + break; + } + + /* Are we at a line-beginning in both files? If not, add the rest of + this line to the main body. Discard up to HORIZON_LINES lines from + the identical suffix. Also, discard one extra line, + because shift_boundaries may need it. */ + i = horizon_lines + !((buffer0 == p0 || p0[-1] == '\n') + && + (buffer1 == p1 || p1[-1] == '\n')); + while (i-- && p0 != end0) + while (*p0++ != '\n') + continue; + + p1 += p0 - beg0; + } + + /* Record the suffix. */ + filevec[0].suffix_begin = p0; + filevec[1].suffix_begin = p1; + + /* Calculate number of lines of prefix to save. + + prefix_count == 0 means save the whole prefix; + we need this for options like -D that output the whole file, + or for enormous contexts (to avoid worrying about arithmetic overflow). + We also need it for options like -F that output some preceding line; + at least we will need to find the last few lines, + but since we don't know how many, it's easiest to find them all. + + Otherwise, prefix_count != 0. Save just prefix_count lines at start + of the line buffer; they'll be moved to the proper location later. + Handle 1 more line than the context says (because we count 1 too many), + rounded up to the next power of 2 to speed index computation. */ + + if (no_diff_means_no_output && ! function_regexp.fastmap + && context < LIN_MAX / 4 && context < n0) + { + middle_guess = guess_lines (0, 0, p0 - filevec[0].prefix_end); + suffix_guess = guess_lines (0, 0, buffer0 + n0 - p0); + for (prefix_count = 1; prefix_count <= context; prefix_count *= 2) + continue; + alloc_lines0 = (prefix_count + middle_guess + + MIN (context, suffix_guess)); + } + else + { + prefix_count = 0; + alloc_lines0 = guess_lines (0, 0, n0); + } + + prefix_mask = prefix_count - 1; + lines = 0; + linbuf0 = xmalloc (alloc_lines0 * sizeof *linbuf0); + p0 = buffer0; + + /* If the prefix is needed, find the prefix lines. */ + if (! (no_diff_means_no_output + && filevec[0].prefix_end == p0 + && filevec[1].prefix_end == p1)) + { + end0 = filevec[0].prefix_end; + while (p0 != end0) + { + lin l = lines++ & prefix_mask; + if (l == alloc_lines0) + { + if (PTRDIFF_MAX / (2 * sizeof *linbuf0) <= alloc_lines0) + xalloc_die (); + alloc_lines0 *= 2; + linbuf0 = xrealloc (linbuf0, alloc_lines0 * sizeof *linbuf0); + } + linbuf0[l] = p0; + while (*p0++ != '\n') + continue; + } + } + buffered_prefix = prefix_count && context < lines ? context : lines; + + /* Allocate line buffer 1. */ + + middle_guess = guess_lines (lines, p0 - buffer0, p1 - filevec[1].prefix_end); + suffix_guess = guess_lines (lines, p0 - buffer0, buffer1 + n1 - p1); + alloc_lines1 = buffered_prefix + middle_guess + MIN (context, suffix_guess); + if (alloc_lines1 < buffered_prefix + || PTRDIFF_MAX / sizeof *linbuf1 <= alloc_lines1) + xalloc_die (); + linbuf1 = xmalloc (alloc_lines1 * sizeof *linbuf1); + + if (buffered_prefix != lines) + { + /* Rotate prefix lines to proper location. */ + for (i = 0; i < buffered_prefix; i++) + linbuf1[i] = linbuf0[(lines - context + i) & prefix_mask]; + for (i = 0; i < buffered_prefix; i++) + linbuf0[i] = linbuf1[i]; + } + + /* Initialize line buffer 1 from line buffer 0. */ + for (i = 0; i < buffered_prefix; i++) + linbuf1[i] = linbuf0[i] - buffer0 + buffer1; + + /* Record the line buffer, adjusted so that + linbuf[0] points at the first differing line. */ + filevec[0].linbuf = linbuf0 + buffered_prefix; + filevec[1].linbuf = linbuf1 + buffered_prefix; + filevec[0].linbuf_base = filevec[1].linbuf_base = - buffered_prefix; + filevec[0].alloc_lines = alloc_lines0 - buffered_prefix; + filevec[1].alloc_lines = alloc_lines1 - buffered_prefix; + filevec[0].prefix_lines = filevec[1].prefix_lines = lines; +} + +/* If 1 < k, then (2**k - prime_offset[k]) is the largest prime less + than 2**k. This table is derived from Chris K. Caldwell's list + <http://www.utm.edu/research/primes/lists/2small/>. */ + +static unsigned char const prime_offset[] = +{ + 0, 0, 1, 1, 3, 1, 3, 1, 5, 3, 3, 9, 3, 1, 3, 19, 15, 1, 5, 1, 3, 9, 3, + 15, 3, 39, 5, 39, 57, 3, 35, 1, 5, 9, 41, 31, 5, 25, 45, 7, 87, 21, + 11, 57, 17, 55, 21, 115, 59, 81, 27, 129, 47, 111, 33, 55, 5, 13, 27, + 55, 93, 1, 57, 25 +}; + +/* Verify that this host's size_t is not too wide for the above table. */ + +verify (sizeof (size_t) * CHAR_BIT <= sizeof prime_offset); + +/* Given a vector of two file_data objects, read the file associated + with each one, and build the table of equivalence classes. + Return nonzero if either file appears to be a binary file. + If PRETEND_BINARY is nonzero, pretend they are binary regardless. */ + +bool +read_files (struct file_data filevec[], bool pretend_binary) +{ + int i; + bool skip_test = text | pretend_binary; + bool appears_binary = pretend_binary | sip (&filevec[0], skip_test); + + if (filevec[0].desc != filevec[1].desc) + appears_binary |= sip (&filevec[1], skip_test | appears_binary); + else + { + filevec[1].buffer = filevec[0].buffer; + filevec[1].bufsize = filevec[0].bufsize; + filevec[1].buffered = filevec[0].buffered; + } + if (appears_binary) + { + /* FIXME: If O_BINARY, this should set both files to binary mode. */ + return true; + } + + find_identical_ends (filevec); + + equivs_alloc = filevec[0].alloc_lines + filevec[1].alloc_lines + 1; + if (PTRDIFF_MAX / sizeof *equivs <= equivs_alloc) + xalloc_die (); + equivs = xmalloc (equivs_alloc * sizeof *equivs); + /* Equivalence class 0 is permanently safe for lines that were not + hashed. Real equivalence classes start at 1. */ + equivs_index = 1; + + /* Allocate (one plus) a prime number of hash buckets. Use a prime + number between 1/3 and 2/3 of the value of equiv_allocs, + approximately. */ + for (i = 9; (size_t) 1 << i < equivs_alloc / 3; i++) + continue; + nbuckets = ((size_t) 1 << i) - prime_offset[i]; + if (PTRDIFF_MAX / sizeof *buckets <= nbuckets) + xalloc_die (); + buckets = zalloc ((nbuckets + 1) * sizeof *buckets); + buckets++; + + for (i = 0; i < 2; i++) + find_and_hash_each_line (&filevec[i]); + + filevec[0].equiv_max = filevec[1].equiv_max = equivs_index; + + free (equivs); + free (buckets - 1); + + return false; +} diff --git a/src/normal.c b/src/normal.c new file mode 100644 index 0000000..154efaa --- /dev/null +++ b/src/normal.c @@ -0,0 +1,69 @@ +/* Normal-format output routines for GNU DIFF. + + Copyright (C) 1988-1989, 1993, 1995, 1998, 2001, 2006, 2009-2010 Free + Software Foundation, Inc. + + This file is part of GNU DIFF. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "diff.h" + +static void print_normal_hunk (struct change *); + +/* Print the edit-script SCRIPT as a normal diff. + INF points to an array of descriptions of the two files. */ + +void +print_normal_script (struct change *script) +{ + print_script (script, find_change, print_normal_hunk); +} + +/* Print a hunk of a normal diff. + This is a contiguous portion of a complete edit script, + describing changes in consecutive lines. */ + +static void +print_normal_hunk (struct change *hunk) +{ + lin first0, last0, first1, last1; + register lin i; + + /* Determine range of line numbers involved in each file. */ + enum changes changes = analyze_hunk (hunk, &first0, &last0, &first1, &last1); + if (!changes) + return; + + begin_output (); + + /* Print out the line number header for this hunk */ + print_number_range (',', &files[0], first0, last0); + fputc (change_letter[changes], outfile); + print_number_range (',', &files[1], first1, last1); + fputc ('\n', outfile); + + /* Print the lines that the first file has. */ + if (changes & OLD) + for (i = first0; i <= last0; i++) + print_1_line ("<", &files[0].linbuf[i]); + + if (changes == CHANGED) + fputs ("---\n", outfile); + + /* Print the lines that the second file has. */ + if (changes & NEW) + for (i = first1; i <= last1; i++) + print_1_line (">", &files[1].linbuf[i]); +} diff --git a/src/sdiff.c b/src/sdiff.c new file mode 100644 index 0000000..4344e8d --- /dev/null +++ b/src/sdiff.c @@ -0,0 +1,1236 @@ +/* sdiff - side-by-side merge of file differences + + Copyright (C) 1992-1996, 1998, 2001-2002, 2004, 2006-2007, 2009-2010 Free + Software Foundation, Inc. + + This file is part of GNU DIFF. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "system.h" +#include "paths.h" + +#include <stdio.h> +#include <unlocked-io.h> + +#include <c-stack.h> +#include <dirname.h> +#include <error.h> +#include <exitfail.h> +#include <file-type.h> +#include <getopt.h> +#include <progname.h> +#include <sh-quote.h> +#include <version-etc.h> +#include <xalloc.h> + +/* The official name of this program (e.g., no `g' prefix). */ +#define PROGRAM_NAME "sdiff" + +#define AUTHORS \ + proper_name ("Thomas Lord") + +/* Size of chunks read from files which must be parsed into lines. */ +#define SDIFF_BUFSIZE ((size_t) 65536) + +static char const *editor_program = DEFAULT_EDITOR_PROGRAM; +static char const **diffargv; + +static char * volatile tmpname; +static FILE *tmp; + +#if HAVE_WORKING_FORK || HAVE_WORKING_VFORK +static pid_t volatile diffpid; +#endif + +struct line_filter; + +static void catchsig (int); +static bool edit (struct line_filter *, char const *, lin, lin, struct line_filter *, char const *, lin, lin, FILE *); +static bool interact (struct line_filter *, struct line_filter *, char const *, struct line_filter *, char const *, FILE *); +static void checksigs (void); +static void diffarg (char const *); +static void fatal (char const *) __attribute__((noreturn)); +static void perror_fatal (char const *) __attribute__((noreturn)); +static void trapsigs (void); +static void untrapsig (int); + +#define NUM_SIGS (sizeof sigs / sizeof *sigs) +static int const sigs[] = { +#ifdef SIGHUP + SIGHUP, +#endif +#ifdef SIGQUIT + SIGQUIT, +#endif +#ifdef SIGTERM + SIGTERM, +#endif +#ifdef SIGXCPU + SIGXCPU, +#endif +#ifdef SIGXFSZ + SIGXFSZ, +#endif +#ifdef SIGPIPE + SIGPIPE, +# define handler_index_of_SIGPIPE (NUM_SIGS - 2) +#endif + SIGINT +#define handler_index_of_SIGINT (NUM_SIGS - 1) +}; + +#if HAVE_SIGACTION + /* Prefer `sigaction' if available, since `signal' can lose signals. */ + static struct sigaction initial_action[NUM_SIGS]; +# define initial_handler(i) (initial_action[i].sa_handler) + static void signal_handler (int, void (*) (int)); +#else + static void (*initial_action[NUM_SIGS]) (); +# define initial_handler(i) (initial_action[i]) +# define signal_handler(sig, handler) signal (sig, handler) +#endif + +#if ! HAVE_SIGPROCMASK +# define sigset_t int +# define sigemptyset(s) (*(s) = 0) +# ifndef sigmask +# define sigmask(sig) (1 << ((sig) - 1)) +# endif +# define sigaddset(s, sig) (*(s) |= sigmask (sig)) +# ifndef SIG_BLOCK +# define SIG_BLOCK 0 +# endif +# ifndef SIG_SETMASK +# define SIG_SETMASK (! SIG_BLOCK) +# endif +# if ! HAVE_SIGBLOCK +# define sigblock(mask) (mask) +# define sigsetmask(mask) (mask) +# endif +# define sigprocmask(how, n, o) \ + ((how) == SIG_BLOCK \ + ? ((o) ? (*(sigset_t *) (o) = sigblock (*(n))) : sigblock (*(n))) \ + : sigsetmask (*(n))) +#endif + +static bool diraccess (char const *); +static int temporary_file (void); + +/* Options: */ + +/* Name of output file if -o specified. */ +static char const *output; + +/* Do not print common lines. */ +static bool suppress_common_lines; + +/* Value for the long option that does not have single-letter equivalents. */ +enum +{ + DIFF_PROGRAM_OPTION = CHAR_MAX + 1, + HELP_OPTION, + STRIP_TRAILING_CR_OPTION, + TABSIZE_OPTION +}; + +static struct option const longopts[] = +{ + {"diff-program", 1, 0, DIFF_PROGRAM_OPTION}, + {"expand-tabs", 0, 0, 't'}, + {"help", 0, 0, HELP_OPTION}, + {"ignore-all-space", 0, 0, 'W'}, /* swap W and w for historical reasons */ + {"ignore-blank-lines", 0, 0, 'B'}, + {"ignore-case", 0, 0, 'i'}, + {"ignore-matching-lines", 1, 0, 'I'}, + {"ignore-space-change", 0, 0, 'b'}, + {"ignore-tab-expansion", 0, 0, 'E'}, + {"left-column", 0, 0, 'l'}, + {"minimal", 0, 0, 'd'}, + {"output", 1, 0, 'o'}, + {"speed-large-files", 0, 0, 'H'}, + {"strip-trailing-cr", 0, 0, STRIP_TRAILING_CR_OPTION}, + {"suppress-common-lines", 0, 0, 's'}, + {"tabsize", 1, 0, TABSIZE_OPTION}, + {"text", 0, 0, 'a'}, + {"version", 0, 0, 'v'}, + {"width", 1, 0, 'w'}, + {0, 0, 0, 0} +}; + +static void try_help (char const *, char const *) __attribute__((noreturn)); +static void +try_help (char const *reason_msgid, char const *operand) +{ + if (reason_msgid) + error (0, 0, _(reason_msgid), operand); + error (EXIT_TROUBLE, 0, _("Try `%s --help' for more information."), + program_name); + abort (); +} + +static void +check_stdout (void) +{ + if (ferror (stdout)) + fatal ("write failed"); + else if (fclose (stdout) != 0) + perror_fatal (_("standard output")); +} + +static char const * const option_help_msgid[] = { + N_("-o FILE --output=FILE Operate interactively, sending output to FILE."), + "", + N_("-i --ignore-case Consider upper- and lower-case to be the same."), + N_("-E --ignore-tab-expansion Ignore changes due to tab expansion."), + N_("-b --ignore-space-change Ignore changes in the amount of white space."), + N_("-W --ignore-all-space Ignore all white space."), + N_("-B --ignore-blank-lines Ignore changes whose lines are all blank."), + N_("-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE."), + N_("--strip-trailing-cr Strip trailing carriage return on input."), + N_("-a --text Treat all files as text."), + "", + N_("-w NUM --width=NUM Output at most NUM (default 130) print columns."), + N_("-l --left-column Output only the left column of common lines."), + N_("-s --suppress-common-lines Do not output common lines."), + "", + N_("-t --expand-tabs Expand tabs to spaces in output."), + N_("--tabsize=NUM Tab stops are every NUM (default 8) print columns."), + "", + N_("-d --minimal Try hard to find a smaller set of changes."), + N_("-H --speed-large-files Assume large files and many scattered small changes."), + N_("--diff-program=PROGRAM Use PROGRAM to compare files."), + "", + N_("-v --version Output version info."), + N_("--help Output this help."), + 0 +}; + +static void +usage (void) +{ + char const * const *p; + + printf (_("Usage: %s [OPTION]... FILE1 FILE2\n"), program_name); + printf ("%s\n\n", _("Side-by-side merge of file differences.")); + for (p = option_help_msgid; *p; p++) + if (**p) + printf (" %s\n", _(*p)); + else + putchar ('\n'); + printf ("\n%s\n%s\n", + _("If a FILE is `-', read standard input."), + _("Exit status is 0 if inputs are the same, 1 if different, 2 if trouble.")); + emit_bug_reporting_address (); +} + +/* Clean up after a signal or other failure. This function is + async-signal-safe. */ +static void +cleanup (int signo __attribute__((unused))) +{ +#if HAVE_WORKING_FORK || HAVE_WORKING_VFORK + if (0 < diffpid) + kill (diffpid, SIGPIPE); +#endif + if (tmpname) + unlink (tmpname); +} + +static void exiterr (void) __attribute__((noreturn)); +static void +exiterr (void) +{ + cleanup (0); + untrapsig (0); + checksigs (); + exit (EXIT_TROUBLE); +} + +static void +fatal (char const *msgid) +{ + error (0, 0, "%s", _(msgid)); + exiterr (); +} + +static void +perror_fatal (char const *msg) +{ + int e = errno; + checksigs (); + error (0, e, "%s", msg); + exiterr (); +} + +static void +check_child_status (int werrno, int wstatus, int max_ok_status, + char const *subsidiary_program) +{ + int status = (! werrno && WIFEXITED (wstatus) + ? WEXITSTATUS (wstatus) + : INT_MAX); + + if (max_ok_status < status) + { + error (0, werrno, + _(status == 126 + ? "subsidiary program `%s' could not be invoked" + : status == 127 + ? "subsidiary program `%s' not found" + : status == INT_MAX + ? "subsidiary program `%s' failed" + : "subsidiary program `%s' failed (exit status %d)"), + subsidiary_program, status); + exiterr (); + } +} + +static FILE * +ck_fopen (char const *fname, char const *type) +{ + FILE *r = fopen (fname, type); + if (! r) + perror_fatal (fname); + return r; +} + +static void +ck_fclose (FILE *f) +{ + if (fclose (f)) + perror_fatal ("fclose"); +} + +static size_t +ck_fread (char *buf, size_t size, FILE *f) +{ + size_t r = fread (buf, sizeof (char), size, f); + if (r == 0 && ferror (f)) + perror_fatal (_("read failed")); + return r; +} + +static void +ck_fwrite (char const *buf, size_t size, FILE *f) +{ + if (fwrite (buf, sizeof (char), size, f) != size) + perror_fatal (_("write failed")); +} + +static void +ck_fflush (FILE *f) +{ + if (fflush (f) != 0) + perror_fatal (_("write failed")); +} + +static char const * +expand_name (char *name, bool is_dir, char const *other_name) +{ + if (STREQ (name, "-")) + fatal ("cannot interactively merge standard input"); + if (! is_dir) + return name; + else + { + /* Yield NAME/BASE, where BASE is OTHER_NAME's basename. */ + char const *base = last_component (other_name); + size_t namelen = strlen (name), baselen = base_len (base); + bool insert_slash = *last_component (name) && name[namelen - 1] != '/'; + char *r = xmalloc (namelen + insert_slash + baselen + 1); + memcpy (r, name, namelen); + r[namelen] = '/'; + memcpy (r + namelen + insert_slash, base, baselen); + r[namelen + insert_slash + baselen] = '\0'; + return r; + } +} + +struct line_filter { + FILE *infile; + char *bufpos; + char *buffer; + char *buflim; +}; + +static void +lf_init (struct line_filter *lf, FILE *infile) +{ + lf->infile = infile; + lf->bufpos = lf->buffer = lf->buflim = xmalloc (SDIFF_BUFSIZE + 1); + lf->buflim[0] = '\n'; +} + +/* Fill an exhausted line_filter buffer from its INFILE */ +static size_t +lf_refill (struct line_filter *lf) +{ + size_t s = ck_fread (lf->buffer, SDIFF_BUFSIZE, lf->infile); + lf->bufpos = lf->buffer; + lf->buflim = lf->buffer + s; + lf->buflim[0] = '\n'; + checksigs (); + return s; +} + +/* Advance LINES on LF's infile, copying lines to OUTFILE */ +static void +lf_copy (struct line_filter *lf, lin lines, FILE *outfile) +{ + char *start = lf->bufpos; + + while (lines) + { + lf->bufpos = (char *) memchr (lf->bufpos, '\n', lf->buflim - lf->bufpos); + if (! lf->bufpos) + { + ck_fwrite (start, lf->buflim - start, outfile); + if (! lf_refill (lf)) + return; + start = lf->bufpos; + } + else + { + --lines; + ++lf->bufpos; + } + } + + ck_fwrite (start, lf->bufpos - start, outfile); +} + +/* Advance LINES on LF's infile without doing output */ +static void +lf_skip (struct line_filter *lf, lin lines) +{ + while (lines) + { + lf->bufpos = (char *) memchr (lf->bufpos, '\n', lf->buflim - lf->bufpos); + if (! lf->bufpos) + { + if (! lf_refill (lf)) + break; + } + else + { + --lines; + ++lf->bufpos; + } + } +} + +/* Snarf a line into a buffer. Return EOF if EOF, 0 if error, 1 if OK. */ +static int +lf_snarf (struct line_filter *lf, char *buffer, size_t bufsize) +{ + for (;;) + { + char *start = lf->bufpos; + char *next = (char *) memchr (start, '\n', lf->buflim + 1 - start); + size_t s = next - start; + if (bufsize <= s) + return 0; + memcpy (buffer, start, s); + if (next < lf->buflim) + { + buffer[s] = 0; + lf->bufpos = next + 1; + return 1; + } + if (! lf_refill (lf)) + return s ? 0 : EOF; + buffer += s; + bufsize -= s; + } +} + +int +main (int argc, char *argv[]) +{ + int opt; + char const *prog; + + exit_failure = EXIT_TROUBLE; + initialize_main (&argc, &argv); + set_program_name (argv[0]); + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + c_stack_action (cleanup); + + prog = getenv ("EDITOR"); + if (prog) + editor_program = prog; + + diffarg (DEFAULT_DIFF_PROGRAM); + + /* parse command line args */ + while ((opt = getopt_long (argc, argv, "abBdEHiI:lo:stvw:W", longopts, 0)) + != -1) + { + switch (opt) + { + case 'a': + diffarg ("-a"); + break; + + case 'b': + diffarg ("-b"); + break; + + case 'B': + diffarg ("-B"); + break; + + case 'd': + diffarg ("-d"); + break; + + case 'E': + diffarg ("-E"); + break; + + case 'H': + diffarg ("-H"); + break; + + case 'i': + diffarg ("-i"); + break; + + case 'I': + diffarg ("-I"); + diffarg (optarg); + break; + + case 'l': + diffarg ("--left-column"); + break; + + case 'o': + output = optarg; + break; + + case 's': + suppress_common_lines = true; + break; + + case 't': + diffarg ("-t"); + break; + + case 'v': + version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, PACKAGE_VERSION, + AUTHORS, (char *) NULL); + check_stdout (); + return EXIT_SUCCESS; + + case 'w': + diffarg ("-W"); + diffarg (optarg); + break; + + case 'W': + diffarg ("-w"); + break; + + case DIFF_PROGRAM_OPTION: + diffargv[0] = optarg; + break; + + case HELP_OPTION: + usage (); + check_stdout (); + return EXIT_SUCCESS; + + case STRIP_TRAILING_CR_OPTION: + diffarg ("--strip-trailing-cr"); + break; + + case TABSIZE_OPTION: + diffarg ("--tabsize"); + diffarg (optarg); + break; + + default: + try_help (0, 0); + } + } + + if (argc - optind != 2) + { + if (argc - optind < 2) + try_help ("missing operand after `%s'", argv[argc - 1]); + else + try_help ("extra operand `%s'", argv[optind + 2]); + } + + if (! output) + { + /* easy case: diff does everything for us */ + if (suppress_common_lines) + diffarg ("--suppress-common-lines"); + diffarg ("-y"); + diffarg ("--"); + diffarg (argv[optind]); + diffarg (argv[optind + 1]); + diffarg (0); + execvp (diffargv[0], (char **) diffargv); + perror_fatal (diffargv[0]); + } + else + { + char const *lname, *rname; + FILE *left, *right, *out, *diffout; + bool interact_ok; + struct line_filter lfilt; + struct line_filter rfilt; + struct line_filter diff_filt; + bool leftdir = diraccess (argv[optind]); + bool rightdir = diraccess (argv[optind + 1]); + + if (leftdir & rightdir) + fatal ("both files to be compared are directories"); + + lname = expand_name (argv[optind], leftdir, argv[optind + 1]); + left = ck_fopen (lname, "r"); + rname = expand_name (argv[optind + 1], rightdir, argv[optind]); + right = ck_fopen (rname, "r"); + out = ck_fopen (output, "w"); + + diffarg ("--sdiff-merge-assist"); + diffarg ("--"); + diffarg (argv[optind]); + diffarg (argv[optind + 1]); + diffarg (0); + + trapsigs (); + +#if ! (HAVE_WORKING_FORK || HAVE_WORKING_VFORK) + { + size_t cmdsize = 1; + char *p, *command; + int i; + + for (i = 0; diffargv[i]; i++) + cmdsize += shell_quote_length (diffargv[i]) + 1; + command = p = xmalloc (cmdsize); + for (i = 0; diffargv[i]; i++) + { + p = shell_quote_copy (p, diffargv[i]); + *p++ = ' '; + } + p[-1] = 0; + errno = 0; + diffout = popen (command, "r"); + if (! diffout) + perror_fatal (command); + free (command); + } +#else + { + int diff_fds[2]; +# if HAVE_WORKING_VFORK + sigset_t procmask; + sigset_t blocked; +# endif + + if (pipe (diff_fds) != 0) + perror_fatal ("pipe"); + +# if HAVE_WORKING_VFORK + /* Block SIGINT and SIGPIPE. */ + sigemptyset (&blocked); + sigaddset (&blocked, SIGINT); + sigaddset (&blocked, SIGPIPE); + sigprocmask (SIG_BLOCK, &blocked, &procmask); +# endif + diffpid = vfork (); + if (diffpid < 0) + perror_fatal ("fork"); + if (! diffpid) + { + /* Alter the child's SIGINT and SIGPIPE handlers; + this may munge the parent. + The child ignores SIGINT in case the user interrupts the editor. + The child does not ignore SIGPIPE, even if the parent does. */ + if (initial_handler (handler_index_of_SIGINT) != SIG_IGN) + signal_handler (SIGINT, SIG_IGN); + signal_handler (SIGPIPE, SIG_DFL); +# if HAVE_WORKING_VFORK + /* Stop blocking SIGINT and SIGPIPE in the child. */ + sigprocmask (SIG_SETMASK, &procmask, 0); +# endif + close (diff_fds[0]); + if (diff_fds[1] != STDOUT_FILENO) + { + dup2 (diff_fds[1], STDOUT_FILENO); + close (diff_fds[1]); + } + + execvp (diffargv[0], (char **) diffargv); + _exit (errno == ENOENT ? 127 : 126); + } + +# if HAVE_WORKING_VFORK + /* Restore the parent's SIGINT and SIGPIPE behavior. */ + if (initial_handler (handler_index_of_SIGINT) != SIG_IGN) + signal_handler (SIGINT, catchsig); + if (initial_handler (handler_index_of_SIGPIPE) != SIG_IGN) + signal_handler (SIGPIPE, catchsig); + else + signal_handler (SIGPIPE, SIG_IGN); + + /* Stop blocking SIGINT and SIGPIPE in the parent. */ + sigprocmask (SIG_SETMASK, &procmask, 0); +# endif + + close (diff_fds[1]); + diffout = fdopen (diff_fds[0], "r"); + if (! diffout) + perror_fatal ("fdopen"); + } +#endif + + lf_init (&diff_filt, diffout); + lf_init (&lfilt, left); + lf_init (&rfilt, right); + + interact_ok = interact (&diff_filt, &lfilt, lname, &rfilt, rname, out); + + ck_fclose (left); + ck_fclose (right); + ck_fclose (out); + + { + int wstatus; + int werrno = 0; + +#if ! (HAVE_WORKING_FORK || HAVE_WORKING_VFORK) + wstatus = pclose (diffout); + if (wstatus == -1) + werrno = errno; +#else + ck_fclose (diffout); + while (waitpid (diffpid, &wstatus, 0) < 0) + if (errno == EINTR) + checksigs (); + else + perror_fatal ("waitpid"); + diffpid = 0; +#endif + + if (tmpname) + { + unlink (tmpname); + tmpname = 0; + } + + if (! interact_ok) + exiterr (); + + check_child_status (werrno, wstatus, EXIT_FAILURE, diffargv[0]); + untrapsig (0); + checksigs (); + exit (WEXITSTATUS (wstatus)); + } + } + return EXIT_SUCCESS; /* Fool `-Wall'. */ +} + +static void +diffarg (char const *a) +{ + static size_t diffargs, diffarglim; + + if (diffargs == diffarglim) + { + if (! diffarglim) + diffarglim = 16; + else if (PTRDIFF_MAX / (2 * sizeof *diffargv) <= diffarglim) + xalloc_die (); + else + diffarglim *= 2; + diffargv = xrealloc (diffargv, diffarglim * sizeof *diffargv); + } + diffargv[diffargs++] = a; +} + +/* Signal handling */ + +static bool volatile ignore_SIGINT; +static int volatile signal_received; +static bool sigs_trapped; + +static void +catchsig (int s) +{ +#if ! HAVE_SIGACTION + signal (s, SIG_IGN); +#endif + if (! (s == SIGINT && ignore_SIGINT)) + signal_received = s; +} + +#if HAVE_SIGACTION +static struct sigaction catchaction; + +static void +signal_handler (int sig, void (*handler) (int)) +{ + catchaction.sa_handler = handler; + sigaction (sig, &catchaction, 0); +} +#endif + +static void +trapsigs (void) +{ + int i; + +#if HAVE_SIGACTION + catchaction.sa_flags = SA_RESTART; + sigemptyset (&catchaction.sa_mask); + for (i = 0; i < NUM_SIGS; i++) + sigaddset (&catchaction.sa_mask, sigs[i]); +#endif + + for (i = 0; i < NUM_SIGS; i++) + { +#if HAVE_SIGACTION + sigaction (sigs[i], 0, &initial_action[i]); +#else + initial_action[i] = signal (sigs[i], SIG_IGN); +#endif + if (initial_handler (i) != SIG_IGN) + signal_handler (sigs[i], catchsig); + } + +#ifdef SIGCHLD + /* System V fork+wait does not work if SIGCHLD is ignored. */ + signal (SIGCHLD, SIG_DFL); +#endif + + sigs_trapped = true; +} + +/* Untrap signal S, or all trapped signals if S is zero. */ +static void +untrapsig (int s) +{ + int i; + + if (sigs_trapped) + for (i = 0; i < NUM_SIGS; i++) + if ((! s || sigs[i] == s) && initial_handler (i) != SIG_IGN) + { +#if HAVE_SIGACTION + sigaction (sigs[i], &initial_action[i], 0); +#else + signal (sigs[i], initial_action[i]); +#endif + } +} + +/* Exit if a signal has been received. */ +static void +checksigs (void) +{ + int s = signal_received; + if (s) + { + cleanup (0); + + /* Yield an exit status indicating that a signal was received. */ + untrapsig (s); + kill (getpid (), s); + + /* That didn't work, so exit with error status. */ + exit (EXIT_TROUBLE); + } +} + +static void +give_help (void) +{ + fprintf (stderr, "%s", _("\ +ed:\tEdit then use both versions, each decorated with a header.\n\ +eb:\tEdit then use both versions.\n\ +el or e1:\tEdit then use the left version.\n\ +er or e2:\tEdit then use the right version.\n\ +e:\tDiscard both versions then edit a new one.\n\ +l or 1:\tUse the left version.\n\ +r or 2:\tUse the right version.\n\ +s:\tSilently include common lines.\n\ +v:\tVerbosely include common lines.\n\ +q:\tQuit.\n\ +")); +} + +static int +skip_white (void) +{ + int c; + for (;;) + { + c = getchar (); + if (! isspace (c) || c == '\n') + break; + checksigs (); + } + if (ferror (stdin)) + perror_fatal (_("read failed")); + return c; +} + +static void +flush_line (void) +{ + int c; + while ((c = getchar ()) != '\n' && c != EOF) + continue; + if (ferror (stdin)) + perror_fatal (_("read failed")); +} + + +/* interpret an edit command */ +static bool +edit (struct line_filter *left, char const *lname, lin lline, lin llen, + struct line_filter *right, char const *rname, lin rline, lin rlen, + FILE *outfile) +{ + for (;;) + { + int cmd0 IF_LINT (= 0); + int cmd1 IF_LINT (= 0); + bool gotcmd = false; + + while (! gotcmd) + { + if (putchar ('%') != '%') + perror_fatal (_("write failed")); + ck_fflush (stdout); + + cmd0 = skip_white (); + switch (cmd0) + { + case '1': case '2': case 'l': case 'r': + case 's': case 'v': case 'q': + if (skip_white () != '\n') + { + give_help (); + flush_line (); + continue; + } + gotcmd = true; + break; + + case 'e': + cmd1 = skip_white (); + switch (cmd1) + { + case '1': case '2': case 'b': case 'd': case 'l': case 'r': + if (skip_white () != '\n') + { + give_help (); + flush_line (); + continue; + } + gotcmd = true; + break; + case '\n': + gotcmd = true; + break; + default: + give_help (); + flush_line (); + continue; + } + break; + + case EOF: + if (feof (stdin)) + { + gotcmd = true; + cmd0 = 'q'; + break; + } + /* Fall through. */ + default: + flush_line (); + /* Fall through. */ + case '\n': + give_help (); + continue; + } + } + + switch (cmd0) + { + case '1': case 'l': + lf_copy (left, llen, outfile); + lf_skip (right, rlen); + return true; + case '2': case 'r': + lf_copy (right, rlen, outfile); + lf_skip (left, llen); + return true; + case 's': + suppress_common_lines = true; + break; + case 'v': + suppress_common_lines = false; + break; + case 'q': + return false; + case 'e': + { + int fd; + + if (tmpname) + tmp = fopen (tmpname, "w"); + else + { + if ((fd = temporary_file ()) < 0) + perror_fatal ("mkstemp"); + tmp = fdopen (fd, "w"); + } + + if (! tmp) + perror_fatal (tmpname); + + switch (cmd1) + { + case 'd': + if (llen) + { + if (llen == 1) + fprintf (tmp, "--- %s %ld\n", lname, (long int) lline); + else + fprintf (tmp, "--- %s %ld,%ld\n", lname, + (long int) lline, + (long int) (lline + llen - 1)); + } + /* Fall through. */ + case '1': case 'b': case 'l': + lf_copy (left, llen, tmp); + break; + + default: + lf_skip (left, llen); + break; + } + + switch (cmd1) + { + case 'd': + if (rlen) + { + if (rlen == 1) + fprintf (tmp, "+++ %s %ld\n", rname, (long int) rline); + else + fprintf (tmp, "+++ %s %ld,%ld\n", rname, + (long int) rline, + (long int) (rline + rlen - 1)); + } + /* Fall through. */ + case '2': case 'b': case 'r': + lf_copy (right, rlen, tmp); + break; + + default: + lf_skip (right, rlen); + break; + } + + ck_fclose (tmp); + + { + int wstatus; + int werrno = 0; + ignore_SIGINT = true; + checksigs (); + + { +#if ! (HAVE_WORKING_FORK || HAVE_WORKING_VFORK) + char *command = + xmalloc (shell_quote_length (editor_program) + + 1 + strlen (tmpname) + 1); + sprintf (shell_quote_copy (command, editor_program), + " %s", tmpname); + wstatus = system (command); + if (wstatus == -1) + werrno = errno; + free (command); +#else + pid_t pid; + + pid = vfork (); + if (pid == 0) + { + char const *argv[3]; + int i = 0; + + argv[i++] = editor_program; + argv[i++] = tmpname; + argv[i] = 0; + + execvp (editor_program, (char **) argv); + _exit (errno == ENOENT ? 127 : 126); + } + + if (pid < 0) + perror_fatal ("fork"); + + while (waitpid (pid, &wstatus, 0) < 0) + if (errno == EINTR) + checksigs (); + else + perror_fatal ("waitpid"); +#endif + } + + ignore_SIGINT = false; + check_child_status (werrno, wstatus, EXIT_SUCCESS, + editor_program); + } + + { + char buf[SDIFF_BUFSIZE]; + size_t size; + tmp = ck_fopen (tmpname, "r"); + while ((size = ck_fread (buf, SDIFF_BUFSIZE, tmp)) != 0) + { + checksigs (); + ck_fwrite (buf, size, outfile); + } + ck_fclose (tmp); + } + return true; + } + default: + give_help (); + break; + } + } +} + +/* Alternately reveal bursts of diff output and handle user commands. */ +static bool +interact (struct line_filter *diff, + struct line_filter *left, char const *lname, + struct line_filter *right, char const *rname, + FILE *outfile) +{ + lin lline = 1, rline = 1; + + for (;;) + { + char diff_help[256]; + int snarfed = lf_snarf (diff, diff_help, sizeof diff_help); + + if (snarfed <= 0) + return snarfed != 0; + + checksigs (); + + if (diff_help[0] == ' ') + puts (diff_help + 1); + else + { + char *numend; + uintmax_t val; + lin llen, rlen, lenmax; + errno = 0; + llen = val = strtoumax (diff_help + 1, &numend, 10); + if (llen < 0 || llen != val || errno || *numend != ',') + fatal (diff_help); + rlen = val = strtoumax (numend + 1, &numend, 10); + if (rlen < 0 || rlen != val || errno || *numend) + fatal (diff_help); + + lenmax = MAX (llen, rlen); + + switch (diff_help[0]) + { + case 'i': + if (suppress_common_lines) + lf_skip (diff, lenmax); + else + lf_copy (diff, lenmax, stdout); + + lf_copy (left, llen, outfile); + lf_skip (right, rlen); + break; + + case 'c': + lf_copy (diff, lenmax, stdout); + if (! edit (left, lname, lline, llen, + right, rname, rline, rlen, + outfile)) + return false; + break; + + default: + fatal (diff_help); + } + + lline += llen; + rline += rlen; + } + } +} + +/* Return true if DIR is an existing directory. */ +static bool +diraccess (char const *dir) +{ + struct stat buf; + return stat (dir, &buf) == 0 && S_ISDIR (buf.st_mode); +} + +#ifndef P_tmpdir +# define P_tmpdir "/tmp" +#endif +#ifndef TMPDIR_ENV +# define TMPDIR_ENV "TMPDIR" +#endif + +/* Open a temporary file and return its file descriptor. Put into + tmpname the address of a newly allocated buffer that holds the + file's name. Use the prefix "sdiff". */ +static int +temporary_file (void) +{ + char const *tmpdir = getenv (TMPDIR_ENV); + char const *dir = tmpdir ? tmpdir : P_tmpdir; + char *buf = xmalloc (strlen (dir) + 1 + 5 + 6 + 1); + int fd; + int e; + sigset_t procmask; + sigset_t blocked; + sprintf (buf, "%s/sdiffXXXXXX", dir); + sigemptyset (&blocked); + sigaddset (&blocked, SIGINT); + sigprocmask (SIG_BLOCK, &blocked, &procmask); + fd = mkstemp (buf); + e = errno; + if (0 <= fd) + tmpname = buf; + sigprocmask (SIG_SETMASK, &procmask, 0); + errno = e; + return fd; +} diff --git a/src/side.c b/src/side.c new file mode 100644 index 0000000..6aa96a9 --- /dev/null +++ b/src/side.c @@ -0,0 +1,320 @@ +/* sdiff-format output routines for GNU DIFF. + + Copyright (C) 1991-1993, 1998, 2001-2002, 2004, 2009-2010 Free Software + Foundation, Inc. + + This file is part of GNU DIFF. + + GNU DIFF is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY. No author or distributor + accepts responsibility to anyone for the consequences of using it + or for whether it serves any particular purpose or works at all, + unless he says so in writing. Refer to the GNU General Public + License for full details. + + Everyone is granted permission to copy, modify and redistribute + GNU DIFF, but only under the conditions described in the + GNU General Public License. A copy of this license is + supposed to have been given to you along with GNU DIFF so you + can know your rights and responsibilities. It should be in a + file named COPYING. Among other things, the copyright notice + and this notice must be preserved on all copies. */ + +#include "diff.h" + +#include <wchar.h> + +static void print_sdiff_common_lines (lin, lin); +static void print_sdiff_hunk (struct change *); + +/* Next line number to be printed in the two input files. */ +static lin next0, next1; + +/* Print the edit-script SCRIPT as a sdiff style output. */ + +void +print_sdiff_script (struct change *script) +{ + begin_output (); + + next0 = next1 = - files[0].prefix_lines; + print_script (script, find_change, print_sdiff_hunk); + + print_sdiff_common_lines (files[0].valid_lines, files[1].valid_lines); +} + +/* Tab from column FROM to column TO, where FROM <= TO. Yield TO. */ + +static size_t +tab_from_to (size_t from, size_t to) +{ + FILE *out = outfile; + size_t tab; + size_t tab_size = tabsize; + + if (!expand_tabs) + for (tab = from + tab_size - from % tab_size; tab <= to; tab += tab_size) + { + putc ('\t', out); + from = tab; + } + while (from++ < to) + putc (' ', out); + return to; +} + +/* Print the text for half an sdiff line. This means truncate to + width observing tabs, and trim a trailing newline. Return the + last column written (not the number of chars). */ + +static size_t +print_half_line (char const *const *line, size_t indent, size_t out_bound) +{ + FILE *out = outfile; + register size_t in_position = 0; + register size_t out_position = 0; + register char const *text_pointer = line[0]; + register char const *text_limit = line[1]; + mbstate_t mbstate = { 0 }; + + while (text_pointer < text_limit) + { + char const *tp0 = text_pointer; + register char c = *text_pointer++; + + switch (c) + { + case '\t': + { + size_t spaces = tabsize - in_position % tabsize; + if (in_position == out_position) + { + size_t tabstop = out_position + spaces; + if (expand_tabs) + { + if (out_bound < tabstop) + tabstop = out_bound; + for (; out_position < tabstop; out_position++) + putc (' ', out); + } + else + if (tabstop < out_bound) + { + out_position = tabstop; + putc (c, out); + } + } + in_position += spaces; + } + break; + + case '\r': + { + putc (c, out); + tab_from_to (0, indent); + in_position = out_position = 0; + } + break; + + case '\b': + if (in_position != 0 && --in_position < out_bound) + { + if (out_position <= in_position) + /* Add spaces to make up for suppressed tab past out_bound. */ + for (; out_position < in_position; out_position++) + putc (' ', out); + else + { + out_position = in_position; + putc (c, out); + } + } + break; + + default: + { + wchar_t wc; + size_t bytes = mbrtowc (&wc, tp0, text_limit - tp0, &mbstate); + + if (0 < bytes && bytes < (size_t) -2) + { + int width = wcwidth (wc); + if (0 < width) + in_position += width; + if (in_position <= out_bound) + { + out_position = in_position; + fwrite (tp0, 1, bytes, stdout); + } + text_pointer = tp0 + bytes; + break; + } + } + /* Fall through. */ + case '\f': + case '\v': + if (in_position < out_bound) + putc (c, out); + break; + + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': 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 ';': case '<': case '=': 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': + case '[': case '\\': case ']': 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': case '{': case '|': case '}': case '~': + /* These characters are printable ASCII characters. */ + if (in_position++ < out_bound) + { + out_position = in_position; + putc (c, out); + } + break; + + case '\n': + return out_position; + } + } + + return out_position; +} + +/* Print side by side lines with a separator in the middle. + 0 parameters are taken to indicate white space text. + Blank lines that can easily be caught are reduced to a single newline. */ + +static void +print_1sdiff_line (char const *const *left, char sep, + char const *const *right) +{ + FILE *out = outfile; + size_t hw = sdiff_half_width; + size_t c2o = sdiff_column2_offset; + size_t col = 0; + bool put_newline = false; + + if (left) + { + put_newline |= left[1][-1] == '\n'; + col = print_half_line (left, 0, hw); + } + + if (sep != ' ') + { + col = tab_from_to (col, (hw + c2o - 1) / 2) + 1; + if (sep == '|' && put_newline != (right[1][-1] == '\n')) + sep = put_newline ? '/' : '\\'; + putc (sep, out); + } + + if (right) + { + put_newline |= right[1][-1] == '\n'; + if (**right != '\n') + { + col = tab_from_to (col, c2o); + print_half_line (right, col, hw); + } + } + + if (put_newline) + putc ('\n', out); +} + +/* Print lines common to both files in side-by-side format. */ +static void +print_sdiff_common_lines (lin limit0, lin limit1) +{ + lin i0 = next0, i1 = next1; + + if (!suppress_common_lines && (i0 != limit0 || i1 != limit1)) + { + if (sdiff_merge_assist) + { + long int len0 = limit0 - i0; + long int len1 = limit1 - i1; + fprintf (outfile, "i%ld,%ld\n", len0, len1); + } + + if (!left_column) + { + while (i0 != limit0 && i1 != limit1) + print_1sdiff_line (&files[0].linbuf[i0++], ' ', + &files[1].linbuf[i1++]); + while (i1 != limit1) + print_1sdiff_line (0, ')', &files[1].linbuf[i1++]); + } + while (i0 != limit0) + print_1sdiff_line (&files[0].linbuf[i0++], '(', 0); + } + + next0 = limit0; + next1 = limit1; +} + +/* Print a hunk of an sdiff diff. + This is a contiguous portion of a complete edit script, + describing changes in consecutive lines. */ + +static void +print_sdiff_hunk (struct change *hunk) +{ + lin first0, last0, first1, last1; + register lin i, j; + + /* Determine range of line numbers involved in each file. */ + enum changes changes = + analyze_hunk (hunk, &first0, &last0, &first1, &last1); + if (!changes) + return; + + /* Print out lines up to this change. */ + print_sdiff_common_lines (first0, first1); + + if (sdiff_merge_assist) + { + long int len0 = last0 - first0 + 1; + long int len1 = last1 - first1 + 1; + fprintf (outfile, "c%ld,%ld\n", len0, len1); + } + + /* Print ``xxx | xxx '' lines */ + if (changes == CHANGED) + { + for (i = first0, j = first1; i <= last0 && j <= last1; i++, j++) + print_1sdiff_line (&files[0].linbuf[i], '|', &files[1].linbuf[j]); + changes = (i <= last0 ? OLD : 0) + (j <= last1 ? NEW : 0); + next0 = first0 = i; + next1 = first1 = j; + } + + /* Print `` > xxx '' lines */ + if (changes & NEW) + { + for (j = first1; j <= last1; ++j) + print_1sdiff_line (0, '>', &files[1].linbuf[j]); + next1 = j; + } + + /* Print ``xxx < '' lines */ + if (changes & OLD) + { + for (i = first0; i <= last0; ++i) + print_1sdiff_line (&files[0].linbuf[i], '<', 0); + next0 = i; + } +} diff --git a/src/system.h b/src/system.h new file mode 100644 index 0000000..8942296 --- /dev/null +++ b/src/system.h @@ -0,0 +1,228 @@ +/* System dependent declarations. + + Copyright (C) 1988-1989, 1992-1995, 1998, 2001-2002, 2004, 2006, 2009-2010 + Free Software Foundation, Inc. + + This file is part of GNU DIFF. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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> + +/* Use this to suppress gcc's `...may be used before initialized' warnings. */ +#ifdef lint +# define IF_LINT(Code) Code +#else +# define IF_LINT(Code) /* empty */ +#endif + +/* Define `__attribute__' and `volatile' first + so that they're used consistently in all system includes. */ +#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6) || __STRICT_ANSI__ +# define __attribute__(x) +#endif + +#include <verify.h> + +#include <sys/types.h> + +#include <sys/stat.h> +#include "stat-macros.h" + +#ifndef STAT_BLOCKSIZE +# if HAVE_STRUCT_STAT_ST_BLKSIZE +# define STAT_BLOCKSIZE(s) ((s).st_blksize) +# else +# define STAT_BLOCKSIZE(s) (8 * 1024) +# endif +#endif + +#include <unistd.h> + +#include <fcntl.h> +#include <time.h> + +#include <sys/wait.h> +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +#include <dirent.h> +#ifndef _D_EXACT_NAMLEN +# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name) +#endif + +#include <stdlib.h> +#define EXIT_TROUBLE 2 + +#include <limits.h> +#include <locale.h> +#include <stddef.h> +#include <inttypes.h> + +#include <string.h> +#if ! HAVE_STRCASECOLL +# if HAVE_STRICOLL || defined stricoll +# define strcasecoll(a, b) stricoll (a, b) +# else +# define strcasecoll(a, b) strcasecmp (a, b) /* best we can do */ +# endif +#endif +#if ! (HAVE_STRCASECMP || defined strcasecmp) +int strcasecmp (char const *, char const *); +#endif + +#include <gettext.h> +#if ! ENABLE_NLS +# undef textdomain +# define textdomain(Domainname) /* empty */ +# undef bindtextdomain +# define bindtextdomain(Domainname, Dirname) /* empty */ +#endif + +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + +#include <ctype.h> + +/* ISDIGIT differs from isdigit, as follows: + - Its arg may be any int or unsigned int; it need not be an unsigned char. + - It's guaranteed to evaluate its argument exactly once. + - It's typically faster. + POSIX 1003.1-2001 says that only '0' through '9' are digits. + Prefer ISDIGIT to isdigit unless it's important to use the locale's + definition of `digit' even when the host does not conform to POSIX. */ +#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) + +#include <errno.h> + +#include <signal.h> +#ifndef SA_RESTART +# ifdef SA_INTERRUPT /* e.g. SunOS 4.1.x */ +# define SA_RESTART SA_INTERRUPT +# else +# define SA_RESTART 0 +# endif +#endif +#if !defined SIGCHLD && defined SIGCLD +# define SIGCHLD SIGCLD +#endif + +#undef MIN +#undef MAX +#define MIN(a, b) ((a) <= (b) ? (a) : (b)) +#define MAX(a, b) ((a) >= (b) ? (a) : (b)) + +#include <stdbool.h> + +#if HAVE_VFORK_H +# include <vfork.h> +#endif + +#if ! HAVE_WORKING_VFORK +# define vfork fork +#endif + +#include <intprops.h> +#include "propername.h" + +/* Type used for fast comparison of several bytes at a time. */ + +#ifndef word +# define word uintmax_t +#endif + +/* The integer type of a line number. Since files are read into main + memory, ptrdiff_t should be wide enough. */ + +typedef ptrdiff_t lin; +#define LIN_MAX PTRDIFF_MAX +verify (TYPE_SIGNED (lin)); +verify (sizeof (ptrdiff_t) <= sizeof (lin)); +verify (sizeof (lin) <= sizeof (long int)); + +/* This section contains POSIX-compliant defaults for macros + that are meant to be overridden by hand in config.h as needed. */ + +#ifndef file_name_cmp +# define file_name_cmp strcmp +#endif + +#ifndef initialize_main +# define initialize_main(argcp, argvp) +#endif + +#ifndef NULL_DEVICE +# define NULL_DEVICE "/dev/null" +#endif + +/* Do struct stat *S, *T describe the same special file? */ +#ifndef same_special_file +# if HAVE_ST_RDEV && defined S_ISBLK && defined S_ISCHR +# define same_special_file(s, t) \ + (((S_ISBLK ((s)->st_mode) && S_ISBLK ((t)->st_mode)) \ + || (S_ISCHR ((s)->st_mode) && S_ISCHR ((t)->st_mode))) \ + && (s)->st_rdev == (t)->st_rdev) +# else +# define same_special_file(s, t) 0 +# endif +#endif + +/* Do struct stat *S, *T describe the same file? Answer -1 if unknown. */ +#ifndef same_file +# define same_file(s, t) \ + ((((s)->st_ino == (t)->st_ino) && ((s)->st_dev == (t)->st_dev)) \ + || same_special_file (s, t)) +#endif + +/* Do struct stat *S, *T have the same file attributes? + + POSIX says that two files are identical if st_ino and st_dev are + the same, but many file systems incorrectly assign the same (device, + inode) pair to two distinct files, including: + + - GNU/Linux NFS servers that export all local file systems as a + single NFS file system, if a local device number (st_dev) exceeds + 255, or if a local inode number (st_ino) exceeds 16777215. + + - Network Appliance NFS servers in snapshot directories; see + Network Appliance bug #195. + + - ClearCase MVFS; see bug id ATRia04618. + + Check whether two files that purport to be the same have the same + attributes, to work around instances of this common bug. Do not + inspect all attributes, only attributes useful in checking for this + bug. + + It's possible for two distinct files on a buggy file system to have + the same attributes, but it's not worth slowing down all + implementations (or complicating the configuration) to cater to + these rare cases in buggy implementations. */ + +#ifndef same_file_attributes +# define same_file_attributes(s, t) \ + ((s)->st_mode == (t)->st_mode \ + && (s)->st_nlink == (t)->st_nlink \ + && (s)->st_uid == (t)->st_uid \ + && (s)->st_gid == (t)->st_gid \ + && (s)->st_size == (t)->st_size \ + && (s)->st_mtime == (t)->st_mtime \ + && (s)->st_ctime == (t)->st_ctime) +#endif + +#define STREQ(a, b) (strcmp (a, b) == 0) diff --git a/src/util.c b/src/util.c new file mode 100644 index 0000000..3be03e9 --- /dev/null +++ b/src/util.c @@ -0,0 +1,788 @@ +/* Support routines for GNU DIFF. + + Copyright (C) 1988-1989, 1992-1995, 1998, 2001-2002, 2004, 2006, 2009-2010 + Free Software Foundation, Inc. + + This file is part of GNU DIFF. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General 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 "diff.h" +#include <dirname.h> +#include <error.h> +#include <sh-quote.h> +#include <xalloc.h> + +char const pr_program[] = PR_PROGRAM; + +/* Queue up one-line messages to be printed at the end, + when -l is specified. Each message is recorded with a `struct msg'. */ + +struct msg +{ + struct msg *next; + char args[1]; /* Format + 4 args, each '\0' terminated, concatenated. */ +}; + +/* Head of the chain of queues messages. */ + +static struct msg *msg_chain; + +/* Tail of the chain of queues messages. */ + +static struct msg **msg_chain_end = &msg_chain; + +/* Use when a system call returns non-zero status. + NAME should normally be the file name. */ + +void +perror_with_name (char const *name) +{ + error (0, errno, "%s", name); +} + +/* Use when a system call returns non-zero status and that is fatal. */ + +void +pfatal_with_name (char const *name) +{ + int e = errno; + print_message_queue (); + error (EXIT_TROUBLE, e, "%s", name); + abort (); +} + +/* Print an error message containing MSGID, then exit. */ + +void +fatal (char const *msgid) +{ + print_message_queue (); + error (EXIT_TROUBLE, 0, "%s", _(msgid)); + abort (); +} + +/* Like printf, except if -l in effect then save the message and print later. + This is used for things like "Only in ...". */ + +void +message (char const *format_msgid, char const *arg1, char const *arg2) +{ + message5 (format_msgid, arg1, arg2, 0, 0); +} + +void +message5 (char const *format_msgid, char const *arg1, char const *arg2, + char const *arg3, char const *arg4) +{ + if (paginate) + { + char *p; + char const *arg[5]; + int i; + size_t size[5]; + size_t total_size = offsetof (struct msg, args); + struct msg *new; + + arg[0] = format_msgid; + arg[1] = arg1; + arg[2] = arg2; + arg[3] = arg3 ? arg3 : ""; + arg[4] = arg4 ? arg4 : ""; + + for (i = 0; i < 5; i++) + total_size += size[i] = strlen (arg[i]) + 1; + + new = xmalloc (total_size); + + for (i = 0, p = new->args; i < 5; p += size[i++]) + memcpy (p, arg[i], size[i]); + + *msg_chain_end = new; + new->next = 0; + msg_chain_end = &new->next; + } + else + { + if (sdiff_merge_assist) + putchar (' '); + printf (_(format_msgid), arg1, arg2, arg3, arg4); + } +} + +/* Output all the messages that were saved up by calls to `message'. */ + +void +print_message_queue (void) +{ + char const *arg[5]; + int i; + struct msg *m = msg_chain; + + while (m) + { + struct msg *next = m->next; + arg[0] = m->args; + for (i = 0; i < 4; i++) + arg[i + 1] = arg[i] + strlen (arg[i]) + 1; + printf (_(arg[0]), arg[1], arg[2], arg[3], arg[4]); + free (m); + m = next; + } +} + +/* Call before outputting the results of comparing files NAME0 and NAME1 + to set up OUTFILE, the stdio stream for the output to go to. + + Usually, OUTFILE is just stdout. But when -l was specified + we fork off a `pr' and make OUTFILE a pipe to it. + `pr' then outputs to our stdout. */ + +static char const *current_name0; +static char const *current_name1; +static bool currently_recursive; + +void +setup_output (char const *name0, char const *name1, bool recursive) +{ + current_name0 = name0; + current_name1 = name1; + currently_recursive = recursive; + outfile = 0; +} + +#if HAVE_WORKING_FORK || HAVE_WORKING_VFORK +static pid_t pr_pid; +#endif + +void +begin_output (void) +{ + char *name; + + if (outfile != 0) + return; + + /* Construct the header of this piece of diff. */ + name = xmalloc (strlen (current_name0) + strlen (current_name1) + + strlen (switch_string) + 7); + + /* POSIX 1003.1-2001 specifies this format. But there are some bugs in + the standard: it says that we must print only the last component + of the pathnames, and it requires two spaces after "diff" if + there are no options. These requirements are silly and do not + match historical practice. */ + sprintf (name, "diff%s %s %s", switch_string, current_name0, current_name1); + + if (paginate) + { + if (fflush (stdout) != 0) + pfatal_with_name (_("write failed")); + + /* Make OUTFILE a pipe to a subsidiary `pr'. */ + { +#if HAVE_WORKING_FORK || HAVE_WORKING_VFORK + int pipes[2]; + + if (pipe (pipes) != 0) + pfatal_with_name ("pipe"); + + pr_pid = vfork (); + if (pr_pid < 0) + pfatal_with_name ("fork"); + + if (pr_pid == 0) + { + close (pipes[1]); + if (pipes[0] != STDIN_FILENO) + { + if (dup2 (pipes[0], STDIN_FILENO) < 0) + pfatal_with_name ("dup2"); + close (pipes[0]); + } + + execl (pr_program, pr_program, "-h", name, (char *) 0); + _exit (errno == ENOENT ? 127 : 126); + } + else + { + close (pipes[0]); + outfile = fdopen (pipes[1], "w"); + if (!outfile) + pfatal_with_name ("fdopen"); + } +#else + char *command = xmalloc (sizeof pr_program - 1 + 7 + + shell_quote_length (name) + 1); + char *p; + sprintf (command, "%s -f -h ", pr_program); + p = command + sizeof pr_program - 1 + 7; + p = shell_quote_copy (p, name); + *p = 0; + errno = 0; + outfile = popen (command, "w"); + if (!outfile) + pfatal_with_name (command); + free (command); +#endif + } + } + else + { + + /* If -l was not specified, output the diff straight to `stdout'. */ + + outfile = stdout; + + /* If handling multiple files (because scanning a directory), + print which files the following output is about. */ + if (currently_recursive) + printf ("%s\n", name); + } + + free (name); + + /* A special header is needed at the beginning of context output. */ + switch (output_style) + { + case OUTPUT_CONTEXT: + print_context_header (files, false); + break; + + case OUTPUT_UNIFIED: + print_context_header (files, true); + break; + + default: + break; + } +} + +/* Call after the end of output of diffs for one file. + Close OUTFILE and get rid of the `pr' subfork. */ + +void +finish_output (void) +{ + if (outfile != 0 && outfile != stdout) + { + int status; + int wstatus; + int werrno = 0; + if (ferror (outfile)) + fatal ("write failed"); +#if ! (HAVE_WORKING_FORK || HAVE_WORKING_VFORK) + wstatus = pclose (outfile); + if (wstatus == -1) + werrno = errno; +#else + if (fclose (outfile) != 0) + pfatal_with_name (_("write failed")); + if (waitpid (pr_pid, &wstatus, 0) < 0) + pfatal_with_name ("waitpid"); +#endif + status = (! werrno && WIFEXITED (wstatus) + ? WEXITSTATUS (wstatus) + : INT_MAX); + if (status) + error (EXIT_TROUBLE, werrno, + _(status == 126 + ? "subsidiary program `%s' could not be invoked" + : status == 127 + ? "subsidiary program `%s' not found" + : status == INT_MAX + ? "subsidiary program `%s' failed" + : "subsidiary program `%s' failed (exit status %d)"), + pr_program, status); + } + + outfile = 0; +} + +/* Compare two lines (typically one from each input file) + according to the command line options. + For efficiency, this is invoked only when the lines do not match exactly + but an option like -i might cause us to ignore the difference. + Return nonzero if the lines differ. */ + +bool +lines_differ (char const *s1, char const *s2) +{ + register char const *t1 = s1; + register char const *t2 = s2; + size_t column = 0; + + while (1) + { + register unsigned char c1 = *t1++; + register unsigned char c2 = *t2++; + + /* Test for exact char equality first, since it's a common case. */ + if (c1 != c2) + { + switch (ignore_white_space) + { + case IGNORE_ALL_SPACE: + /* For -w, just skip past any white space. */ + while (isspace (c1) && c1 != '\n') c1 = *t1++; + while (isspace (c2) && c2 != '\n') c2 = *t2++; + break; + + case IGNORE_SPACE_CHANGE: + /* For -b, advance past any sequence of white space in + line 1 and consider it just one space, or nothing at + all if it is at the end of the line. */ + if (isspace (c1)) + { + while (c1 != '\n') + { + c1 = *t1++; + if (! isspace (c1)) + { + --t1; + c1 = ' '; + break; + } + } + } + + /* Likewise for line 2. */ + if (isspace (c2)) + { + while (c2 != '\n') + { + c2 = *t2++; + if (! isspace (c2)) + { + --t2; + c2 = ' '; + break; + } + } + } + + if (c1 != c2) + { + /* If we went too far when doing the simple test + for equality, go back to the first non-white-space + character in both sides and try again. */ + if (c2 == ' ' && c1 != '\n' + && s1 + 1 < t1 + && isspace ((unsigned char) t1[-2])) + { + --t1; + continue; + } + if (c1 == ' ' && c2 != '\n' + && s2 + 1 < t2 + && isspace ((unsigned char) t2[-2])) + { + --t2; + continue; + } + } + + break; + + case IGNORE_TAB_EXPANSION: + if ((c1 == ' ' && c2 == '\t') + || (c1 == '\t' && c2 == ' ')) + { + size_t column2 = column; + for (;; c1 = *t1++) + { + if (c1 == ' ') + column++; + else if (c1 == '\t') + column += tabsize - column % tabsize; + else + break; + } + for (;; c2 = *t2++) + { + if (c2 == ' ') + column2++; + else if (c2 == '\t') + column2 += tabsize - column2 % tabsize; + else + break; + } + if (column != column2) + return true; + } + break; + + case IGNORE_NO_WHITE_SPACE: + break; + } + + /* Lowercase all letters if -i is specified. */ + + if (ignore_case) + { + c1 = tolower (c1); + c2 = tolower (c2); + } + + if (c1 != c2) + break; + } + if (c1 == '\n') + return false; + + column += c1 == '\t' ? tabsize - column % tabsize : 1; + } + + return true; +} + +/* Find the consecutive changes at the start of the script START. + Return the last link before the first gap. */ + +struct change * +find_change (struct change *start) +{ + return start; +} + +struct change * +find_reverse_change (struct change *start) +{ + return start; +} + +/* Divide SCRIPT into pieces by calling HUNKFUN and + print each piece with PRINTFUN. + Both functions take one arg, an edit script. + + HUNKFUN is called with the tail of the script + and returns the last link that belongs together with the start + of the tail. + + PRINTFUN takes a subscript which belongs together (with a null + link at the end) and prints it. */ + +void +print_script (struct change *script, + struct change * (*hunkfun) (struct change *), + void (*printfun) (struct change *)) +{ + struct change *next = script; + + while (next) + { + struct change *this, *end; + + /* Find a set of changes that belong together. */ + this = next; + end = (*hunkfun) (next); + + /* Disconnect them from the rest of the changes, + making them a hunk, and remember the rest for next iteration. */ + next = end->link; + end->link = 0; +#ifdef DEBUG + debug_script (this); +#endif + + /* Print this hunk. */ + (*printfun) (this); + + /* Reconnect the script so it will all be freed properly. */ + end->link = next; + } +} + +/* Print the text of a single line LINE, + flagging it with the characters in LINE_FLAG (which say whether + the line is inserted, deleted, changed, etc.). LINE_FLAG must not + end in a blank, unless it is a single blank. */ + +void +print_1_line (char const *line_flag, char const *const *line) +{ + char const *base = line[0], *limit = line[1]; /* Help the compiler. */ + FILE *out = outfile; /* Help the compiler some more. */ + char const *flag_format = 0; + + /* If -T was specified, use a Tab between the line-flag and the text. + Otherwise use a Space (as Unix diff does). + Print neither space nor tab if line-flags are empty. + But omit trailing blanks if requested. */ + + if (line_flag && *line_flag) + { + char const *flag_format_1 = flag_format = initial_tab ? "%s\t" : "%s "; + char const *line_flag_1 = line_flag; + + if (suppress_blank_empty && **line == '\n') + { + flag_format_1 = "%s"; + + /* This hack to omit trailing blanks takes advantage of the + fact that the only way that LINE_FLAG can end in a blank + is when LINE_FLAG consists of a single blank. */ + line_flag_1 += *line_flag_1 == ' '; + } + + fprintf (out, flag_format_1, line_flag_1); + } + + output_1_line (base, limit, flag_format, line_flag); + + if ((!line_flag || line_flag[0]) && limit[-1] != '\n') + fprintf (out, "\n\\ %s\n", _("No newline at end of file")); +} + +/* Output a line from BASE up to LIMIT. + With -t, expand white space characters to spaces, and if FLAG_FORMAT + is nonzero, output it with argument LINE_FLAG after every + internal carriage return, so that tab stops continue to line up. */ + +void +output_1_line (char const *base, char const *limit, char const *flag_format, + char const *line_flag) +{ + if (!expand_tabs) + fwrite (base, sizeof (char), limit - base, outfile); + else + { + register FILE *out = outfile; + register unsigned char c; + register char const *t = base; + register size_t column = 0; + size_t tab_size = tabsize; + + while (t < limit) + switch ((c = *t++)) + { + case '\t': + { + size_t spaces = tab_size - column % tab_size; + column += spaces; + do + putc (' ', out); + while (--spaces); + } + break; + + case '\r': + putc (c, out); + if (flag_format && t < limit && *t != '\n') + fprintf (out, flag_format, line_flag); + column = 0; + break; + + case '\b': + if (column == 0) + continue; + column--; + putc (c, out); + break; + + default: + column += isprint (c) != 0; + putc (c, out); + break; + } + } +} + +char const change_letter[] = { 0, 'd', 'a', 'c' }; + +/* Translate an internal line number (an index into diff's table of lines) + into an actual line number in the input file. + The internal line number is I. FILE points to the data on the file. + + Internal line numbers count from 0 starting after the prefix. + Actual line numbers count from 1 within the entire file. */ + +lin +translate_line_number (struct file_data const *file, lin i) +{ + return i + file->prefix_lines + 1; +} + +/* Translate a line number range. This is always done for printing, + so for convenience translate to long int rather than lin, so that the + caller can use printf with "%ld" without casting. */ + +void +translate_range (struct file_data const *file, + lin a, lin b, + long int *aptr, long int *bptr) +{ + *aptr = translate_line_number (file, a - 1) + 1; + *bptr = translate_line_number (file, b + 1) - 1; +} + +/* Print a pair of line numbers with SEPCHAR, translated for file FILE. + If the two numbers are identical, print just one number. + + Args A and B are internal line numbers. + We print the translated (real) line numbers. */ + +void +print_number_range (char sepchar, struct file_data *file, lin a, lin b) +{ + long int trans_a, trans_b; + translate_range (file, a, b, &trans_a, &trans_b); + + /* Note: we can have B < A in the case of a range of no lines. + In this case, we should print the line number before the range, + which is B. */ + if (trans_b > trans_a) + fprintf (outfile, "%ld%c%ld", trans_a, sepchar, trans_b); + else + fprintf (outfile, "%ld", trans_b); +} + +/* Look at a hunk of edit script and report the range of lines in each file + that it applies to. HUNK is the start of the hunk, which is a chain + of `struct change'. The first and last line numbers of file 0 are stored in + *FIRST0 and *LAST0, and likewise for file 1 in *FIRST1 and *LAST1. + Note that these are internal line numbers that count from 0. + + If no lines from file 0 are deleted, then FIRST0 is LAST0+1. + + Return UNCHANGED if only ignorable lines are inserted or deleted, + OLD if lines of file 0 are deleted, + NEW if lines of file 1 are inserted, + and CHANGED if both kinds of changes are found. */ + +enum changes +analyze_hunk (struct change *hunk, + lin *first0, lin *last0, + lin *first1, lin *last1) +{ + struct change *next; + lin l0, l1; + lin show_from, show_to; + lin i; + bool trivial = ignore_blank_lines || ignore_regexp.fastmap; + size_t trivial_length = ignore_blank_lines - 1; + /* If 0, ignore zero-length lines; + if SIZE_MAX, do not ignore lines just because of their length. */ + bool skip_leading_white_space = + (ignore_blank_lines && IGNORE_SPACE_CHANGE <= ignore_white_space); + + char const * const *linbuf0 = files[0].linbuf; /* Help the compiler. */ + char const * const *linbuf1 = files[1].linbuf; + + show_from = show_to = 0; + + *first0 = hunk->line0; + *first1 = hunk->line1; + + next = hunk; + do + { + l0 = next->line0 + next->deleted - 1; + l1 = next->line1 + next->inserted - 1; + show_from += next->deleted; + show_to += next->inserted; + + for (i = next->line0; i <= l0 && trivial; i++) + { + char const *line = linbuf0[i]; + char const *newline = linbuf0[i + 1] - 1; + size_t len = newline - line; + char const *p = line; + if (skip_leading_white_space) + while (isspace ((unsigned char) *p) && *p != '\n') + p++; + if (newline - p != trivial_length + && (! ignore_regexp.fastmap + || re_search (&ignore_regexp, line, len, 0, len, 0) < 0)) + trivial = 0; + } + + for (i = next->line1; i <= l1 && trivial; i++) + { + char const *line = linbuf1[i]; + char const *newline = linbuf1[i + 1] - 1; + size_t len = newline - line; + char const *p = line; + if (skip_leading_white_space) + while (isspace ((unsigned char) *p) && *p != '\n') + p++; + if (newline - p != trivial_length + && (! ignore_regexp.fastmap + || re_search (&ignore_regexp, line, len, 0, len, 0) < 0)) + trivial = 0; + } + } + while ((next = next->link) != 0); + + *last0 = l0; + *last1 = l1; + + /* If all inserted or deleted lines are ignorable, + tell the caller to ignore this hunk. */ + + if (trivial) + return UNCHANGED; + + return (show_from ? OLD : UNCHANGED) | (show_to ? NEW : UNCHANGED); +} + +/* Concatenate three strings, returning a newly malloc'd string. */ + +char * +concat (char const *s1, char const *s2, char const *s3) +{ + char *new = xmalloc (strlen (s1) + strlen (s2) + strlen (s3) + 1); + sprintf (new, "%s%s%s", s1, s2, s3); + return new; +} + +/* Yield a new block of SIZE bytes, initialized to zero. */ + +void * +zalloc (size_t size) +{ + void *p = xmalloc (size); + memset (p, 0, size); + return p; +} + +/* Yield the newly malloc'd pathname + of the file in DIR whose filename is FILE. */ + +char * +dir_file_pathname (char const *dir, char const *file) +{ + char const *base = last_component (dir); + size_t baselen = base_len (base); + bool omit_slash = baselen == 0 || base[baselen - 1] == '/'; + return concat (dir, "/" + omit_slash, file); +} + +void +debug_script (struct change *sp) +{ + fflush (stdout); + + for (; sp; sp = sp->link) + { + long int line0 = sp->line0; + long int line1 = sp->line1; + long int deleted = sp->deleted; + long int inserted = sp->inserted; + fprintf (stderr, "%3ld %3ld delete %ld insert %ld\n", + line0, line1, deleted, inserted); + } + + fflush (stderr); +} diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 0000000..6a4858c --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,61 @@ +TESTS = \ + basic \ + binary \ + help-version \ + function-line-vs-leading-space \ + label-vs-func \ + no-newline-at-eof \ + stdin + +EXTRA_DIST = \ + $(TESTS) init.sh t-local.sh + +# Note that the first lines are statements. They ensure that environment +# variables that can perturb tests are unset or set to expected values. +# The rest are envvar settings that propagate build-related Makefile +# variables to test scripts. +TESTS_ENVIRONMENT = \ + tmp__=$$TMPDIR; test -d "$$tmp__" || tmp__=.; \ + TMPDIR=$$tmp__; export TMPDIR; \ + exec 9>&2; \ + shell_or_perl_() { \ + if grep '^\#!/usr/bin/perl' "$$1" > /dev/null; then \ + if $(PERL) -e 'use warnings' > /dev/null 2>&1; then \ + grep '^\#!/usr/bin/perl -T' "$$1" > /dev/null && T_=T || T_=; \ + $(PERL) -w$$T_ -I$(srcdir) -MCoreutils \ + -M"CuTmpdir qw($$f)" -- "$$1"; \ + else \ + echo 1>&2 "$$tst: configure did not find a usable version of Perl," \ + "so skipping this test"; \ + (exit 77); \ + fi; \ + else \ + $(SHELL) "$$1"; \ + fi; \ + }; \ + export \ + VERSION='$(VERSION)' \ + abs_top_builddir='$(abs_top_builddir)' \ + abs_top_srcdir='$(abs_top_srcdir)' \ + abs_srcdir='$(abs_srcdir)' \ + built_programs="`$(built_programs)`" \ + srcdir='$(srcdir)' \ + top_srcdir='$(top_srcdir)' \ + CC='$(CC)' \ + MAKE=$(MAKE) \ + PACKAGE_BUGREPORT='$(PACKAGE_BUGREPORT)' \ + PACKAGE_VERSION=$(PACKAGE_VERSION) \ + CONFIG_HEADER='$(abs_top_builddir)/lib/config.h' \ + ENABLE_DEVICE_MAPPER=$(ENABLE_DEVICE_MAPPER) \ + PERL='$(PERL)' \ + PREFERABLY_POSIX_SHELL='$(PREFERABLY_POSIX_SHELL)' \ + REPLACE_GETCWD=$(REPLACE_GETCWD) \ + PATH='$(abs_top_builddir)/src$(PATH_SEPARATOR)'"$$PATH" \ + ; shell_or_perl_ + +built_programs = \ + echo 'spy:;@echo $$(PROGRAMS)' \ + | MAKEFLAGS= $(MAKE) -s -C $(builddir)/../src -f Makefile -f - spy \ + | fmt -1 | sed 's,$(EXEEXT)$$,,' | sort -u + +VERBOSE = yes diff --git a/tests/Makefile.in b/tests/Makefile.in new file mode 100644 index 0000000..c21ee74 --- /dev/null +++ b/tests/Makefile.in @@ -0,0 +1,1302 @@ +# Makefile.in generated by automake 1.11a from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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@ +VPATH = @srcdir@ +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 = tests +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/c-stack.m4 \ + $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.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/exclude.m4 \ + $(top_srcdir)/m4/extensions.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/file-type.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/freopen.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21_gl.m4 $(top_srcdir)/m4/gnu-make.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/hard-locale.m4 $(top_srcdir)/m4/hash.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \ + $(top_srcdir)/m4/iconv_open.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttostr.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lib-ld_gl.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix_gl.m4 \ + $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-tr.m4 \ + $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/longlong_gl.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/manywarnings.m4 \ + $(top_srcdir)/m4/mbchar.m4 $(top_srcdir)/m4/mbiter.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbslen.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/memchr.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/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/onceonly.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po_gl.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/putenv.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/setenv.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.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/stdio-safer.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/strftime.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strptime.m4 \ + $(top_srcdir)/m4/strtoimax.m4 $(top_srcdir)/m4/strtol.m4 \ + $(top_srcdir)/m4/strtoll.m4 $(top_srcdir)/m4/strtoul.m4 \ + $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/strtoumax.m4 \ + $(top_srcdir)/m4/symlink.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/time_h.m4 \ + $(top_srcdir)/m4/time_r.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/vararrays.m4 \ + $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.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/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \ + $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xstrtol.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +# If stdout is a non-dumb tty, use colors. If test -t is not supported, +# then this fails; a conservative approach. Of course do not redirect +# stdout here, just stderr. +am__tty_colors = \ +red=; grn=; lgn=; blu=; std=; \ +test "X$(AM_COLOR_TESTS)" != Xno \ +&& test "X$$TERM" != Xdumb \ +&& { test "X$(AM_COLOR_TESTS)" = Xalways || test -t 1 2>/dev/null; } \ +&& { \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + std=''; \ +} +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' +# Restructured Text title and section. +am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//' +am__rst_section = sed 'p;s/./=/g;p;g' +# Put stdin (possibly several lines separated by ". ") in a box. +am__text_box = $(AWK) '{ \ + n = split($$0, lines, "\\. "); max = 0; \ + for (i = 1; i <= n; ++i) \ + if (max < length(lines[i])) \ + max = length(lines[i]); \ + for (i = 0; i < max; ++i) line = line "="; \ + print line; \ + for (i = 1; i <= n; ++i) if (lines[i]) print lines[i];\ + print line; \ +}' +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL). This contradicts POSIX. Work around the problem +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# 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, and passes +# TESTS_ENVIRONMENT. Save and restore TERM around use of +# TESTS_ENVIRONMENT, in case that unsets it. +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +srcdir=$(srcdir); export srcdir; \ +rm -f $@-t; \ +am__trap='rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st'; \ +trap "st=129; $$am__trap" 1; trap "st=130; $$am__trap" 2; \ +trap "st=141; $$am__trap" 13; trap "st=143; $$am__trap" 15; \ +am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \ +test "x$$am__odir" = x. || $(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='$@'; __SAVED_TERM=$$TERM; \ +$(TESTS_ENVIRONMENT) +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check check-html recheck recheck-html +TEST_SUITE_LOG = test-suite.log +TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t) +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@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +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@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +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@ +FNMATCH_H = @FNMATCH_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +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_FFLUSH = @GNULIB_FFLUSH@ +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_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +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_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_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +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_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_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STAT = @GNULIB_STAT@ +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_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_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ +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_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WARN_CFLAGS = @GNULIB_WARN_CFLAGS@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +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_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +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_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_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +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_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +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_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LIBSIGSEGV = @HAVE_LIBSIGSEGV@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOCALTIME_R = @HAVE_LOCALTIME_R@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +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_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +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_SLEEP = @HAVE_SLEEP@ +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_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_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_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_TIMEGM = @HAVE_TIMEGM@ +HAVE_TTYNAME_R = @HAVE_TTYNAME_R@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +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_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HELP2MAN = @HELP2MAN@ +ICONV_H = @ICONV_H@ +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@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBDIFFUTILS_LIBDEPS = @LIBDIFFUTILS_LIBDEPS@ +LIBDIFFUTILS_LTLIBDEPS = @LIBDIFFUTILS_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSIGSEGV = @LIBSIGSEGV@ +LIBSIGSEGV_PREFIX = @LIBSIGSEGV_PREFIX@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +MAKEINFO = @MAKEINFO@ +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_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_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_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_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_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_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_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_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_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_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@ +OBJEXT = @OBJEXT@ +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@ +POSUB = @POSUB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PR_PROGRAM = @PR_PROGRAM@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +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_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +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_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_NANOSLEEP = @REPLACE_NANOSLEEP@ +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_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +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_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +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_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +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_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_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_aux_dir = @abs_aux_dir@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +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@ +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@ +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@ +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 = \ + basic \ + binary \ + help-version \ + function-line-vs-leading-space \ + label-vs-func \ + no-newline-at-eof \ + stdin + +EXTRA_DIST = \ + $(TESTS) init.sh t-local.sh + + +# Note that the first lines are statements. They ensure that environment +# variables that can perturb tests are unset or set to expected values. +# The rest are envvar settings that propagate build-related Makefile +# variables to test scripts. +TESTS_ENVIRONMENT = \ + tmp__=$$TMPDIR; test -d "$$tmp__" || tmp__=.; \ + TMPDIR=$$tmp__; export TMPDIR; \ + exec 9>&2; \ + shell_or_perl_() { \ + if grep '^\#!/usr/bin/perl' "$$1" > /dev/null; then \ + if $(PERL) -e 'use warnings' > /dev/null 2>&1; then \ + grep '^\#!/usr/bin/perl -T' "$$1" > /dev/null && T_=T || T_=; \ + $(PERL) -w$$T_ -I$(srcdir) -MCoreutils \ + -M"CuTmpdir qw($$f)" -- "$$1"; \ + else \ + echo 1>&2 "$$tst: configure did not find a usable version of Perl," \ + "so skipping this test"; \ + (exit 77); \ + fi; \ + else \ + $(SHELL) "$$1"; \ + fi; \ + }; \ + export \ + VERSION='$(VERSION)' \ + abs_top_builddir='$(abs_top_builddir)' \ + abs_top_srcdir='$(abs_top_srcdir)' \ + abs_srcdir='$(abs_srcdir)' \ + built_programs="`$(built_programs)`" \ + srcdir='$(srcdir)' \ + top_srcdir='$(top_srcdir)' \ + CC='$(CC)' \ + MAKE=$(MAKE) \ + PACKAGE_BUGREPORT='$(PACKAGE_BUGREPORT)' \ + PACKAGE_VERSION=$(PACKAGE_VERSION) \ + CONFIG_HEADER='$(abs_top_builddir)/lib/config.h' \ + ENABLE_DEVICE_MAPPER=$(ENABLE_DEVICE_MAPPER) \ + PERL='$(PERL)' \ + PREFERABLY_POSIX_SHELL='$(PREFERABLY_POSIX_SHELL)' \ + REPLACE_GETCWD=$(REPLACE_GETCWD) \ + PATH='$(abs_top_builddir)/src$(PATH_SEPARATOR)'"$$PATH" \ + ; shell_or_perl_ + +built_programs = \ + echo 'spy:;@echo $$(PROGRAMS)' \ + | MAKEFLAGS= $(MAKE) -s -C $(builddir)/../src -f Makefile -f - spy \ + | fmt -1 | sed 's,$(EXEEXT)$$,,' | sort -u + +VERBOSE = yes +all: all-am + +.SUFFIXES: +.SUFFIXES: .html .log .test .test$(EXEEXT) +$(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 tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/Makefile +.PRECIOUS: 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): +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +cscope cscopelist: + + +# To be appended to the command running the test. Handle the stdout +# and stderr redirection, and catch the exit status. +am__check_post = \ +>$@-t 2>&1; \ +estatus=$$?; \ +if test -n '$(DISABLE_HARD_ERRORS)' \ + && test $$estatus -eq 99; then \ + estatus=1; \ +fi; \ +TERM=$$__SAVED_TERM; export TERM; \ +$(am__tty_colors); \ +xfailed=PASS; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + xfailed=XFAIL;; \ +esac; \ +case $$estatus:$$xfailed in \ + 0:XFAIL) col=$$red; res=XPASS;; \ + 0:*) col=$$grn; res=PASS ;; \ + 77:*) col=$$blu; res=SKIP ;; \ + 99:*) col=$$red; res=FAIL ;; \ + *:XFAIL) col=$$lgn; res=XFAIL;; \ + *:*) col=$$red; res=FAIL ;; \ +esac; \ +echo "$${col}$$res$${std}: $$f"; \ +echo "$$res: $$f (exit: $$estatus)" | \ + $(am__rst_section) >$@; \ +cat $@-t >>$@; \ +rm -f $@-t + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__sh_e_setup); \ + list='$(TEST_LOGS)'; \ + results=`for f in $$list; do \ + read line < $$f && echo "$$line" || echo FAIL; \ + done`; \ + all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \ + fail=`echo "$$results" | grep -c '^FAIL'`; \ + pass=`echo "$$results" | grep -c '^PASS'`; \ + skip=`echo "$$results" | grep -c '^SKIP'`; \ + xfail=`echo "$$results" | grep -c '^XFAIL'`; \ + xpass=`echo "$$results" | grep -c '^XPASS'`; \ + failures=`expr $$fail + $$xpass`; \ + all=`expr $$all - $$skip`; \ + if test "$$all" -eq 1; then tests=test; All=; \ + else tests=tests; All="All "; fi; \ + case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \ + fail=0:xpass=0:xfail=0) \ + msg="$$All$$all $$tests passed. "; \ + exit=true;; \ + fail=0:xpass=0:xfail=*) \ + msg="$$All$$all $$tests behaved as expected"; \ + if test "$$xfail" -eq 1; then xfailures=failure; \ + else xfailures=failures; fi; \ + msg="$$msg ($$xfail expected $$xfailures). "; \ + exit=true;; \ + fail=*:xpass=0:xfail=*) \ + msg="$$fail of $$all $$tests failed. "; \ + exit=false;; \ + fail=*:xpass=*:xfail=*) \ + msg="$$failures of $$all $$tests did not behave as expected"; \ + if test "$$xpass" -eq 1; then xpasses=pass; \ + else xpasses=passes; fi; \ + msg="$$msg ($$xpass unexpected $$xpasses). "; \ + exit=false;; \ + *) \ + echo >&2 "incorrect case"; exit 4;; \ + esac; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + msg="$$msg($$skip test was not run). "; \ + else \ + msg="$$msg($$skip tests were not run). "; \ + fi; \ + fi; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + echo "$$msg"; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for f in $$list; do \ + read line < $$f; \ + case $$line in \ + PASS:*|XFAIL:*);; \ + *) echo; cat $$f;; \ + esac; \ + done; \ + } >$(TEST_SUITE_LOG).tmp; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if test "$$failures" -ne 0; then \ + msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \ + fi; \ + fi; \ + test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \ + $(am__tty_colors); \ + if $$exit; then \ + echo $(ECHO_N) "$$grn$(ECHO_C)"; \ + else \ + echo $(ECHO_N) "$$red$(ECHO_C)"; \ + fi; \ + echo "$$msg" | $(am__text_box); \ + echo $(ECHO_N) "$$std$(ECHO_C)"; \ + $$exit + +# Run all the tests. +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @list='$(TEST_LOGS)'; \ + list=`for f in $$list; do \ + test .log = $$f || echo $$f; \ + done | tr '\012\015' ' '`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$list" + +.log.html: + @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ + for r2h in $$list; do \ + if ($$r2h --version) >/dev/null 2>&1; then \ + R2H=$$r2h; \ + fi; \ + done; \ + if test -z "$$R2H"; then \ + echo >&2 "cannot find rst2html, cannot create $@"; \ + exit 2; \ + fi; \ + $$R2H $< >$@.tmp + @mv $@.tmp $@ + +# Be sure to run check first, and then to convert the result. +# Beware of concurrent executions. Run "check" not "check-TESTS", as +# check-SCRIPTS and other dependencies are rebuilt by the former only. +# And expect check to fail. +check-html: + @if $(MAKE) $(AM_MAKEFLAGS) check; then \ + rv=0; else rv=$$?; \ + fi; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) || exit 4; \ + exit $$rv +recheck recheck-html: + @target=`echo $@ | sed 's,^re,,'`; \ + list='$(TEST_LOGS)'; \ + list=`for f in $$list; do \ + test -f $$f || continue; \ + if read line < $$f; then \ + case $$line in FAIL*|XPASS*) echo $$f;; esac; \ + else echo $$f; fi; \ + done | tr '\012\015' ' '`; \ + $(MAKE) $(AM_MAKEFLAGS) $$target AM_MAKEFLAGS='$(AM_MAKEFLAGS) TEST_LOGS="'"$$list"'"' +basic.log: basic + @p='basic'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +binary.log: binary + @p='binary'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +help-version.log: help-version + @p='help-version'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +function-line-vs-leading-space.log: function-line-vs-leading-space + @p='function-line-vs-leading-space'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +label-vs-func.log: label-vs-func + @p='label-vs-func'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +no-newline-at-eof.log: no-newline-at-eof + @p='no-newline-at-eof'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +stdin.log: stdin + @p='stdin'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +.test.log: + @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) + +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP) + -test -z "$(TEST_SUITE_HTML)" || rm -f $(TEST_SUITE_HTML) + -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 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 + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am check-html install-am install-strip recheck \ + recheck-html + +.PHONY: all all-am check check-TESTS check-am check-html clean \ + clean-generic distclean distclean-generic 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 pdf \ + pdf-am ps ps-am recheck recheck-html uninstall uninstall-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/tests/basic b/tests/basic new file mode 100755 index 0000000..bfee8bd --- /dev/null +++ b/tests/basic @@ -0,0 +1,43 @@ +#!/bin/sh +# small examples + +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ ../src + +fail=0 + +cat <<EOF > exp- || fail=1 +1c1 +< a +--- +> b +EOF + +cat <<EOF > exp--u || fail=1 +--- a ++++ b +@@ -1 +1 @@ +-a ++b +EOF + +cat <<EOF > exp--c || fail=1 +*** a +--- b +*************** +*** 1 **** +! a +--- 1 ---- +! b +EOF + +echo a > a +echo b > b +for opt in '' -u -c; do + diff $opt a b > out 2> err; test $? = 1 || fail=1 + # Remove date and time. + sed -e 's/^\([-+*][-+*][-+*] [^ ]*\) .*/\1/' out > k; mv k out + compare out exp-$(echo $opt|tr ' ' _) || fail=1 +done + +Exit $fail diff --git a/tests/binary b/tests/binary new file mode 100644 index 0000000..c66ea04 --- /dev/null +++ b/tests/binary @@ -0,0 +1,18 @@ +#!/bin/sh +# small examples + +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ ../src + +printf 'Binary files - and /dev/null differ\n' > out-exp || fail_ setup + +fail=0 + +printf '\0'|diff - /dev/null > out 2> err + +# diff must exit with status 2, stdout as above, and no stderr. +test $? = 2 || fail=1 +compare out out-exp || fail=1 +compare err /dev/null || fail=1 + +Exit $fail diff --git a/tests/function-line-vs-leading-space b/tests/function-line-vs-leading-space new file mode 100755 index 0000000..62fd021 --- /dev/null +++ b/tests/function-line-vs-leading-space @@ -0,0 +1,66 @@ +#!/bin/sh +# Demonstrate how -F RE behavior changed after diff-2.9. + +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ ../src + +cat <<EOF > in || fail_ "failed to create temporary file" +procedure AdaCode is + procedure Local_Level_1 is + procedure Local_Level_2 is + procedure Local_Level_3 is + procedure Local_Level_4 is + procedure Local_Level_5 is + begin + null; + null; + null; + foo; + end; + begin + Local_Level_5; + end; + begin + Local_Level_4; + end; + begin + Local_Level_3; + end; + begin + Local_Level_2; + end; +begin + Local_Level_1; +end; +EOF + +sed s/foo/null/ < in > in2 || fail_ "failed to create temporary file" + +# Before diff-2.10, the function line would be truncated like this: +# @@ -8,7 +8,7 @@ procedure Local_Leve + +cat <<EOF > exp || fail_ "failed to create temporary file" +@@ -8,7 +8,7 @@ procedure Local_Level_5 is + null; + null; + null; +- foo; ++ null; + end; + begin + Local_Level_5; +EOF + +fail=0 + +diff -u -F '^[[:space:]]*\(function\|procedure\)' in in2 > out 2> err +test $? = 1 || fail=1 + +tail -n+3 out > k && mv k out || fail=1 + +compare out exp || fail=1 + +# expect empty stderr +compare err /dev/null || fail=1 + +Exit $fail diff --git a/tests/help-version b/tests/help-version new file mode 100755 index 0000000..9d7d11d --- /dev/null +++ b/tests/help-version @@ -0,0 +1,270 @@ +#! /bin/sh +# Make sure all these programs work properly +# when invoked with --help or --version. + +# Copyright (C) 2000-2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +# Ensure that $SHELL is set to *some* value and exported. +# This is required for dircolors, which would fail e.g., when +# invoked via debuild (which removes SHELL from the environment). +test "x$SHELL" = x && SHELL=/bin/sh +export SHELL + +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ ../src + +expected_failure_status_chroot=125 +expected_failure_status_env=125 +expected_failure_status_nice=125 +expected_failure_status_nohup=125 +expected_failure_status_stdbuf=125 +expected_failure_status_su=125 +expected_failure_status_timeout=125 +expected_failure_status_printenv=2 +expected_failure_status_tty=3 +expected_failure_status_sort=2 +expected_failure_status_expr=3 +expected_failure_status_lbracket=2 +expected_failure_status_dir=2 +expected_failure_status_ls=2 +expected_failure_status_vdir=2 + +expected_failure_status_cmp=2 +expected_failure_status_zcmp=2 +expected_failure_status_sdiff=2 +expected_failure_status_diff3=2 +expected_failure_status_diff=2 +expected_failure_status_zdiff=2 +expected_failure_status_zgrep=2 +expected_failure_status_zegrep=2 +expected_failure_status_zfgrep=2 + +expected_failure_status_grep=2 +expected_failure_status_egrep=2 +expected_failure_status_fgrep=2 + +test "$built_programs" \ + || fail_ "built_programs not specified!?!" + +test "$VERSION" \ + || fail_ "set envvar VERSION; it is required for a PATH sanity-check" + +# Extract version from --version output of the first program +for i in $built_programs; do + v=$(env $i --version | sed -n '1s/.* //p;q') + break +done + +# Ensure that it matches $VERSION. +test "x$v" = "x$VERSION" \ + || fail_ "--version-\$VERSION mismatch" + +for lang in C fr da; do + for i in $built_programs; do + + # Skip `test'; it doesn't accept --help or --version. + test $i = test && continue; + + # false fails even when invoked with --help or --version. + if test $i = false; then + env LC_MESSAGES=$lang $i --help >/dev/null && fail=1 + env LC_MESSAGES=$lang $i --version >/dev/null && fail=1 + continue + fi + + # The just-built install executable is always named `ginstall'. + test $i = install && i=ginstall + + # Make sure they exit successfully, under normal conditions. + env $i --help > h-$i || fail=1 + env $i --version >/dev/null || fail=1 + + # Make sure they mention the bug-reporting address in --help output. + grep "$PACKAGE_BUGREPORT" h-$i > /dev/null || fail=1 + rm -f h-$i + + # Make sure they fail upon `disk full' error. + if test -w /dev/full && test -c /dev/full; then + env $i --help >/dev/full 2>/dev/null && fail=1 + env $i --version >/dev/full 2>/dev/null && fail=1 + status=$? + test $i = [ && prog=lbracket || prog=$i + eval "expected=\$expected_failure_status_$prog" + test x$expected = x && expected=1 + if test $status = $expected; then + : # ok + else + fail=1 + echo "*** $i: bad exit status \`$status' (expected $expected)," 1>&2 + echo " with --help or --version output redirected to /dev/full" 1>&2 + fi + fi + done +done + +bigZ_in=bigZ-in.Z +zin=zin.gz +zin2=zin2.gz + +tmp=tmp-$$ +tmp_in=in-$$ +tmp_in2=in2-$$ +tmp_dir=dir-$$ +tmp_out=out-$$ +mkdir $tmp || fail=1 +cd $tmp || fail=1 + +comm_setup () { args="$tmp_in $tmp_in"; } +csplit_setup () { args="$tmp_in //"; } +cut_setup () { args='-f 1'; } +join_setup () { args="$tmp_in $tmp_in"; } +tr_setup () { args='a a'; } + +chmod_setup () { args="a+x $tmp_in"; } +# Punt on these. +chgrp_setup () { args=--version; } +chown_setup () { args=--version; } +mkfifo_setup () { args=--version; } +mknod_setup () { args=--version; } +# Punt on uptime, since it fails (e.g., failing to get boot time) +# on some systems, and we shouldn't let that stop `make check'. +uptime_setup () { args=--version; } + +# Create a file in the current directory, not in $TMPDIR. +mktemp_setup () { args=mktemp.XXXX; } + +cmp_setup () { args="$tmp_in $tmp_in2"; } + +# Tell dd not to print the line with transfer rate and total. +# The transfer rate would vary between runs. +dd_setup () { args=status=noxfer; } + +zdiff_setup () { args="$zin $zin2"; } +zcmp_setup () { args="$zin $zin2"; } +zcat_setup () { args=$zin; } +gunzip_setup () { args=$zin; } +zmore_setup () { args=$zin; } +zless_setup () { args=$zin; } +znew_setup () { args=$bigZ_in; } +zforce_setup () { args=$zin; } +zgrep_setup () { args="z $zin"; } +zegrep_setup () { args="z $zin"; } +zfgrep_setup () { args="z $zin"; } +gzexe_setup () { args=$tmp_in; } + +# We know that $tmp_in contains a "0" +grep_setup () { args="0 $tmp_in"; } +egrep_setup () { args="0 $tmp_in"; } +fgrep_setup () { args="0 $tmp_in"; } + +diff_setup () { args="$tmp_in $tmp_in2"; } +sdiff_setup () { args="$tmp_in $tmp_in2"; } +diff3_setup () { args="$tmp_in $tmp_in2 $tmp_in2"; } +cp_setup () { args="$tmp_in $tmp_in2"; } +ln_setup () { args="$tmp_in ln-target"; } +ginstall_setup () { args="$tmp_in $tmp_in2"; } +mv_setup () { args="$tmp_in $tmp_in2"; } +mkdir_setup () { args=$tmp_dir/subdir; } +rmdir_setup () { args=$tmp_dir; } +rm_setup () { args=$tmp_in; } +shred_setup () { args=$tmp_in; } +touch_setup () { args=$tmp_in2; } +truncate_setup () { args="--reference=$tmp_in $tmp_in2"; } + +basename_setup () { args=$tmp_in; } +dirname_setup () { args=$tmp_in; } +expr_setup () { args=foo; } + +# Punt, in case GNU `id' hasn't been installed yet. +groups_setup () { args=--version; } + +pathchk_setup () { args=$tmp_in; } +yes_setup () { args=--version; } +logname_setup () { args=--version; } +nohup_setup () { args=--version; } +printf_setup () { args=foo; } +seq_setup () { args=10; } +sleep_setup () { args=0; } +su_setup () { args=--version; } +stdbuf_setup () { args="-oL true"; } +timeout_setup () { args=--version; } + +# I'd rather not run sync, since it spins up disks that I've +# deliberately caused to spin down (but not unmounted). +sync_setup () { args=--version; } + +test_setup () { args=foo; } + +# This is necessary in the unusual event that there is +# no valid entry in /etc/mtab. +df_setup () { args=/; } + +# This is necessary in the unusual event that getpwuid (getuid ()) fails. +id_setup () { args=-u; } + +# Use env to avoid invoking built-in sleep of Solaris 11's /bin/sh. +kill_setup () { + env sleep 10m & + args=$! +} + +link_setup () { args="$tmp_in link-target"; } +unlink_setup () { args=$tmp_in; } + +readlink_setup () { + ln -s . slink + args=slink; +} + +stat_setup () { args=$tmp_in; } +unlink_setup () { args=$tmp_in; } +lbracket_setup () { args=": ]"; } + +# Ensure that each program "works" (exits successfully) when doing +# something more than --help or --version. +for i in $built_programs; do + # Skip these. + case $i in chroot|stty|tty|false|chcon|runcon) continue;; esac + + rm -rf $tmp_in $tmp_in2 $tmp_dir $tmp_out $bigZ_in $zin $zin2 + echo z |gzip > $zin + cp $zin $zin2 + cp $zin $bigZ_in + + # This is sort of kludgey: use numbers so this is valid input for factor, + # and two tokens so it's valid input for tsort. + echo 2147483647 0 > $tmp_in + # Make $tmp_in2 identical. Then, using $tmp_in and $tmp_in2 as arguments + # to the likes of cmp and diff makes them exit successfully. + cp $tmp_in $tmp_in2 + mkdir $tmp_dir + # echo ================== $i + test $i = [ && prog=lbracket || prog=$i + if type ${prog}_setup > /dev/null 2>&1; then + ${prog}_setup + else + args= + fi + if env $i $args < $tmp_in > $tmp_out; then + : # ok + else + echo FAIL: $i + fail=1 + fi + rm -rf $tmp_in $tmp_in2 $tmp_out $tmp_dir +done + +Exit $fail diff --git a/tests/init.sh b/tests/init.sh new file mode 100644 index 0000000..512e876 --- /dev/null +++ b/tests/init.sh @@ -0,0 +1,357 @@ +# source this file; set up for tests + +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General 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/>. + +# Using this file in a test +# ========================= +# +# The typical skeleton of a test looks like this: +# +# #!/bin/sh +# : ${srcdir=.} +# . "$srcdir/init.sh"; path_prepend_ . +# Execute some commands. +# Note that these commands are executed in a subdirectory, therefore you +# need to prepend "../" to relative filenames in the build directory. +# Set the exit code 0 for success, 77 for skipped, or 1 or other for failure. +# Use the skip_ and fail_ functions to print a diagnostic and then exit +# with the corresponding exit code. +# Exit $? + +# Executing a test that uses this file +# ==================================== +# +# Running a single test: +# $ make check TESTS=test-foo.sh +# +# Running a single test, with verbose output: +# $ make check TESTS=test-foo.sh VERBOSE=yes +# +# Running a single test, with single-stepping: +# 1. Go into a sub-shell: +# $ bash +# 2. Set relevant environment variables from TESTS_ENVIRONMENT in the +# Makefile: +# $ export srcdir=../../tests # this is an example +# 3. Execute the commands from the test, copy&pasting them one by one: +# $ . "$srcdir/init.sh"; path_prepend_ . +# ... +# 4. Finally +# $ exit + +# We require $(...) support unconditionally. +# We require a few additional shell features only when $EXEEXT is nonempty, +# in order to support automatic $EXEEXT emulation: +# - hyphen-containing alias names +# - we prefer to use ${var#...} substitution, rather than having +# to work around lack of support for that feature. +# The following code attempts to find a shell with support for these features +# and re-exec's it. If not, it skips the current test. + +gl_shell_test_script_=' +test $(echo y) = y || exit 1 +test -z "$EXEEXT" && exit 0 +shopt -s expand_aliases +alias a-b="echo zoo" +v=abx + test ${v%x} = ab \ + && test ${v#a} = bx \ + && test $(a-b) = zoo +' + +if test "x$1" = "x--no-reexec"; then + shift +else + for re_shell_ in "${CONFIG_SHELL:-no_shell}" /bin/sh bash dash zsh pdksh fail + do + test "$re_shell_" = no_shell && continue + test "$re_shell_" = fail && skip_ failed to find an adequate shell + if "$re_shell_" -c "$gl_shell_test_script_" 2>/dev/null; then + exec "$re_shell_" "$0" --no-reexec "$@" + echo "$ME_: exec failed" 1>&2 + exit 127 + fi + done +fi + +test -n "$EXEEXT" && shopt -s expand_aliases + +# We use a trap below for cleanup. This requires us to go through +# hoops to get the right exit status transported through the handler. +# So use `Exit STATUS' instead of `exit STATUS' inside of the tests. +# Turn off errexit here so that we don't trip the bug with OSF1/Tru64 +# sh inside this function. +Exit () { set +e; (exit $1); exit $1; } + +# Print warnings (e.g., about skipped and failed tests) to this file number. +# Override by defining to say, 9, in init.cfg, and putting say, +# "export ...ENVVAR_SETTINGS...; exec 9>&2; $(SHELL)" in the definition +# of TESTS_ENVIRONMENT in your tests/Makefile.am file. +# This is useful when using automake's parallel tests mode, to print +# the reason for skip/failure to console, rather than to the .log files. +: ${stderr_fileno_=2} + +warn_() { echo "$@" 1>&$stderr_fileno_; } +fail_() { warn_ "$ME_: failed test: $@"; Exit 1; } +skip_() { warn_ "$ME_: skipped test: $@"; Exit 77; } +framework_failure_() { warn_ "$ME_: set-up failure: $@"; Exit 1; } + +# This is a stub function that is run upon trap (upon regular exit and +# interrupt). Override it with a per-test function, e.g., to unmount +# a partition, or to undo any other global state changes. +cleanup_() { :; } + +if ( diff --version < /dev/null 2>&1 | grep GNU ) 2>&1 > /dev/null; then + compare() { diff -u "$@"; } +elif ( cmp --version < /dev/null 2>&1 | grep GNU ) 2>&1 > /dev/null; then + compare() { cmp -s "$@"; } +else + compare() { cmp "$@"; } +fi + +# An arbitrary prefix to help distinguish test directories. +testdir_prefix_() { printf gt; } + +# Run the user-overridable cleanup_ function, remove the temporary +# directory and exit with the incoming value of $?. +remove_tmp_() +{ + __st=$? + cleanup_ + # cd out of the directory we're about to remove + cd "$initial_cwd_" || cd / || cd /tmp + chmod -R u+rwx "$test_dir_" + # If removal fails and exit status was to be 0, then change it to 1. + rm -rf "$test_dir_" || { test $__st = 0 && __st=1; } + exit $__st +} + +# Given a directory name, DIR, if every entry in it that matches *.exe +# contains only the specified bytes (see the case stmt below), then print +# a space-separated list of those names and return 0. Otherwise, don't +# print anything and return 1. Naming constraints apply also to DIR. +find_exe_basenames_() +{ + feb_dir_=$1 + feb_fail_=0 + feb_result_= + feb_sp_= + for feb_file_ in $feb_dir_/*.exe; do + case $feb_file_ in + *[!-a-zA-Z/0-9_.+]*) feb_fail_=1; break;; + *) # Remove leading file name components as well as the .exe suffix. + feb_file_=${feb_file_##*/} + feb_file_=${feb_file_%.exe} + feb_result_="$feb_result_$feb_sp_$feb_file_";; + esac + feb_sp_=' ' + done + test $feb_fail_ = 0 && printf %s "$feb_result_" + return $feb_fail_ +} + +# Consider the files in directory, $1. +# For each file name of the form PROG.exe, create an alias named +# PROG that simply invokes PROG.exe, then return 0. If any selected +# file name or the directory name, $1, contains an unexpected character, +# define no function and return 1. +create_exe_shims_() +{ + case $EXEEXT in + '') return 0 ;; + .exe) ;; + *) echo "$0: unexpected \$EXEEXT value: $EXEEXT" 1>&2; return 1 ;; + esac + + base_names_=`find_exe_basenames_ $1` \ + || { echo "$0 (exe_shim): skipping directory: $1" 1>&2; return 1; } + + if test -n "$base_names_"; then + for base_ in $base_names_; do + alias "$base_"="$base_$EXEEXT" + done + fi + + return 0 +} + +# Use this function to prepend to PATH an absolute name for each +# specified, possibly-$initial_cwd_-relative, directory. +path_prepend_() +{ + while test $# != 0; do + path_dir_=$1 + case $path_dir_ in + '') fail_ "invalid path dir: '$1'";; + /*) abs_path_dir_=$path_dir_;; + *) abs_path_dir_=`cd "$initial_cwd_/$path_dir_" && echo "$PWD"` \ + || fail_ "invalid path dir: $path_dir_";; + esac + case $abs_path_dir_ in + *:*) fail_ "invalid path dir: '$abs_path_dir_'";; + esac + PATH="$abs_path_dir_:$PATH" + + # Create an alias, FOO, for each FOO.exe in this directory. + create_exe_shims_ "$abs_path_dir_" \ + || fail_ "something failed (above): $abs_path_dir_" + shift + done + export PATH +} + +setup_() +{ + test "$VERBOSE" = yes && set -x + + initial_cwd_=$PWD + ME_=`expr "./$0" : '.*/\(.*\)$'` + + pfx_=`testdir_prefix_` + test_dir_=`mktempd_ "$initial_cwd_" "$pfx_-$ME_.XXXX"` \ + || fail_ "failed to create temporary directory in $initial_cwd_" + cd "$test_dir_" + + # These trap statements ensure that the temporary directory, $test_dir_, + # is removed upon exit as well as upon receipt of any of the listed signals. + trap remove_tmp_ 0 + for sig_ in 1 2 3 13 15; do + eval "trap 'Exit $(expr $sig_ + 128)' $sig_" + done +} + +# Create a temporary directory, much like mktemp -d does. +# Written by Jim Meyering. +# +# Usage: mktempd_ /tmp phoey.XXXXXXXXXX +# +# First, try to use the mktemp program. +# Failing that, we'll roll our own mktemp-like function: +# - try to get random bytes from /dev/urandom +# - failing that, generate output from a combination of quickly-varying +# sources and gzip. Ignore non-varying gzip header, and extract +# "random" bits from there. +# - given those bits, map to file-name bytes using tr, and try to create +# the desired directory. +# - make only $MAX_TRIES_ attempts + +# Helper function. Print $N pseudo-random bytes from a-zA-Z0-9. +rand_bytes_() +{ + n_=$1 + + # Maybe try openssl rand -base64 $n_prime_|tr '+/=\012' abcd first? + # But if they have openssl, they probably have mktemp, too. + + chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 + dev_rand_=/dev/urandom + if test -r "$dev_rand_"; then + # Note: 256-length($chars_) == 194; 3 copies of $chars_ is 186 + 8 = 194. + dd ibs=$n_ count=1 if=$dev_rand_ 2>/dev/null \ + | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_ + return + fi + + n_plus_50_=`expr $n_ + 50` + cmds_='date; date +%N; free; who -a; w; ps auxww; ps ef; netstat -n' + data_=` (eval "$cmds_") 2>&1 | gzip ` + + # Ensure that $data_ has length at least 50+$n_ + while :; do + len_=`echo "$data_"|wc -c` + test $n_plus_50_ -le $len_ && break; + data_=` (echo "$data_"; eval "$cmds_") 2>&1 | gzip ` + done + + echo "$data_" \ + | dd bs=1 skip=50 count=$n_ 2>/dev/null \ + | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_ +} + +mktempd_() +{ + case $# in + 2);; + *) fail_ "Usage: $ME DIR TEMPLATE";; + esac + + destdir_=$1 + template_=$2 + + MAX_TRIES_=4 + + # Disallow any trailing slash on specified destdir: + # it would subvert the post-mktemp "case"-based destdir test. + case $destdir_ in + /) ;; + */) fail_ "invalid destination dir: remove trailing slash(es)";; + esac + + case $template_ in + *XXXX) ;; + *) fail_ "invalid template: $template_ (must have a suffix of at least 4 X's)";; + esac + + fail=0 + + # First, try to use mktemp. + d=`unset TMPDIR; mktemp -d -t -p "$destdir_" "$template_" 2>/dev/null` \ + || fail=1 + + # The resulting name must be in the specified directory. + case $d in "$destdir_"*);; *) fail=1;; esac + + # It must have created the directory. + test -d "$d" || fail=1 + + # It must have 0700 permissions. Handle sticky "S" bits. + perms=`ls -dgo "$d" 2>/dev/null|tr S -` || fail=1 + case $perms in drwx------*) ;; *) fail=1;; esac + + test $fail = 0 && { + echo "$d" + return + } + + # If we reach this point, we'll have to create a directory manually. + + # Get a copy of the template without its suffix of X's. + base_template_=`echo "$template_"|sed 's/XX*$//'` + + # Calculate how many X's we've just removed. + template_length_=`echo "$template_" | wc -c` + nx_=`echo "$base_template_" | wc -c` + nx_=`expr $template_length_ - $nx_` + + err_= + i_=1 + while :; do + X_=`rand_bytes_ $nx_` + candidate_dir_="$destdir_/$base_template_$X_" + err_=`mkdir -m 0700 "$candidate_dir_" 2>&1` \ + && { echo "$candidate_dir_"; return; } + test $MAX_TRIES_ -le $i_ && break; + i_=`expr $i_ + 1` + done + fail_ "$err_" +} + +# If you want to override the testdir_prefix_ function, +# or to add more utility functions, use this file. +test -f "$srcdir/init.cfg" \ + && . "$srcdir/init.cfg" + +setup_ "$@" diff --git a/tests/label-vs-func b/tests/label-vs-func new file mode 100755 index 0000000..2026b0a --- /dev/null +++ b/tests/label-vs-func @@ -0,0 +1,32 @@ +#!/bin/sh +# Show how diff's -p option can mistakenly match a label: in column 1. + +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ ../src + +fail=0 +cat <<EOF > exp || fail=1 +@@ -4 +4 @@ label: +-1; ++2; +EOF + +cat <<EOF > a || fail=1 +func () +{ +label: +1; +} +EOF + +sed s/1/2/ a > b || fail=1 +diff -p -u0 a b > out 2> err; test $? = 1 || fail=1 + +tail -3 out > k && mv k out || fail=1 + +compare out exp || fail=1 + +# expect empty stderr +compare err /dev/null || fail=1 + +Exit $fail diff --git a/tests/no-newline-at-eof b/tests/no-newline-at-eof new file mode 100644 index 0000000..e5dc89d --- /dev/null +++ b/tests/no-newline-at-eof @@ -0,0 +1,54 @@ +#!/bin/sh +# exercise the no-newline-at-EOF bug +# Before the April 2010 fix, the "\ No newline at end of file" +# line would not be printed. + +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ ../src + +printf '\n1' > a || framework_failure_ +printf '\n0\n\n1' > b || framework_failure_ +cat <<EOF > exp || framework_failure_ +@@ -1,2 +1,4 @@ + ++0 ++ + 1 +\ No newline at end of file +EOF + +cat <<EOF > exp2 || framework_failure_ +@@ -1,2 +1,4 @@ + +-1 ++0 ++ ++1 +\ No newline at end of file +EOF + +fail=0 + +# So we don't have to record trailing blanks in expected output above. +opt=--suppress-blank-empty + +diff $opt -U1 a b > out 2> err +test $? = 1 || fail=1 + +sed -n '/^@@/,$p' out > k && mv k out || fail=1 +compare out exp || fail=1 +# expect empty stderr +compare err /dev/null || fail=1 + +# Repeat, but with a newline at the end of "a". +echo >> a + +diff $opt -U1 a b > out 2> err +test $? = 1 || fail=1 + +sed -n '/^@@/,$p' out > k && mv k out || fail=1 +compare out exp2 || fail=1 +# expect empty stderr +compare err /dev/null || fail=1 + +Exit $fail diff --git a/tests/stdin b/tests/stdin new file mode 100755 index 0000000..66ef2bb --- /dev/null +++ b/tests/stdin @@ -0,0 +1,25 @@ +#!/bin/sh +# Ensure that "-" means "standard input". + +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ ../src + +fail=0 + +cat <<EOF > exp || fail=1 +--- - ++++ b +@@ -1 +1 @@ +-a ++b +EOF + +echo a > a +echo b > b + +diff -u - b < a > out 2> err; test $? = 1 || fail=1 +# Remove date and time. +sed -e 's/^\([-+*][-+*][-+*] [^ ]*\) .*/\1/' out > k; mv k out +compare out exp || fail=1 + +Exit $fail diff --git a/tests/t-local.sh b/tests/t-local.sh new file mode 100644 index 0000000..e69de29 -- 2.7.4