From ad547a6b5986815fda458221149728d9d9ab1d87 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 25 Feb 2021 19:22:25 +0000 Subject: restore Build,TODO from r57911 git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/utils/t1utils/ChangeLog | 108 + Build/source/utils/t1utils/Makefile.am | 83 + Build/source/utils/t1utils/Makefile.in | 1381 ++++ Build/source/utils/t1utils/TLpatches/ChangeLog | 71 + Build/source/utils/t1utils/TLpatches/TL-Changes | 16 + .../utils/t1utils/TLpatches/patch-03-warnings | 54 + .../utils/t1utils/TLpatches/patch-04-TL-binary | 48 + .../source/utils/t1utils/TLpatches/patch-05-getopt | 11 + .../utils/t1utils/TLpatches/patch-07-warnings | 29 + .../TLpatches/patch-08-notuse-system-memmem | 24 + Build/source/utils/t1utils/ac/withenable.ac | 7 + Build/source/utils/t1utils/aclocal.m4 | 1170 ++++ Build/source/utils/t1utils/config.h.in | 108 + Build/source/utils/t1utils/configure | 7083 ++++++++++++++++++++ Build/source/utils/t1utils/configure.ac | 127 + Build/source/utils/t1utils/strerror.c | 25 + Build/source/utils/t1utils/t1utils-src/INSTALL | 176 + Build/source/utils/t1utils/t1utils-src/LICENSE | 30 + Build/source/utils/t1utils/t1utils-src/Makefile.am | 28 + Build/source/utils/t1utils/t1utils-src/NEWS.md | 339 + Build/source/utils/t1utils/t1utils-src/README.md | 61 + Build/source/utils/t1utils/t1utils-src/clp.c | 2503 +++++++ Build/source/utils/t1utils/t1utils-src/config.h.in | 114 + .../source/utils/t1utils/t1utils-src/configure.ac | 125 + .../utils/t1utils/t1utils-src/include/lcdf/clp.h | 334 + .../t1utils/t1utils-src/include/lcdf/inttypes.h | 36 + Build/source/utils/t1utils/t1utils-src/memmem.c | 34 + Build/source/utils/t1utils/t1utils-src/t1ascii.1 | 51 + Build/source/utils/t1utils/t1utils-src/t1ascii.c | 312 + Build/source/utils/t1utils/t1utils-src/t1asm.1 | 96 + Build/source/utils/t1utils/t1utils-src/t1asm.c | 810 +++ Build/source/utils/t1utils/t1utils-src/t1asmhelp.h | 58 + Build/source/utils/t1utils/t1utils-src/t1binary.1 | 42 + Build/source/utils/t1utils/t1utils-src/t1binary.c | 285 + Build/source/utils/t1utils/t1utils-src/t1disasm.1 | 96 + Build/source/utils/t1utils/t1utils-src/t1disasm.c | 760 +++ Build/source/utils/t1utils/t1utils-src/t1lib.c | 449 ++ Build/source/utils/t1utils/t1utils-src/t1lib.h | 56 + Build/source/utils/t1utils/t1utils-src/t1mac.1 | 62 + Build/source/utils/t1utils/t1utils-src/t1mac.c | 1028 +++ Build/source/utils/t1utils/t1utils-src/t1unmac.1 | 79 + Build/source/utils/t1utils/t1utils-src/t1unmac.c | 921 +++ Build/source/utils/t1utils/t1utils.test | 35 + Build/source/utils/t1utils/tests/Symbol.pfa | 1044 +++ Build/source/utils/t1utils/tests/Symbol.pfb | Bin 0 -> 31586 bytes Build/source/utils/t1utils/tests/Symbol.raw | 5226 +++++++++++++++ Build/source/utils/t1utils/version.ac | 11 + 47 files changed, 25546 insertions(+) create mode 100644 Build/source/utils/t1utils/ChangeLog create mode 100644 Build/source/utils/t1utils/Makefile.am create mode 100644 Build/source/utils/t1utils/Makefile.in create mode 100644 Build/source/utils/t1utils/TLpatches/ChangeLog create mode 100644 Build/source/utils/t1utils/TLpatches/TL-Changes create mode 100644 Build/source/utils/t1utils/TLpatches/patch-03-warnings create mode 100644 Build/source/utils/t1utils/TLpatches/patch-04-TL-binary create mode 100644 Build/source/utils/t1utils/TLpatches/patch-05-getopt create mode 100644 Build/source/utils/t1utils/TLpatches/patch-07-warnings create mode 100644 Build/source/utils/t1utils/TLpatches/patch-08-notuse-system-memmem create mode 100644 Build/source/utils/t1utils/ac/withenable.ac create mode 100644 Build/source/utils/t1utils/aclocal.m4 create mode 100644 Build/source/utils/t1utils/config.h.in create mode 100755 Build/source/utils/t1utils/configure create mode 100644 Build/source/utils/t1utils/configure.ac create mode 100644 Build/source/utils/t1utils/strerror.c create mode 100644 Build/source/utils/t1utils/t1utils-src/INSTALL create mode 100644 Build/source/utils/t1utils/t1utils-src/LICENSE create mode 100644 Build/source/utils/t1utils/t1utils-src/Makefile.am create mode 100644 Build/source/utils/t1utils/t1utils-src/NEWS.md create mode 100644 Build/source/utils/t1utils/t1utils-src/README.md create mode 100644 Build/source/utils/t1utils/t1utils-src/clp.c create mode 100644 Build/source/utils/t1utils/t1utils-src/config.h.in create mode 100644 Build/source/utils/t1utils/t1utils-src/configure.ac create mode 100644 Build/source/utils/t1utils/t1utils-src/include/lcdf/clp.h create mode 100644 Build/source/utils/t1utils/t1utils-src/include/lcdf/inttypes.h create mode 100644 Build/source/utils/t1utils/t1utils-src/memmem.c create mode 100644 Build/source/utils/t1utils/t1utils-src/t1ascii.1 create mode 100644 Build/source/utils/t1utils/t1utils-src/t1ascii.c create mode 100644 Build/source/utils/t1utils/t1utils-src/t1asm.1 create mode 100644 Build/source/utils/t1utils/t1utils-src/t1asm.c create mode 100644 Build/source/utils/t1utils/t1utils-src/t1asmhelp.h create mode 100644 Build/source/utils/t1utils/t1utils-src/t1binary.1 create mode 100644 Build/source/utils/t1utils/t1utils-src/t1binary.c create mode 100644 Build/source/utils/t1utils/t1utils-src/t1disasm.1 create mode 100644 Build/source/utils/t1utils/t1utils-src/t1disasm.c create mode 100644 Build/source/utils/t1utils/t1utils-src/t1lib.c create mode 100644 Build/source/utils/t1utils/t1utils-src/t1lib.h create mode 100644 Build/source/utils/t1utils/t1utils-src/t1mac.1 create mode 100644 Build/source/utils/t1utils/t1utils-src/t1mac.c create mode 100644 Build/source/utils/t1utils/t1utils-src/t1unmac.1 create mode 100644 Build/source/utils/t1utils/t1utils-src/t1unmac.c create mode 100755 Build/source/utils/t1utils/t1utils.test create mode 100644 Build/source/utils/t1utils/tests/Symbol.pfa create mode 100644 Build/source/utils/t1utils/tests/Symbol.pfb create mode 100644 Build/source/utils/t1utils/tests/Symbol.raw create mode 100644 Build/source/utils/t1utils/version.ac (limited to 'Build/source/utils/t1utils') diff --git a/Build/source/utils/t1utils/ChangeLog b/Build/source/utils/t1utils/ChangeLog new file mode 100644 index 00000000000..5296bbfd374 --- /dev/null +++ b/Build/source/utils/t1utils/ChangeLog @@ -0,0 +1,108 @@ +2020-10-31 Akira Kakuto + + Import t1utils-1.42. + * version.ac: Adapted. + +2017-08-30 Akira Kakuto + + * Makefile.am, configure.ac: Do not use system memmem. + +2017-08-28 Akira Kakuto + + Import t1utils-1.41. + * version.ac, configure.ac: Adapted. + +2016-02-22 Akira Kakuto + + * Makefile.am, configure.ac: New convention. + +2015-07-07 Peter Breitenlohner + + * Makefile.am: Better dependencies for 'make check'. + +2015-03-01 Peter Breitenlohner + + Import t1utils-1.39. + * version.ac: Adjust. + +2015-02-16 Peter Breitenlohner + + * Makefile.am: Use the fragment ../../am/dist_hook.am. + +2014-06-16 Peter Breitenlohner + + * Makefile.am: Drop the obsolete ACLOCAL_AMFLAGS. + +2013-10-03 Peter Breitenlohner + + Import t1utils-1.38. + * version.ac: Adjust. + +2013-01-29 Peter Breitenlohner + + * Makefile.am: Allow subdir-objects. + +2012-11-20 Peter Breitenlohner + + * Makefile.am: Avoid use of deprecated INCLUDES. + +2011-11-04 Peter Breitenlohner + + * t1utils.test: Perform all sub-tests and report failed ones. + +2011-09-25 Peter Breitenlohner + + * t1utils.test: New shell script for tests. + * tests/Symbol.{pfa,pfb,raw}: Test input and expected output. + * Makefile.am: Add the test and its data. + +2011-07-21 Peter Breitenlohner + + Import t1utils-1.37. + * version.ac: New file defining the t1utils version. + * configure.ac: Adapt. + +2010-06-07 Peter Breitenlohner + + * configure.ac: t1utils-1.36. + +2010-05-10 Peter Breitenlohner + + * configure.ac: t1utils-1.35. + +2009-11-03 Peter Breitenlohner + + * Makefile.am, configure.ac: Proxy build system for TeX Live, + using the t1utils-1.34 distribution tree. + * t1utils-1.34-PATCHES: New directory with patches applied to + the t1utils-1.34 distribution. + +2009-08-23 Peter Breitenlohner + + Avoid maximal compiler warnings. + * configure.ac: Check for strtoul(). + * t1ascii.c (pfa_output_end), t1binary.c (pfb_output_end), + t1asm.c (check_line_charstring, texlive_getline, charstring_start, + charstring_end, get_charstring_token, parse_charstring), + t1disasm.c (disasm_output_end): ANSI C function definitions. + * t1disasm.c (oog_memstr): Unconstify arg1 and result strings. + (eexec_line): Unconstify CharStrings resulting from oog_memstr(). + +2009-08-19 Peter Breitenlohner + + * Makefile.am (AM_CFLAGS), configure.ac: Enable TL style + compiler warnings. + * clp.c (finish_string_list), t1ascii.c (short_usage, usage), + t1asm.c (short_usage, usage), t1binary.c (short_usage, usage), + t1disasm.c (short_usage, usage), t1mac.c (short_usage, usage), + t1unmac.c (short_usage, usage, check_appledouble, translate_binhex, + check_binhex_crc, check_binhex): Declare as static. + +2009-06-12 Francois Charette + + * t1asm.c: rename getline to texlive_getline. + +2009-05-07 Peter Breitenlohner + + Adapt to TL2009 build system. + diff --git a/Build/source/utils/t1utils/Makefile.am b/Build/source/utils/t1utils/Makefile.am new file mode 100644 index 00000000000..1ffc632fcb9 --- /dev/null +++ b/Build/source/utils/t1utils/Makefile.am @@ -0,0 +1,83 @@ +## Makefile.am for the TeX Live subdirectory utils/t1utils/ +## +## Copyright (C) 2008-2015 Peter Breitenlohner +## You may freely use, modify and/or distribute this file. +## +#************************************************************************ +# +# Adapted for TeX Live from t1utils/Makefile.am +# +#************************************************************************ +## +## We want to re-distribute the whole original t1utils source tree. +## +## With current automake (1.10.2) 'make distcheck' fails when +## DISTFILES contains a directory and files in that directory. +## Thus nodist_* for all files in $(T1UTILS_TREE). +EXTRA_DIST = $(T1UTILS_TREE) + +## Patches applied to the original source tree +## +EXTRA_DIST += t1utils-PATCHES + +# Files not to be distributed +include $(srcdir)/../../am/dist_hook.am +NEVER_NAMES += $(NEVER_NAMES_SUB) + +AM_CPPFLAGS = -I$(top_srcdir)/$(T1UTILS_TREE)/include +AM_CFLAGS = $(WARNING_CFLAGS) + +bin_PROGRAMS = t1ascii t1binary t1asm t1disasm t1unmac t1mac + +dist_man_MANS = \ + $(T1UTILS_TREE)/t1ascii.1 \ + $(T1UTILS_TREE)/t1binary.1 \ + $(T1UTILS_TREE)/t1asm.1 \ + $(T1UTILS_TREE)/t1disasm.1 \ + $(T1UTILS_TREE)/t1unmac.1 \ + $(T1UTILS_TREE)/t1mac.1 + +t1ascii_SOURCES = \ + @T1UTILS_TREE@/clp.c \ + @T1UTILS_TREE@/t1lib.c \ + @T1UTILS_TREE@/t1ascii.c + +t1binary_SOURCES = \ + @T1UTILS_TREE@/clp.c \ + @T1UTILS_TREE@/t1lib.c \ + @T1UTILS_TREE@/t1binary.c + +t1asm_SOURCES = \ + @T1UTILS_TREE@/clp.c \ + @T1UTILS_TREE@/t1lib.c \ + @T1UTILS_TREE@/memmem.c \ + @T1UTILS_TREE@/t1asm.c + +t1disasm_SOURCES = \ + @T1UTILS_TREE@/clp.c \ + @T1UTILS_TREE@/t1lib.c \ + @T1UTILS_TREE@/memmem.c \ + @T1UTILS_TREE@/t1disasm.c + +t1unmac_SOURCES = \ + @T1UTILS_TREE@/clp.c \ + @T1UTILS_TREE@/t1lib.c \ + @T1UTILS_TREE@/t1unmac.c + +t1mac_SOURCES = \ + @T1UTILS_TREE@/clp.c \ + @T1UTILS_TREE@/t1lib.c \ + @T1UTILS_TREE@/t1mac.c + +LDADD = @LIBOBJS@ + +## Tests +## +TESTS = t1utils.test +EXTRA_DIST += $(TESTS) +t1utils.log: t1ascii$(EXEEXT) t1binary$(EXEEXT) t1asm$(EXEEXT) t1disasm$(EXEEXT) + +## t1utils.test +EXTRA_DIST += tests/Symbol.pfa tests/Symbol.pfb tests/Symbol.raw +DISTCLEANFILES = Symbol.pfa Symbol.pfb Symbol.raw + diff --git a/Build/source/utils/t1utils/Makefile.in b/Build/source/utils/t1utils/Makefile.in new file mode 100644 index 00000000000..f12c32addbf --- /dev/null +++ b/Build/source/utils/t1utils/Makefile.in @@ -0,0 +1,1381 @@ +# Makefile.in generated by automake 1.16.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2020 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@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +bin_PROGRAMS = t1ascii$(EXEEXT) t1binary$(EXEEXT) t1asm$(EXEEXT) \ + t1disasm$(EXEEXT) t1unmac$(EXEEXT) t1mac$(EXEEXT) +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/../../m4/kpse-common.m4 \ + $(top_srcdir)/../../m4/kpse-warnings.m4 \ + $(top_srcdir)/version.ac $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" +PROGRAMS = $(bin_PROGRAMS) +am__dirstamp = $(am__leading_dot)dirstamp +am_t1ascii_OBJECTS = @T1UTILS_TREE@/clp.$(OBJEXT) \ + @T1UTILS_TREE@/t1lib.$(OBJEXT) \ + @T1UTILS_TREE@/t1ascii.$(OBJEXT) +t1ascii_OBJECTS = $(am_t1ascii_OBJECTS) +t1ascii_LDADD = $(LDADD) +t1ascii_DEPENDENCIES = @LIBOBJS@ +am_t1asm_OBJECTS = @T1UTILS_TREE@/clp.$(OBJEXT) \ + @T1UTILS_TREE@/t1lib.$(OBJEXT) @T1UTILS_TREE@/memmem.$(OBJEXT) \ + @T1UTILS_TREE@/t1asm.$(OBJEXT) +t1asm_OBJECTS = $(am_t1asm_OBJECTS) +t1asm_LDADD = $(LDADD) +t1asm_DEPENDENCIES = @LIBOBJS@ +am_t1binary_OBJECTS = @T1UTILS_TREE@/clp.$(OBJEXT) \ + @T1UTILS_TREE@/t1lib.$(OBJEXT) \ + @T1UTILS_TREE@/t1binary.$(OBJEXT) +t1binary_OBJECTS = $(am_t1binary_OBJECTS) +t1binary_LDADD = $(LDADD) +t1binary_DEPENDENCIES = @LIBOBJS@ +am_t1disasm_OBJECTS = @T1UTILS_TREE@/clp.$(OBJEXT) \ + @T1UTILS_TREE@/t1lib.$(OBJEXT) @T1UTILS_TREE@/memmem.$(OBJEXT) \ + @T1UTILS_TREE@/t1disasm.$(OBJEXT) +t1disasm_OBJECTS = $(am_t1disasm_OBJECTS) +t1disasm_LDADD = $(LDADD) +t1disasm_DEPENDENCIES = @LIBOBJS@ +am_t1mac_OBJECTS = @T1UTILS_TREE@/clp.$(OBJEXT) \ + @T1UTILS_TREE@/t1lib.$(OBJEXT) @T1UTILS_TREE@/t1mac.$(OBJEXT) +t1mac_OBJECTS = $(am_t1mac_OBJECTS) +t1mac_LDADD = $(LDADD) +t1mac_DEPENDENCIES = @LIBOBJS@ +am_t1unmac_OBJECTS = @T1UTILS_TREE@/clp.$(OBJEXT) \ + @T1UTILS_TREE@/t1lib.$(OBJEXT) \ + @T1UTILS_TREE@/t1unmac.$(OBJEXT) +t1unmac_OBJECTS = $(am_t1unmac_OBJECTS) +t1unmac_LDADD = $(LDADD) +t1unmac_DEPENDENCIES = @LIBOBJS@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/../../build-aux/depcomp +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = $(DEPDIR)/strerror.Po \ + @T1UTILS_TREE@/$(DEPDIR)/clp.Po \ + @T1UTILS_TREE@/$(DEPDIR)/memmem.Po \ + @T1UTILS_TREE@/$(DEPDIR)/t1ascii.Po \ + @T1UTILS_TREE@/$(DEPDIR)/t1asm.Po \ + @T1UTILS_TREE@/$(DEPDIR)/t1binary.Po \ + @T1UTILS_TREE@/$(DEPDIR)/t1disasm.Po \ + @T1UTILS_TREE@/$(DEPDIR)/t1lib.Po \ + @T1UTILS_TREE@/$(DEPDIR)/t1mac.Po \ + @T1UTILS_TREE@/$(DEPDIR)/t1unmac.Po +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(t1ascii_SOURCES) $(t1asm_SOURCES) $(t1binary_SOURCES) \ + $(t1disasm_SOURCES) $(t1mac_SOURCES) $(t1unmac_SOURCES) +DIST_SOURCES = $(t1ascii_SOURCES) $(t1asm_SOURCES) $(t1binary_SOURCES) \ + $(t1disasm_SOURCES) $(t1mac_SOURCES) $(t1unmac_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(dist_man_MANS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ + config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +AM_RECURSIVE_TARGETS = cscope check recheck +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' +RECHECK_LOGS = $(TEST_LOGS) +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/../../build-aux/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/../../am/dist_hook.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/../../build-aux/compile \ + $(top_srcdir)/../../build-aux/depcomp \ + $(top_srcdir)/../../build-aux/install-sh \ + $(top_srcdir)/../../build-aux/missing \ + $(top_srcdir)/../../build-aux/test-driver \ + ../../build-aux/ar-lib ../../build-aux/compile \ + ../../build-aux/config.guess ../../build-aux/config.sub \ + ../../build-aux/depcomp ../../build-aux/install-sh \ + ../../build-aux/ltmain.sh ../../build-aux/missing \ + ../../build-aux/texinfo.tex ../../build-aux/ylwrap ChangeLog \ + strerror.c +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +# Exists only to be overridden by the user if desired. +AM_DISTCHECK_DVI_TARGET = dvi +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +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@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +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@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +T1UTILS_TREE = @T1UTILS_TREE@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +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_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +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@ + +#************************************************************************ +# +# Adapted for TeX Live from t1utils/Makefile.am +# +#************************************************************************ +EXTRA_DIST = $(T1UTILS_TREE) t1utils-PATCHES $(TESTS) tests/Symbol.pfa \ + tests/Symbol.pfb tests/Symbol.raw +NEVER_DIST = `find . $(NEVER_NAMES)` + +# Files not to be distributed +NEVER_NAMES = -name .svn $(NEVER_NAMES_SUB) +NEVER_NAMES_SUB = -o -name .deps -o -name .dirstamp -o -name '*.$(OBJEXT)' +NEVER_NAMES_LT = -o -name .libs -o -name '*.lo' +AM_CPPFLAGS = -I$(top_srcdir)/$(T1UTILS_TREE)/include +AM_CFLAGS = $(WARNING_CFLAGS) +dist_man_MANS = \ + $(T1UTILS_TREE)/t1ascii.1 \ + $(T1UTILS_TREE)/t1binary.1 \ + $(T1UTILS_TREE)/t1asm.1 \ + $(T1UTILS_TREE)/t1disasm.1 \ + $(T1UTILS_TREE)/t1unmac.1 \ + $(T1UTILS_TREE)/t1mac.1 + +t1ascii_SOURCES = \ + @T1UTILS_TREE@/clp.c \ + @T1UTILS_TREE@/t1lib.c \ + @T1UTILS_TREE@/t1ascii.c + +t1binary_SOURCES = \ + @T1UTILS_TREE@/clp.c \ + @T1UTILS_TREE@/t1lib.c \ + @T1UTILS_TREE@/t1binary.c + +t1asm_SOURCES = \ + @T1UTILS_TREE@/clp.c \ + @T1UTILS_TREE@/t1lib.c \ + @T1UTILS_TREE@/memmem.c \ + @T1UTILS_TREE@/t1asm.c + +t1disasm_SOURCES = \ + @T1UTILS_TREE@/clp.c \ + @T1UTILS_TREE@/t1lib.c \ + @T1UTILS_TREE@/memmem.c \ + @T1UTILS_TREE@/t1disasm.c + +t1unmac_SOURCES = \ + @T1UTILS_TREE@/clp.c \ + @T1UTILS_TREE@/t1lib.c \ + @T1UTILS_TREE@/t1unmac.c + +t1mac_SOURCES = \ + @T1UTILS_TREE@/clp.c \ + @T1UTILS_TREE@/t1lib.c \ + @T1UTILS_TREE@/t1mac.c + +LDADD = @LIBOBJS@ +TESTS = t1utils.test +DISTCLEANFILES = Symbol.pfa Symbol.pfb Symbol.raw +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .log .o .obj .test .test$(EXEEXT) .trs +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../../am/dist_hook.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign 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__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ + esac; +$(srcdir)/../../am/dist_hook.am $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; 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) +@T1UTILS_TREE@/$(am__dirstamp): + @$(MKDIR_P) @T1UTILS_TREE@ + @: > @T1UTILS_TREE@/$(am__dirstamp) +@T1UTILS_TREE@/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) @T1UTILS_TREE@/$(DEPDIR) + @: > @T1UTILS_TREE@/$(DEPDIR)/$(am__dirstamp) +@T1UTILS_TREE@/clp.$(OBJEXT): @T1UTILS_TREE@/$(am__dirstamp) \ + @T1UTILS_TREE@/$(DEPDIR)/$(am__dirstamp) +@T1UTILS_TREE@/t1lib.$(OBJEXT): @T1UTILS_TREE@/$(am__dirstamp) \ + @T1UTILS_TREE@/$(DEPDIR)/$(am__dirstamp) +@T1UTILS_TREE@/t1ascii.$(OBJEXT): @T1UTILS_TREE@/$(am__dirstamp) \ + @T1UTILS_TREE@/$(DEPDIR)/$(am__dirstamp) + +t1ascii$(EXEEXT): $(t1ascii_OBJECTS) $(t1ascii_DEPENDENCIES) $(EXTRA_t1ascii_DEPENDENCIES) + @rm -f t1ascii$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(t1ascii_OBJECTS) $(t1ascii_LDADD) $(LIBS) +@T1UTILS_TREE@/memmem.$(OBJEXT): @T1UTILS_TREE@/$(am__dirstamp) \ + @T1UTILS_TREE@/$(DEPDIR)/$(am__dirstamp) +@T1UTILS_TREE@/t1asm.$(OBJEXT): @T1UTILS_TREE@/$(am__dirstamp) \ + @T1UTILS_TREE@/$(DEPDIR)/$(am__dirstamp) + +t1asm$(EXEEXT): $(t1asm_OBJECTS) $(t1asm_DEPENDENCIES) $(EXTRA_t1asm_DEPENDENCIES) + @rm -f t1asm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(t1asm_OBJECTS) $(t1asm_LDADD) $(LIBS) +@T1UTILS_TREE@/t1binary.$(OBJEXT): @T1UTILS_TREE@/$(am__dirstamp) \ + @T1UTILS_TREE@/$(DEPDIR)/$(am__dirstamp) + +t1binary$(EXEEXT): $(t1binary_OBJECTS) $(t1binary_DEPENDENCIES) $(EXTRA_t1binary_DEPENDENCIES) + @rm -f t1binary$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(t1binary_OBJECTS) $(t1binary_LDADD) $(LIBS) +@T1UTILS_TREE@/t1disasm.$(OBJEXT): @T1UTILS_TREE@/$(am__dirstamp) \ + @T1UTILS_TREE@/$(DEPDIR)/$(am__dirstamp) + +t1disasm$(EXEEXT): $(t1disasm_OBJECTS) $(t1disasm_DEPENDENCIES) $(EXTRA_t1disasm_DEPENDENCIES) + @rm -f t1disasm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(t1disasm_OBJECTS) $(t1disasm_LDADD) $(LIBS) +@T1UTILS_TREE@/t1mac.$(OBJEXT): @T1UTILS_TREE@/$(am__dirstamp) \ + @T1UTILS_TREE@/$(DEPDIR)/$(am__dirstamp) + +t1mac$(EXEEXT): $(t1mac_OBJECTS) $(t1mac_DEPENDENCIES) $(EXTRA_t1mac_DEPENDENCIES) + @rm -f t1mac$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(t1mac_OBJECTS) $(t1mac_LDADD) $(LIBS) +@T1UTILS_TREE@/t1unmac.$(OBJEXT): @T1UTILS_TREE@/$(am__dirstamp) \ + @T1UTILS_TREE@/$(DEPDIR)/$(am__dirstamp) + +t1unmac$(EXEEXT): $(t1unmac_OBJECTS) $(t1unmac_DEPENDENCIES) $(EXTRA_t1unmac_DEPENDENCIES) + @rm -f t1unmac$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(t1unmac_OBJECTS) $(t1unmac_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f @T1UTILS_TREE@/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strerror.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@@T1UTILS_TREE@/$(DEPDIR)/clp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@@T1UTILS_TREE@/$(DEPDIR)/memmem.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@@T1UTILS_TREE@/$(DEPDIR)/t1ascii.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@@T1UTILS_TREE@/$(DEPDIR)/t1asm.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@@T1UTILS_TREE@/$(DEPDIR)/t1binary.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@@T1UTILS_TREE@/$(DEPDIR)/t1disasm.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@@T1UTILS_TREE@/$(DEPDIR)/t1lib.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@@T1UTILS_TREE@/$(DEPDIR)/t1mac.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@@T1UTILS_TREE@/$(DEPDIR)/t1unmac.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) + +.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) '$<'` +install-man1: $(dist_man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(dist_man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + elif test -n "$$redo_logs"; then \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(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 + $(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) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-zstd: distdir + tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -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*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + *.tar.zst*) \ + zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(PROGRAMS) $(MANS) config.h +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f @T1UTILS_TREE@/$(DEPDIR)/$(am__dirstamp) + -rm -f @T1UTILS_TREE@/$(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." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f $(DEPDIR)/strerror.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/clp.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/memmem.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1ascii.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1asm.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1binary.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1disasm.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1lib.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1mac.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1unmac.Po + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +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-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 $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f $(DEPDIR)/strerror.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/clp.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/memmem.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1ascii.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1asm.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1binary.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1disasm.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1lib.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1mac.Po + -rm -f @T1UTILS_TREE@/$(DEPDIR)/t1unmac.Po + -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 uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: all check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \ + check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ + clean-generic cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ + dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ + distclean-tags distcleancheck distdir distuninstallcheck 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-man1 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 recheck tags tags-am uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-man uninstall-man1 + +.PRECIOUS: Makefile + +dist-hook: + cd "$(distdir)" && rm -rf $(NEVER_DIST) +t1utils.log: t1ascii$(EXEEXT) t1binary$(EXEEXT) t1asm$(EXEEXT) t1disasm$(EXEEXT) + +# 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/Build/source/utils/t1utils/TLpatches/ChangeLog b/Build/source/utils/t1utils/TLpatches/ChangeLog new file mode 100644 index 00000000000..c4d8127c734 --- /dev/null +++ b/Build/source/utils/t1utils/TLpatches/ChangeLog @@ -0,0 +1,71 @@ +2020-10-31 Akira Kakuto + + Import t1utils-1.42. + * patch-03-warnings, patch-04-TL-binary, patch-05-getopt, + patch-07-warnings, patch-08-notuse-system-memmem: Adapted. + +2017-08-30 Akira Kakuto + + * patch-08-notuse-system-memmem: Added. + +2017-08-28 Akira Kakuto + + Import t1utils-1.41. + * patch-03-warnings, patch-04-TL-binary, patch-05-getopt, + patch-07-warnings: Adapted. + +2015-03-01 Peter Breitenlohner + + Import t1utils-1.39. + * patch-03-warnings, patch-04-TL-binary, patch-05-getopt: + Adapted. + * patch-06-unsigned (removed): Now handled in original sources. + * patch-07-warnings (new): Avoid compiler warnings. + +2014-06-19 Peter Breitenlohner + + * patch-06-unsigned (new): Avoid undefined behaviour. + +2013-11-22 Peter Breitenlohner + + * patch-05-getopt (new): Drop '#include '. + +2013-10-03 Peter Breitenlohner + + Import t1utils-1.38. + * patch-03-warnings, patch-04-TL-binary: Adapted. + +2012-08-12 Peter Breitenlohner + + * patch-04-TL-binary (new): Use binary mode for output files. + From Akira Kakuto (W32TeX). + +2011-07-21 Peter Breitenlohner + + Adapt to t1utils-1.37. + * patch-03-warnings: Adapted. + +2010-06-07 Peter Breitenlohner + + Adapt to t1utils-1.36. + * patch-02-static (removed): Now handled in original sources. + * patch-03-warnings: Adapted, now mostly in original sources. + +2010-05-10 Peter Breitenlohner + + Adapt to t1utils-1.35. + * patch-01-getline (removed): Now handled in original sources. + * patch-02-static, patch-03-warnings: Adapted. + +2009-08-23 Peter Breitenlohner + + * patch-03-warnings (new): Avoid more compiler warnings. + +2009-08-19 Peter Breitenlohner + + * patch-02-static (new): Avoid warnings when compiling with + 'gcc --Wmissing-prototypes'. + +2009-06-12 Francois Charette + + * patch-01-getline (new): Avoid getline name conflict. diff --git a/Build/source/utils/t1utils/TLpatches/TL-Changes b/Build/source/utils/t1utils/TLpatches/TL-Changes new file mode 100644 index 00000000000..dbf73b8689a --- /dev/null +++ b/Build/source/utils/t1utils/TLpatches/TL-Changes @@ -0,0 +1,16 @@ +Changes applied to the t1utils-1.42 tree as obtained from: + http://www.lcdf.org/type/ + +Removed: + Makefile.in + aclocal.m4 + compile + config.guess + config.sub + configure + depcomp + install-sh + missing + +Moved this file to ../: + strerror.c diff --git a/Build/source/utils/t1utils/TLpatches/patch-03-warnings b/Build/source/utils/t1utils/TLpatches/patch-03-warnings new file mode 100644 index 00000000000..d76b3deb924 --- /dev/null +++ b/Build/source/utils/t1utils/TLpatches/patch-03-warnings @@ -0,0 +1,54 @@ +diff -ur t1utils-1.42/clp.c t1utils-src/clp.c +--- t1utils-1.42/clp.c Wed Oct 28 00:08:00 2020 ++++ t1utils-src/clp.c Sat Oct 31 13:01:47 2020 +@@ -1095,22 +1095,28 @@ + parse_int(Clp_Parser* clp, const char* arg, int complain, void* user_data) + { + const char *val; ++ char *temp; + uintptr_t type = (uintptr_t) user_data; + if (*arg == 0 || isspace((unsigned char) *arg) + || ((type & 1) && *arg == '-')) + val = arg; + else if (type & 1) { /* unsigned */ + #if HAVE_STRTOUL +- clp->val.ul = strtoul(arg, (char **) &val, 0); ++ clp->val.ul = strtoul(arg, &temp, 0); ++ val = temp; + #else + /* don't bother really trying to do it right */ + if (arg[0] == '-') + val = arg; +- else +- clp->val.l = strtol(arg, (char **) &val, 0); ++ else { ++ clp->val.l = strtol(arg, &temp, 0); ++ val = temp; ++ } + #endif +- } else +- clp->val.l = strtol(arg, (char **) &val, 0); ++ } else { ++ clp->val.l = strtol(arg, &temp, 0); ++ val = temp; ++ } + if (type <= 1) + clp->val.u = (unsigned) clp->val.ul; + if (*arg != 0 && *val == 0) +@@ -1130,11 +1136,14 @@ + parse_double(Clp_Parser *clp, const char *arg, int complain, void *user_data) + { + const char *val; ++ char *temp; + (void)user_data; + if (*arg == 0 || isspace((unsigned char) *arg)) + val = arg; +- else +- clp->val.d = strtod(arg, (char **) &val); ++ else { ++ clp->val.d = strtod(arg, &temp); ++ val = temp; ++ } + if (*arg != 0 && *val == 0) + return 1; + else { diff --git a/Build/source/utils/t1utils/TLpatches/patch-04-TL-binary b/Build/source/utils/t1utils/TLpatches/patch-04-TL-binary new file mode 100644 index 00000000000..c9c84c8d848 --- /dev/null +++ b/Build/source/utils/t1utils/TLpatches/patch-04-TL-binary @@ -0,0 +1,48 @@ +diff -ur t1utils-1.42/t1ascii.c t1utils-src/t1ascii.c +--- t1utils-1.42/t1ascii.c Wed Oct 28 00:08:00 2020 ++++ t1utils-src/t1ascii.c Sat Oct 31 13:02:49 2020 +@@ -286,6 +286,7 @@ + /* As we are processing a PFB (binary) input */ + /* file, we must set its file mode to binary. */ + _setmode(_fileno(ifp), _O_BINARY); ++ _setmode(_fileno(ofp), _O_BINARY); + #endif + + /* prepare font reader */ +diff -ur t1utils-1.42/t1asm.c t1utils-src/t1asm.c +--- t1utils-1.42/t1asm.c Wed Oct 28 00:08:00 2020 ++++ t1utils-src/t1asm.c Sat Oct 31 13:03:47 2020 +@@ -715,8 +715,7 @@ + #if defined(_MSDOS) || defined(_WIN32) + /* If we are processing a PFB (binary) output */ + /* file, we must set its file mode to binary. */ +- if (pfb) +- _setmode(_fileno(ofp), _O_BINARY); ++ _setmode(_fileno(ofp), _O_BINARY); + #endif + + /* Finally, we loop until no more input. Some special things to look for are +diff -ur t1utils-1.42/t1disasm.c t1utils-src/t1disasm.c +--- t1utils-1.42/t1disasm.c Wed Oct 28 00:08:00 2020 ++++ t1utils-src/t1disasm.c Sat Oct 31 13:04:32 2020 +@@ -727,6 +727,7 @@ + /* As we might be processing a PFB (binary) input file, we must set its file + mode to binary. */ + _setmode(_fileno(ifp), _O_BINARY); ++ _setmode(_fileno(ofp), _O_BINARY); + #endif + + /* prepare font reader */ +diff -ur t1utils-1.42/t1unmac.c t1utils-src/t1unmac.c +--- t1utils-1.42/t1unmac.c Wed Oct 28 00:08:00 2020 ++++ t1utils-src/t1unmac.c Sat Oct 31 13:06:12 2020 +@@ -656,8 +655,7 @@ + _setmode(_fileno(ifp), _O_BINARY); + /* If we are processing a PFB (binary) output */ + /* file, we must set its file mode to binary. */ +- if (pfb) +- _setmode(_fileno(ofp), _O_BINARY); ++ _setmode(_fileno(ofp), _O_BINARY); + #endif + + if (pfb) diff --git a/Build/source/utils/t1utils/TLpatches/patch-05-getopt b/Build/source/utils/t1utils/TLpatches/patch-05-getopt new file mode 100644 index 00000000000..ea581057951 --- /dev/null +++ b/Build/source/utils/t1utils/TLpatches/patch-05-getopt @@ -0,0 +1,11 @@ +diff -ur t1utils-1.42/t1unmac.c t1utils-src/t1unmac.c +--- t1utils-1.42/t1unmac.c Wed Oct 28 00:08:00 2020 ++++ t1utils-src/t1unmac.c Sat Oct 31 13:06:12 2020 +@@ -41,7 +41,6 @@ + #endif + #if defined(_MSDOS) || defined(_WIN32) + # include +-# include + # include + #endif + #include diff --git a/Build/source/utils/t1utils/TLpatches/patch-07-warnings b/Build/source/utils/t1utils/TLpatches/patch-07-warnings new file mode 100644 index 00000000000..16c9340879c --- /dev/null +++ b/Build/source/utils/t1utils/TLpatches/patch-07-warnings @@ -0,0 +1,29 @@ +diff -ur t1utils-1.42/t1asmhelp.h t1utils-src/t1asmhelp.h +--- t1utils-1.42/t1asmhelp.h Wed Oct 28 00:08:00 2020 ++++ t1utils-src/t1asmhelp.h Sat Oct 31 13:15:46 2020 +@@ -26,7 +28,8 @@ + } + + +-static const char* cs_start = ""; ++static char cs_start_init[] = ""; ++static char *cs_start = cs_start_init; + + static void + set_cs_start(const char* line, size_t line_len) +@@ -37,13 +40,13 @@ + if ((p = memmem(line, line_len, "string currentfile", 18)) + && memmem(line, line_len, "readstring", 10)) { + /* locate the name of the charstring start command */ +- for (q = p; q != line && q[-1] != '/'; --q) ++ for (q = p; q != line && *(q-1) != '/'; --q) + /* nada */; + if (q != line) { + for (r = q; r != p && !isspace((unsigned char) *r) && *r != '{'; ++r) + /* nada */; + if (cs_start_set) +- free((char*) cs_start); ++ free(cs_start); + cs_start = p = malloc(r - q + 1); + memcpy(p, q, r - q); + p[r - q] = 0; diff --git a/Build/source/utils/t1utils/TLpatches/patch-08-notuse-system-memmem b/Build/source/utils/t1utils/TLpatches/patch-08-notuse-system-memmem new file mode 100644 index 00000000000..ef0997bc1ca --- /dev/null +++ b/Build/source/utils/t1utils/TLpatches/patch-08-notuse-system-memmem @@ -0,0 +1,24 @@ +diff -ur t1utils-1.42/memmem.c t1utils-src/memmem.c +--- t1utils-1.42/memmem.c Wed Oct 28 00:08:00 2020 ++++ t1utils-src/memmem.c Sat Oct 31 13:12:12 2020 +@@ -9,6 +9,8 @@ + extern "C" { + #endif + ++#define memmem my_memmem ++ + void* + memmem(const void* haystack, size_t haystack_len, + const void* needle, size_t needle_len) +diff -ur t1utils-1.42/t1asmhelp.h t1utils-src/t1asmhelp.h +--- t1utils-1.42/t1asmhelp.h Wed Oct 28 00:08:00 2020 ++++ t1utils-src/t1asmhelp.h Sat Oct 31 13:15:46 2020 +@@ -7,6 +7,8 @@ + lenIV to . This indicates the number of random bytes at the beginning + of each charstring. */ + ++#define memmem my_memmem ++ + static void + set_lenIV(const char* line, size_t line_len) + { diff --git a/Build/source/utils/t1utils/ac/withenable.ac b/Build/source/utils/t1utils/ac/withenable.ac new file mode 100644 index 00000000000..e4c5f91a37c --- /dev/null +++ b/Build/source/utils/t1utils/ac/withenable.ac @@ -0,0 +1,7 @@ +## utils/t1utils/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory utils/t1utils/ +dnl +dnl Copyright (C) 2009 Peter Breitenlohner +dnl You may freely use, modify and/or distribute this file. +dnl +## configure options and TL libraries required for t1utils +KPSE_ENABLE_PROG([t1utils]) diff --git a/Build/source/utils/t1utils/aclocal.m4 b/Build/source/utils/t1utils/aclocal.m4 new file mode 100644 index 00000000000..07865f97fc3 --- /dev/null +++ b/Build/source/utils/t1utils/aclocal.m4 @@ -0,0 +1,1170 @@ +# generated automatically by aclocal 1.16.3 -*- Autoconf -*- + +# Copyright (C) 1996-2020 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2020 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.16' +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.16.3], [], + [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.16.3])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-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + AS_CASE([$CONFIG_FILES], + [*\'*], [eval set x "$CONFIG_FILES"], + [*], [set x $CONFIG_FILES]) + shift + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf + do + # Strip MF so we end up with the name of the file. + am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`AS_DIRNAME(["$am_mf"])` + am_filepart=`AS_BASENAME(["$am_mf"])` + AM_RUN_LOG([cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles]) || am_rc=$? + done + if test $am_rc -ne 0; then + AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. If GNU make was not used, consider + re-running the configure script with MAKE="gmake" (or whatever is + necessary). You can also try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking).]) + fi + AS_UNSET([am_dirpart]) + AS_UNSET([am_filepart]) + AS_UNSET([am_mf]) + AS_UNSET([am_rc]) + rm -f conftest-deps.mk +} +])# _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. +# This creates each '.Po' and '.Plo' makefile fragment that we'll 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" MAKE="${MAKE-make}"])]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2020 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_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check whether make has an 'include' directive that can support all +# the idioms we need for our automatic dependency tracking code. +AC_DEFUN([AM_MAKE_INCLUDE], +[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) +cat > confinc.mk << 'END' +am__doit: + @echo this is the am__doit target >confinc.out +.PHONY: am__doit +END +am__include="#" +am__quote= +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) + AS_CASE([$?:`cat confinc.out 2>/dev/null`], + ['0:this is the am__doit target'], + [AS_CASE([$s], + [BSD], [am__include='.include' am__quote='"'], + [am__include='include' am__quote=''])]) + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +AC_MSG_RESULT([${_am_result}]) +AC_SUBST([am__include])]) +AC_SUBST([am__quote])]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + MISSING="\${SHELL} '$am_aux_dir/missing'" +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2020 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-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /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/kpse-common.m4]) +m4_include([../../m4/kpse-warnings.m4]) diff --git a/Build/source/utils/t1utils/config.h.in b/Build/source/utils/t1utils/config.h.in new file mode 100644 index 00000000000..a1b4a1e01d1 --- /dev/null +++ b/Build/source/utils/t1utils/config.h.in @@ -0,0 +1,108 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +#ifndef T1UTILS_CONFIG_H +#define T1UTILS_CONFIG_H + +/* Define if intXX_t types are not available. */ +#undef HAVE_FAKE_INT_TYPES + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strtoul' function. */ +#undef HAVE_STRTOUL + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if the system has the type `uintptr_t'. */ +#undef HAVE_UINTPTR_T + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if you have u_intXX_t types but not uintXX_t types. */ +#undef HAVE_U_INT_TYPES + +/* 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 + +/* 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 + +/* The size of `unsigned int', as computed by sizeof. */ +#undef SIZEOF_UNSIGNED_INT + +/* The size of `unsigned long', as computed by sizeof. */ +#undef SIZEOF_UNSIGNED_LONG + +/* The size of `void *', as computed by sizeof. */ +#undef SIZEOF_VOID_P + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Prototype strerror if we don't have it. */ +#if !HAVE_STRERROR +char *strerror(int errno); +#endif + +/* Prototype my_memmem */ +void *my_memmem(const void* haystack, size_t haystack_len, + const void* needle, size_t needle_len); + +#ifdef __cplusplus +} +/* Get rid of a possible inline macro under C++. */ +# define inline inline +#endif + +#endif /* T1UTILS_CONFIG_H */ diff --git a/Build/source/utils/t1utils/configure b/Build/source/utils/t1utils/configure new file mode 100755 index 00000000000..29d91eab607 --- /dev/null +++ b/Build/source/utils/t1utils/configure @@ -0,0 +1,7083 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for t1utils (TeX Live) 1.42. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and tex-k@tug.org +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='t1utils (TeX Live)' +PACKAGE_TARNAME='t1utils--tex-live-' +PACKAGE_VERSION='1.42' +PACKAGE_STRING='t1utils (TeX Live) 1.42' +PACKAGE_BUGREPORT='tex-k@tug.org' +PACKAGE_URL='' + +ac_unique_file="t1utils-src/t1ascii.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +T1UTILS_TREE +EGREP +GREP +CPP +LIBOBJS +WARNING_CFLAGS +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +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 +am__quote' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_maintainer_mode +enable_dependency_tracking +enable_compiler_warnings +' + 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= ;; + *) 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 + 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 t1utils (TeX Live) 1.42 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/t1utils--tex-live-] + --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 +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of t1utils (TeX Live) 1.42:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --enable-compiler-warnings=[no|min|yes|max|all] + Turn on compiler warnings [default: yes if + maintainer-mode, min otherwise] + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + 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 . +_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 +t1utils (TeX Live) configure 1.42 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ---------------------------- ## +## Report this to tex-k@tug.org ## +## ---------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +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 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 t1utils (TeX Live) $as_me 1.42, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# 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.16' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +if test x"${MISSING+set}" != xset; then + MISSING="\${SHELL} '$am_aux_dir/missing'" +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 +$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } +cat > confinc.mk << 'END' +am__doit: + @echo this is the am__doit target >confinc.out +.PHONY: am__doit +END +am__include="#" +am__quote= +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 + (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + case $?:`cat confinc.out 2>/dev/null` in #( + '0:this is the am__doit target') : + case $s in #( + BSD) : + am__include='.include' am__quote='"' ;; #( + *) : + am__include='include' am__quote='' ;; +esac ;; #( + *) : + ;; +esac + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 +$as_echo "${_am_result}" >&6; } + +# 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 + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +# Check whether --enable-compiler-warnings was given. +if test "${enable_compiler_warnings+set}" = set; then : + enableval=$enable_compiler_warnings; +fi +case $enable_compiler_warnings in #( + no | min | yes | max | all) : + ;; #( + *) : + if test "x$enable_maintainer_mode" = xyes; then : + enable_compiler_warnings=yes +else + enable_compiler_warnings=min +fi ;; +esac + +##tldbg KPSE_BASIC: Remember t1utils () as Kpse_Package (for future messages). + +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='t1utils--tex-live-' + VERSION='1.42' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler accepts prototypes" >&5 +$as_echo_n "checking whether the compiler accepts prototypes... " >&6; } +if ${kb_cv_c_prototypes+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +extern void foo(int i,...); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + kb_cv_c_prototypes=yes +else + kb_cv_c_prototypes=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: $kb_cv_c_prototypes" >&5 +$as_echo "$kb_cv_c_prototypes" >&6; } +if test "x$kb_cv_c_prototypes" = xno; then + as_fn_error $? "Sorry, your compiler does not understand prototypes." "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking what warning flags to pass to the C compiler" >&5 +$as_echo_n "checking what warning flags to pass to the C compiler... " >&6; } +if ${kpse_cv_warning_cflags+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$GCC" = xyes; then + kpse_cv_warning_cflags= +if test "x$enable_compiler_warnings" != xno; then + kpse_cv_warning_cflags="-Wimplicit -Wreturn-type" + case `$CC -dumpversion` in #( + 3.4.* | 4.* | 5.*) : + kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wdeclaration-after-statement" ;; #( + *) : + ;; +esac + case `$CC -dumpversion` in #( + 3.[234].* | 4.* | 5.*) : + kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wno-unknown-pragmas" ;; #( + *) : + ;; +esac + if test "x$enable_compiler_warnings" != xmin; then + kpse_cv_warning_cflags="-Wall -Wunused $kpse_cv_warning_cflags" + kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wmissing-prototypes -Wmissing-declarations" + if test "x$enable_compiler_warnings" != xyes; then + kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wparentheses -Wswitch -Wtrigraphs -Wpointer-arith" + kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wcast-qual -Wcast-align -Wwrite-strings" + case `$CC -dumpversion` in #( + 3.4.* | 4.* | 5.*) : + kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wold-style-definition" ;; #( + *) : + ;; +esac + if test "x$enable_compiler_warnings" != xmax; then + kpse_cv_warning_cflags="$kpse_cv_warning_cflags -Wshadow" + fi + fi + fi +fi +elif test "x$enable_compiler_warnings" = xno; then + kpse_cv_warning_cflags= +else + kpse_cv_warning_cflags= # FIXME: warning flags for non-GNU C compilers +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $kpse_cv_warning_cflags" >&5 +$as_echo "$kpse_cv_warning_cflags" >&6; } +WARNING_CFLAGS=$kpse_cv_warning_cflags + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + +#ifndef __cplusplus + /* Ultrix mips cc rejects this sort of thing. */ + typedef int charset[2]; + const charset cs = { 0, 0 }; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this sort of thing. */ + char tx; + char *t = &tx; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; } bx; + struct s *b = &bx; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=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_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "#define const /**/" >>confdefs.h + +fi + + + +ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes; then : + $as_echo "#define HAVE_STRERROR 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" strerror.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strerror.$ac_objext" + ;; +esac + +fi + + + +for ac_func in strtoul +do : + ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul" +if test "x$ac_cv_func_strtoul" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRTOUL 1 +_ACEOF + +fi +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # 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 +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # 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 +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +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 + +_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 + +_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 +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in inttypes.h sys/types.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +if test "x$ac_cv_header_inttypes_h:$ac_cv_header_sys_types_h" = xno:yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uintXX_t typedefs" >&5 +$as_echo_n "checking for uintXX_t typedefs... " >&6; } +if ${lcdf_cv_uint_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "(^|[^a-zA-Z_0-9])uint32_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then : + lcdf_cv_uint_t=yes +else + lcdf_cv_uint_t=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lcdf_cv_uint_t" >&5 +$as_echo "$lcdf_cv_uint_t" >&6; } + if test "x$lcdf_cv_uint_t" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for u_intXX_t typedefs" >&5 +$as_echo_n "checking for u_intXX_t typedefs... " >&6; } +if ${lcdf_cv_u_int_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "(^|[^a-zA-Z_0-9])u_int32_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then : + lcdf_cv_u_int_t=yes +else + lcdf_cv_u_int_t=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lcdf_cv_u_int_t" >&5 +$as_echo "$lcdf_cv_u_int_t" >&6; } + fi +fi +if test "x$ac_cv_header_inttypes_h:$lcdf_cv_uint_t" = xno:no; then + if test "x$lcdf_cv_u_int_t" = xyes; then + +$as_echo "#define HAVE_U_INT_TYPES 1" >>confdefs.h + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +========================================= + +Neither uint32_t nor u_int32_t defined by or ! +Assuming \"short\" has 16 bits and \"int\" has 32 bits. + +=========================================" >&5 +$as_echo "$as_me: WARNING: +========================================= + +Neither uint32_t nor u_int32_t defined by or ! +Assuming \"short\" has 16 bits and \"int\" has 32 bits. + +=========================================" >&2;} + +$as_echo "#define HAVE_FAKE_INT_TYPES 1" >>confdefs.h + + fi +fi + +ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#if HAVE_INTTYPES_H +# include +#endif +#if HAVE_SYS_TYPES_H +# include +#endif + +" +if test "x$ac_cv_type_uintptr_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_UINTPTR_T 1 +_ACEOF + + +fi + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 +$as_echo_n "checking size of void *... " >&6; } +if ${ac_cv_sizeof_void_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_void_p" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (void *) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_void_p=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 +$as_echo "$ac_cv_sizeof_void_p" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_VOID_P $ac_cv_sizeof_void_p +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5 +$as_echo_n "checking size of unsigned long... " >&6; } +if ${ac_cv_sizeof_unsigned_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_unsigned_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (unsigned long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_unsigned_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5 +$as_echo "$ac_cv_sizeof_unsigned_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5 +$as_echo_n "checking size of unsigned int... " >&6; } +if ${ac_cv_sizeof_unsigned_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_unsigned_int" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (unsigned int) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_unsigned_int=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5 +$as_echo "$ac_cv_sizeof_unsigned_int" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int +_ACEOF + + + + +ac_config_headers="$ac_config_headers config.h" + + + + + + + +T1UTILS_TREE=t1utils-src + + + +ac_config_files="$ac_config_files Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +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 + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by t1utils (TeX Live) $as_me 1.42, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_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 commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +t1utils (TeX Live) config.status 1.42 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" + +_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 + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES 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_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$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 :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + case $CONFIG_FILES in #( + *\'*) : + eval set x "$CONFIG_FILES" ;; #( + *) : + set x $CONFIG_FILES ;; #( + *) : + ;; +esac + shift + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf + do + # Strip MF so we end up with the name of the file. + am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`$as_dirname -- "$am_mf" || +$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$am_mf" : 'X\(//\)[^/]' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$am_mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + am_filepart=`$as_basename -- "$am_mf" || +$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$am_mf" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { echo "$as_me:$LINENO: cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles" >&5 + (cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } || am_rc=$? + done + if test $am_rc -ne 0; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. If GNU make was not used, consider + re-running the configure script with MAKE=\"gmake\" (or whatever is + necessary). You can also try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking). +See \`config.log' for more details" "$LINENO" 5; } + fi + { am_dirpart=; unset am_dirpart;} + { am_filepart=; unset am_filepart;} + { am_mf=; unset am_mf;} + { am_rc=; unset am_rc;} + rm -f conftest-deps.mk +} + ;; + + 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/Build/source/utils/t1utils/configure.ac b/Build/source/utils/t1utils/configure.ac new file mode 100644 index 00000000000..2124286841b --- /dev/null +++ b/Build/source/utils/t1utils/configure.ac @@ -0,0 +1,127 @@ +dnl Process this file with autoconf to produce a configure script. +dnl +dnl Copyright (C) 2009-2013 Peter Breitenlohner +dnl +dnl This file is free software; the copyright holder +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl ********************************************************************* +dnl +dnl Adapted for TeX Live from t1utils-src/configure.in +dnl +dnl ********************************************************************* +dnl +m4_include([version.ac])[] dnl define t1utils_version +AC_INIT([t1utils (TeX Live)], t1utils_version, [tex-k@tug.org]) +AC_PREREQ([2.65]) +AC_CONFIG_SRCDIR([t1utils-src/t1ascii.c]) +AC_CONFIG_AUX_DIR([../../build-aux]) +AC_CONFIG_MACRO_DIR([../../m4]) + +KPSE_BASIC([t1utils]) + +AC_PROG_CC +AC_C_CONST + +dnl +dnl strerror()? +dnl + +AC_REPLACE_FUNCS([strerror]) + +AC_CHECK_FUNCS([strtoul]) + +dnl +dnl integer types +dnl + +AC_CHECK_HEADERS([inttypes.h sys/types.h]) + +if test "x$ac_cv_header_inttypes_h:$ac_cv_header_sys_types_h" = xno:yes; then + AC_CACHE_CHECK([for uintXX_t typedefs], + [lcdf_cv_uint_t], + [AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])uint32_t[^a-zA-Z_0-9]], + [sys/types.h], + [lcdf_cv_uint_t=yes], + [lcdf_cv_uint_t=no])]) + if test "x$lcdf_cv_uint_t" = xno; then + AC_CACHE_CHECK([for u_intXX_t typedefs], + [lcdf_cv_u_int_t], + [AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])u_int32_t[^a-zA-Z_0-9]], + [sys/types.h], + [lcdf_cv_u_int_t=yes], + [lcdf_cv_u_int_t=no])]) + fi +fi +if test "x$ac_cv_header_inttypes_h:$lcdf_cv_uint_t" = xno:no; then + if test "x$lcdf_cv_u_int_t" = xyes; then + AC_DEFINE([HAVE_U_INT_TYPES], 1, + [Define if you have u_intXX_t types but not uintXX_t types.]) + else + AC_MSG_WARN([ +========================================= + +Neither uint32_t nor u_int32_t defined by or ! +Assuming "short" has 16 bits and "int" has 32 bits. + +=========================================]) + AC_DEFINE([HAVE_FAKE_INT_TYPES], 1, + [Define if intXX_t types are not available.]) + fi +fi + +AC_CHECK_TYPES([uintptr_t], [], [], +[#if HAVE_INTTYPES_H +# include +#endif +#if HAVE_SYS_TYPES_H +# include +#endif +]) + +AC_CHECK_SIZEOF([void *]) +AC_CHECK_SIZEOF([unsigned long]) +AC_CHECK_SIZEOF([unsigned int]) + + +AC_CONFIG_HEADERS([config.h]) + +dnl +dnl verbatim portions of the header +dnl + +AH_TOP([#ifndef T1UTILS_CONFIG_H +#define T1UTILS_CONFIG_H]) + +AH_BOTTOM([#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Prototype strerror if we don't have it. */ +#if !HAVE_STRERROR +char *strerror(int errno); +#endif + +/* Prototype my_memmem */ +void *my_memmem(const void* haystack, size_t haystack_len, + const void* needle, size_t needle_len); + +#ifdef __cplusplus +} +/* Get rid of a possible inline macro under C++. */ +# define inline inline +#endif + +#endif /* T1UTILS_CONFIG_H */]) + +AC_SUBST([T1UTILS_TREE], [t1utils-src]) + +dnl +dnl Output +dnl + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/Build/source/utils/t1utils/strerror.c b/Build/source/utils/t1utils/strerror.c new file mode 100644 index 00000000000..b47f24ed2f8 --- /dev/null +++ b/Build/source/utils/t1utils/strerror.c @@ -0,0 +1,25 @@ +/* Some operating systems don't have strerror. + This file provides a definition which David Mazieres + assures me works. */ + +#ifdef HAVE_CONFIG_H +# include +#endif +#ifdef __cplusplus +extern "C" { +#endif + +char * +strerror(int errno) +{ + extern int sys_nerr; + extern char *sys_errlist[]; + if (errno < 0 || errno >= sys_nerr) + return (char *)"bad error number"; + else + return sys_errlist[errno]; +} + +#ifdef __cplusplus +} +#endif diff --git a/Build/source/utils/t1utils/t1utils-src/INSTALL b/Build/source/utils/t1utils/t1utils-src/INSTALL new file mode 100644 index 00000000000..95d84c820fb --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/INSTALL @@ -0,0 +1,176 @@ +Basic Installation +================== + + These are generic installation instructions. + + 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, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + 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 at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' 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. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. 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. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. 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. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +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 must use a version of `make' that +supports the `VPATH' variable, such as 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 `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have 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. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + 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'. + +Optional Features +================= + + 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. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +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 host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +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. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. + diff --git a/Build/source/utils/t1utils/t1utils-src/LICENSE b/Build/source/utils/t1utils/t1utils-src/LICENSE new file mode 100644 index 00000000000..82054edc397 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/LICENSE @@ -0,0 +1,30 @@ +Portions of this software are subject to the license below. The relevant +source files are clearly marked; they refer to this file using the phrase +"the Click LICENSE file". This license is an MIT license, plus a clause +(taken from the W3C license) requiring prior written permission to use our +names in publicity. + +=========================================================================== + +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 name and trademarks of copyright holders may NOT be used in advertising +or publicity pertaining to the Software without specific, written prior +permission. Title to copyright in this Software and any associated +documentation will at all times remain with copyright holders. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/Build/source/utils/t1utils/t1utils-src/Makefile.am b/Build/source/utils/t1utils/t1utils-src/Makefile.am new file mode 100644 index 00000000000..b2c51eaf93b --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/Makefile.am @@ -0,0 +1,28 @@ +## Process this file with automake to produce Makefile.in +AUTOMAKE_OPTIONS = foreign + +bin_PROGRAMS = t1ascii t1binary t1asm t1disasm t1unmac t1mac +man_MANS = t1ascii.1 t1binary.1 t1asm.1 t1disasm.1 t1unmac.1 t1mac.1 + +t1ascii_SOURCES = include/lcdf/clp.h include/lcdf/inttypes.h \ + clp.c t1lib.h t1lib.c t1ascii.c +t1binary_SOURCES = include/lcdf/clp.h include/lcdf/inttypes.h \ + clp.c t1lib.h t1lib.c t1binary.c +t1asm_SOURCES = include/lcdf/clp.h include/lcdf/inttypes.h \ + clp.c t1lib.h t1asmhelp.h t1lib.c t1asm.c +t1disasm_SOURCES = include/lcdf/clp.h include/lcdf/inttypes.h \ + clp.c t1lib.h t1asmhelp.h t1lib.c t1disasm.c +t1unmac_SOURCES = include/lcdf/clp.h include/lcdf/inttypes.h \ + clp.c t1lib.h t1lib.c t1unmac.c +t1mac_SOURCES = include/lcdf/clp.h include/lcdf/inttypes.h \ + clp.c t1lib.h t1lib.c t1mac.c + +AM_CPPFLAGS = -I$(top_srcdir)/include +LDADD = @LIBOBJS@ + +EXTRA_DIST = $(man_MANS) INSTALL LICENSE README.md NEWS.md + +versionize: + perl -pi -e "s/^\\.ds V.*/.ds V $(VERSION)/;" t1ascii.1 t1binary.1 t1disasm.1 t1asm.1 t1unmac.1 t1mac.1 + +.PHONY: srclinks versionize diff --git a/Build/source/utils/t1utils/t1utils-src/NEWS.md b/Build/source/utils/t1utils/t1utils-src/NEWS.md new file mode 100644 index 00000000000..18881bddb00 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/NEWS.md @@ -0,0 +1,339 @@ +T1utils NEWS +============ + +## Version 1.42 – 27.Oct.2020 + +* Compile fixes for OSes that do not declare a function. + + +## Version 1.41 – 16.Aug.2017 + +* t1asm, t1disasm: More security fixes. + + +## Version 1.40 – 23.Jul.2017 + +* t1disasm: More security fixes reported by Jakub Wilk and Niels Thykier. + + +## Version 1.39 – 26.Feb.2015 + +* t1disasm: Security fixes for buffer overrun reported by Jakub Wilk + and Niels Thykier. + + +## Version 1.38 – 29.Sep.2013 + +* t1disasm: Fix an infinite loop on some fonts reported by Niels + Thykier. + + +## Version 1.37 – 29.Jun.2011 + +* t1asm: Use a dynamically allocated buffer to handle huge characters + (reported by Werner Lemberg). + + +## Version 1.36 – 29.May.2010 + +* Several minor cleanups. + + +## Version 1.35 – 22.Oct.2009 + +* Don't use "getline" as a symbol (reported by Karl Berry and + C.M. Connelly). + + +## Version 1.34 – 1.Mar.2008 + +* Add `--enable-multiplatform` (requested by Karl Berry). + + +## Version 1.33 – 8.Jan.2008 + +* Several minor cleanups. + + +## Version 1.32 – 23.Feb.2004 + +* t1disasm: Avoid memory corruption bug (strings passed to `eexec_line` are + not null terminated). Reported by Werner Lemberg. + + +## Version 1.31 – 8.Feb.2004 + +* All: Support fonts where the eexec-encrypted portion is binary, and the + first ciphertext byte is 0. Reported by Werner Lemberg. + + +## Version 1.30 – 6.Jan.2004 + +* All: Support fonts, such as those in PostScript files printed by + acroread, where `currentfile eexec` is not followed by a newline. + + +## Version 1.29 – 6.Oct.2003 + +* t1disasm: Support odd fonts where a character is defined on the + "/CharStrings" line. Reported by Werner Lemberg. + + +## Version 1.28 – 7.Aug.2003 + +* Address build problems reported by Nelson H.F. Beebe. + + +## Version 1.27 – 26.Mar.2003 + +* t1ascii: Add optional warning when output lines are longer than 255 + characters. Requested by Werner Lemberg . + + +## Version 1.26 – 16.Apr.2002 + +* t1mac: Fix buglet (C++ comment, and temporary file left behind). Reported + by Vladimir Volovich . + + +## Version 1.25 – 3.Jan.2002 + +* t1asm: Beware extra characters after `currentfile closefile`. Reported by + Luc Devroye . + + +## Version 1.24 – 6.Sep.2001 + +* Fixed compilation bugs on various platforms reported by Nelson H. F. + Beebe . + + +## Version 1.23 – 18.Jun.2001 + +* Fixed Macintosh file bugs: the MacBinary CRC was calculated incorrectly, + and extended finder flags were set to random values in BinHex output. + Reported, and patch provided, by Tom Kacvinsky . + + +## Version 1.22 – 6.Mar.2001 + +* Fixed bug on processing PFA fonts with DOS line endings. The symptom was + t1binary producing strange/unusable fonts. Problem: the all-zeros line, + which signals the end of the font's binary section, was not being + recognized because of an extra `\r`. This has been a bug since version + 1.13 -- chagrin! Problem reported by Han The Thanh + . + + +## Version 1.21 – 9.Feb.2001 + +* t1ascii, t1asm, t1unmac: Raised minimum PFA line length to 8. The Adobe + spec may imply that there cannot be whitespace within the first 8 bytes + of an ASCII-encoded eexec section; it's somewhat ambiguous. Reported by + Rainer Menzner . + + +## Version 1.20 – 22.Jun.2000 + +* t1asm: Fixed bug where `t1asm -a` would give a “warning: line length + raised to 4” error message. Reported by Tom Kacvinsky . + + +## Version 1.19 – 3.May.2000 + +* t1mac: Generated Macintosh fonts now use a custom-drawn icon set, rather + than Adobe's default. They also have a t1utils-specific creator signature + (T1UT), and their file information mentions t1utils. + +* t1mac: Added the `--filename` option. + + +## Version 1.18 – 2.May.2000 + +* t1mac: Fixed bug where generated files appeared corrupted to Macintoshes. + Reported by Marten Thavenius . + + +## Version 1.17 – 27.Apr.2000 + +* Added new program, `t1mac`, which translates PFA or PFB fonts into + Macintosh-style fonts. T1mac can output in MacBinary, AppleSingle, + AppleDouble, or BinHex format. Suggested by Marten Thavenius + . + +* t1unmac: Added support for BinHex. + +* t1unmac: Fixed bugs in manual page and program options. + + +## Version 1.16 – 25.Apr.2000 + +* t1unmac: Supports AppleSingle and AppleDouble files with the + `--applesingle/double` option. Requested by Kent Boortz + . + + +## Version 1.15 – 4.Apr.2000 + +* t1ascii, t1binary, and t1disasm: Fixed bad error message. + +* t1unmac: Generates PFB fonts by default. + + +## Version 1.14 – 25.Aug.1999 + +* t1asm: Version 1.13 produced complete crap output. My test cases were too + limited to catch this. Found by Rainer Menzner + . + + +## Version 1.13 – 2.Aug.1999 + +* t1disasm: Complete rewrite. It now uses t1lib.c functions; the goal is to + handle PFA and PFB fonts consistently. This has been extensively tested, + but there may be bugs. + +* t1disasm, t1asm: Fixed to support fonts with multiple Subrs and + CharStrings sections, like some old Oblique fonts. + +* PFA minimum line length raised to 4. + +* t1ascii, t1binary, t1disasm: Changes in t1lib.c to support reading binary + PFA fonts. Requested by Tom Kacvinsky . + + +## Version 1.12 – 1.Aug.1999 + +* t1ascii, t1binary, t1asm, t1disasm: Support fonts with whitespace + following the `currentfile eexec` line. Embedded fonts in PostScript + generated by Acrobat Reader have this property. Reported by Tom Kacvinsky + . + +* t1ascii, t1asm, t1unmac: Use lowercase hex digits instead of uppercase. + +* t1unmac: Added `--line-length` option for PFA output. + + +## Version 1.11 – 29.May.1999 + +* Bug fix in t1asm/t1disasm: if a `readhexstring` procedure was defined, we + got confused. Reported by Luc Devroye . + +* t1binary now has a maximum block length of 2^32 - 1. "Feature" requested + by Werner Lemberg . + +* t1ascii and t1binary each accept both PFA and PFB fonts. If you pass an + ASCII font (PFA) to t1ascii, it will output it mostly unchanged, and + similarly for PFB fonts and t1binary. The `-l` options will still take + effect, so you can use `t1ascii -l 60` to shorten the encrypted line + lengths of a PFA font. t1ascii also does some newline translation + (changes carriage returns to newlines). + + +## Version 1.10.1 – 12.Apr.1999 + +* t1asm: Fixed bug when `-l` option wasn't provided. Caught by Giuseppe + Ghibò . + + +## Version 1.10 – 11.Apr.1999 + +* t1asm/t1disasm: Provide support for Type1C (Compact Font Format) font + files. These fonts have unencrypted character strings, signalled by a + negative lenIV value. Suggestion and patch thanks to Tom Kacvinsky + . + +* t1ascii/t1asm: Added `-l/--line-length` option to control maximum encrypted + line length. Suggestion thanks to Giuseppe Ghibò . + + +## Version 1.9 – 14.Feb.1999 + +* t1asm/t1disasm: Be more robust on fonts that don't end in `mark + currentfile closefile`. John Vromans provided a + font that ended with `mark` on one line and `currentfile closefile` on + another; t1asm and t1disasm did not recognize the encrypted section of + the font had ended, and generated some garbage. + + +## Version 1.8 – 2.Jan.1999 + +* Added some more Type 2 commands (flex, flex1, hflex, hflex1) from a + revision of the Type 2 spec. (I wouldn't have known about this except for + CurveSoft's revised t1utils package, available at + http://www.curvesoft.com. These t1utils are more up-to-date than theirs, + however.) + +* t1asm: Fixed one Type 2 command's translation (cntrmask was incorrectly + mapped to 18, not 20). + + +## Version 1.7.2 – 11.Dec.1998 + +* Integrated patches from Jan-Jaap van der Heijden + to support building t1utils under + 32-bit Windows. + + +## Version 1.7.1 – 5.Dec.1998 + +* The t1utils package now uses automake. + + +## Version 1.7 – 27.Nov.1998 + +* t1asm: Should now work with fonts that have no /Subrs sections. Previously, + assembling such a font would silently fail; all the character definitions + would be mistaken for procedures and t1asm wouldn't translate them. Problem + noticed and fix suggested by Tom Kacvinsky . + +* t1disasm: Removed spurious debugging output and improved warning message + about unknown charstring commands. + +* Changed fgetc/fputc into getc/putc. + + +## Version 1.6 – 27.Sep.1998 + +* `--help` now prints to stdout, following the GNU Coding Standards. + +* Makefiles: Added `make uninstall` target, enabled `./configure`'s + program name transformations, made VPATH builds possible. + + +## Version 1.5.2 – 6.Aug.1998 + +* t1asm/t1disasm: Changed unknown charstring commands at the request of + Werner Lemberg and LEE Chun-Yu. An unknown escape in the charstring, like + 12 X, is translated to "escape_X" rather than "UNKNOWN_12_X". + + +## Version 1.5.1 – 31.May.1998 + +* t1unmac did not actually understand the `-r` and `-b` options. Fixed. + +* t1unmac: Added better diagnostics to help you diagnose seeking problems. + + +## Version 1.5 – 5.Mar.1998 + +* Initial release with Eddie Kohler as maintainer. + +* All: Updated to the GNU program behavior standards (long options, `--help`, + `--version`). Banners removed. Added more error messages. + +* t1binary: Removed fixed limit on line length. + +* t1binary: Supports Macintosh files, whose lines end in `\r`. + +* t1binary: Supports an odd number of hex digits in a line. + +* t1asm/t1disasm: Added support for Type 2 commands like `blend` and `add`, + which also appear in some multiple master fonts like Adobe Jenson. + +* t1asm/t1disasm: Added support for unknown charstring commands. t1disasm + translates an unknown command #X to "UNKNOWN_X", and t1asm does the reverse. + +* t1asm/t1unmac: Changed default output to PFB. + +* t1unmac: Used to be called `unpost`. `t1unmac` is a much better name. diff --git a/Build/source/utils/t1utils/t1utils-src/README.md b/Build/source/utils/t1utils/t1utils-src/README.md new file mode 100644 index 00000000000..4e8715c72bb --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/README.md @@ -0,0 +1,61 @@ +T1utils +======= + +T1utils is a collection of simple programs for manipulating PostScript Type 1 +fonts. Together, they allow you to convert between PFA (ASCII) and PFB +(binary) formats, disassemble PFA or PFB files into human-readable form, and +reassemble them into PFA or PFB format. Additionally you can extract font +resources from a Macintosh font file or create a Macintosh Type 1 font file +from a PFA or PFB font. + +There are currently six programs: + +* **t1ascii**: Converts PFB files to PFA format. + +* **t1binary**: Converts PFA files to PFB format. + +* **t1disasm**: Disassembles a Type 1 font (PFA or PFB format) into a + raw, human-readable text form for subsequent hand editing, tweaking, hint + fixing, and so forth. + +* **t1asm**: Assembles the human-readable t1disasm text form into a Type 1 + font in PFA or PFB format. + +* **t1unmac**: Extracts POST resources from a Macintosh Type 1 font file into + PFA or PFB format for use outside the Macintosh environment. The Macintosh + file should be stored in MacBinary, AppleSingle, AppleDouble, or BinHex + format, or as a raw resource fork. Note that t1unmac does not have to run on + a Macintosh. + +* **t1mac**: Creates a Macintosh Type 1 file from a PFA or PFB-format Type 1 + font. Writes the Macintosh file in MacBinary, AppleSingle, AppleDouble, or + BinHex format, or as a raw resource fork. WARNING: This will not suffice to + use the new font on a Macintosh, as Macintoshes cannot read raw Type 1 + fonts. You will need to create a font suitcase containing bitmap fonts if + you do not have such a suitcase for the font already. T1utils cannot help + you do this. + +Installation +------------ + +You need an ANSI C compiler, such as gcc. + +Just type `./configure`, then `make`. `make install` will build and install +the utilities and their manual pages. + +`./configure` accepts the usual options. See `INSTALL` for more details. The +most commonly used option is `--prefix`, which can be used to install the +utilities in a place other than /usr/local. + +Copyright and license +--------------------- + +The original t1utils were (c) 1992 I. Lee Hetherington, . +Changes since version 1.2 are (c) 1998-2017 Eddie Kohler. Distribution is +under the Click LICENSE, a BSD-like license described in the LICENSE file in +this directory. + +Note that these tools should not be used to illegally copy Type 1 font +programs. Typeface design is an intricate art that should be rewarded. + +Eddie Kohler, ekohler@gmail.com diff --git a/Build/source/utils/t1utils/t1utils-src/clp.c b/Build/source/utils/t1utils/t1utils-src/clp.c new file mode 100644 index 00000000000..baf8dc5702e --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/clp.c @@ -0,0 +1,2503 @@ +/* -*- related-file-name: "../include/lcdf/clp.h" -*- */ +/* clp.c - Complete source code for CLP. + * This file is part of CLP, the command line parser package. + * + * Copyright (c) 1997-2014 Eddie Kohler, ekohler@gmail.com + * + * CLP is free software. It is distributed under the GNU General Public + * License, Version 2, or, alternatively and at your discretion, under the + * more permissive (BSD-like) Click LICENSE file as described below. + * + * 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, subject to the + * conditions listed in the Click LICENSE file, which is available in full at + * http://github.com/kohler/click/blob/master/LICENSE. The conditions + * include: you must preserve this copyright notice, and you cannot mention + * the copyright holders in advertising related to the Software without + * their permission. The Software is provided WITHOUT ANY WARRANTY, EXPRESS + * OR IMPLIED. This notice is a summary of the Click LICENSE file; the + * license in that file is binding. */ + +#ifdef HAVE_CONFIG_H +# include +#endif +#include +#include +#include +#include +#include +#include +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_INTTYPES_H || !defined(HAVE_CONFIG_H) +# include +#endif + +/* By default, assume we have inttypes.h, strtoul, and uintptr_t. */ +#if !HAVE_STRTOUL && !defined(HAVE_CONFIG_H) +# define HAVE_STRTOUL 1 +#endif +#if !HAVE_UINTPTR_T && !HAVE_INTTYPES_H && defined(HAVE_CONFIG_H) +typedef unsigned long uintptr_t; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/** @file clp.h + * @brief Functions for parsing command line options. + * + * The CLP functions are used to parse command line arguments into options. + * It automatically handles value parsing, error messages, long options with + * minimum prefix matching, short options, and negated options. + * + * The CLP model works like this. + * + *
    + *
  1. The user declares an array of Clp_Option structures that define the + * options their program accepts.
  2. + *
  3. The user creates a Clp_Parser object using Clp_NewParser(), passing in + * the command line arguments to parse and the Clp_Option structures.
  4. + *
  5. A loop repeatedly calls Clp_Next() to parse the arguments.
  6. + *
+ * + * Unlike many command line parsing libraries, CLP steps through all arguments + * one at a time, rather than slurping up all options at once. This makes it + * meaningful to give an option more than once. + * + * Here's an example. + * + * @code + * #define ANIMAL_OPT 1 + * #define VEGETABLE_OPT 2 + * #define MINERALS_OPT 3 + * #define USAGE_OPT 4 + * + * static const Clp_Option options[] = { + * { "animal", 'a', ANIMAL_OPT, Clp_ValString, 0 }, + * { "vegetable", 'v', VEGETABLE_OPT, Clp_ValString, Clp_Negate | Clp_Optional }, + * { "minerals", 'm', MINERALS_OPT, Clp_ValInt, 0 }, + * { "usage", 0, USAGE_OPT, 0, 0 } + * }; + * + * int main(int argc, char *argv[]) { + * Clp_Parser *clp = Clp_NewParser(argc, argv, + * sizeof(options) / sizeof(options[0]), options); + * int opt; + * while ((opt = Clp_Next(clp)) != Clp_Done) + * switch (opt) { + * case ANIMAL_OPT: + * fprintf(stderr, "animal is %s\n", clp->val.s); + * break; + * case VEGETABLE_OPT: + * if (clp->negated) + * fprintf(stderr, "no vegetables!\n"); + * else if (clp->have_val) + * fprintf(stderr, "vegetable is %s\n", clp->val.s); + * else + * fprintf(stderr, "vegetables OK\n"); + * break; + * case MINERALS_OPT: + * fprintf(stderr, "%d minerals\n", clp->val.i); + * break; + * case USAGE_OPT: + * fprintf(stderr, "Usage: 20q [--animal=ANIMAL] [--vegetable[=VEGETABLE]] [--minerals=N]\n"); + * break; + * case Clp_NotOption: + * fprintf(stderr, "non-option %s\n", clp->vstr); + * break; + * } + * } + * } + * @endcode + * + * Here are a couple of executions. + * + *
+ * % ./20q --animal=cat
+ * animal is cat
+ * % ./20q --animal=cat -a dog -afish --animal bird --an=snake
+ * animal is cat
+ * animal is dog
+ * animal is fish
+ * animal is bird
+ * animal is snake
+ * % ./20q --no-vegetables
+ * no vegetables!
+ * % ./20q -v
+ * vegetables OK
+ * % ./20q -vkale
+ * vegetable is kale
+ * % ./20q -m10
+ * 10 minerals
+ * % ./20q -m foo
+ * '-m' expects an integer, not 'foo'
+ * 
+ */ + + +/* Option types for Clp_SetOptionChar */ +#define Clp_DoubledLong (Clp_LongImplicit * 2) + +#define Clp_InitialValType 8 +#define MAX_AMBIGUOUS_VALUES 4 + +typedef struct { + int val_type; + Clp_ValParseFunc func; + int flags; + void *user_data; +} Clp_ValType; + +typedef struct { + unsigned ilong : 1; + unsigned ishort : 1; + unsigned imandatory : 1; + unsigned ioptional : 1; + unsigned ipos : 1; + unsigned ineg : 1; + unsigned iprefmatch : 1; + unsigned lmmpos_short : 1; + unsigned lmmneg_short : 1; + unsigned char ilongoff; + int lmmpos; + int lmmneg; +} Clp_InternOption; + + +#define Clp_OptionCharsSize 5 + +typedef struct { + int c; + int type; +} Clp_Oclass; +#define Clp_OclassSize 10 + +typedef struct Clp_Internal { + const Clp_Option *opt; + Clp_InternOption *iopt; + int nopt; + unsigned opt_generation; + + Clp_ValType *valtype; + int nvaltype; + + const char * const *argv; + int argc; + + Clp_Oclass oclass[Clp_OclassSize]; + int noclass; + int long1pos; + int long1neg; + int utf8; + + char option_chars[Clp_OptionCharsSize]; + const char *xtext; + + const char *program_name; + void (*error_handler)(Clp_Parser *, const char *); + + int option_processing; + int current_option; + + unsigned char is_short; + unsigned char whole_negated; /* true if negated by an option character */ + unsigned char could_be_short; + unsigned char current_short; + unsigned char negated_by_no; + + int ambiguous; + int ambiguous_values[MAX_AMBIGUOUS_VALUES]; +} Clp_Internal; + + +struct Clp_ParserState { + const char * const *argv; + int argc; + + char option_chars[Clp_OptionCharsSize]; + const char *xtext; + + int option_processing; + + unsigned opt_generation; + int current_option; + unsigned char is_short; + unsigned char whole_negated; + unsigned char current_short; + unsigned char negated_by_no; +}; + + +typedef struct Clp_StringList { + Clp_Option *items; + Clp_InternOption *iopt; + int nitems; + + unsigned char allow_int; + unsigned char val_long; + int nitems_invalid_report; +} Clp_StringList; + + +static const Clp_Option clp_option_sentinel[] = { + {"", 0, Clp_NotOption, 0, 0}, + {"", 0, Clp_Done, 0, 0}, + {"", 0, Clp_BadOption, 0, 0}, + {"", 0, Clp_Error, 0, 0} +}; + + +static int parse_string(Clp_Parser *, const char *, int, void *); +static int parse_int(Clp_Parser *, const char *, int, void *); +static int parse_bool(Clp_Parser *, const char *, int, void *); +static int parse_double(Clp_Parser *, const char *, int, void *); +static int parse_string_list(Clp_Parser *, const char *, int, void *); + +static int ambiguity_error(Clp_Parser *, int, int *, const Clp_Option *, + const Clp_InternOption *, const char *, const char *, + ...); + + +/******* + * utf8 + **/ + +#define U_REPLACEMENT 0xFFFD + +static char * +encode_utf8(char *s, int n, int c) +{ + if (c < 0 || c >= 0x110000 || (c >= 0xD800 && c <= 0xDFFF)) + c = U_REPLACEMENT; + if (c <= 0x7F && n >= 1) + *s++ = c; + else if (c <= 0x7FF && n >= 2) { + *s++ = 0xC0 | (c >> 6); + goto char1; + } else if (c <= 0xFFFF && n >= 3) { + *s++ = 0xE0 | (c >> 12); + goto char2; + } else if (n >= 4) { + *s++ = 0xF0 | (c >> 18); + *s++ = 0x80 | ((c >> 12) & 0x3F); + char2: + *s++ = 0x80 | ((c >> 6) & 0x3F); + char1: + *s++ = 0x80 | (c & 0x3F); + } + return s; +} + +static int +decode_utf8(const char *s, const char **cp) +{ + int c; + if ((unsigned char) *s <= 0x7F) /* 1 byte: 0x000000-0x00007F */ + c = *s++; + else if ((unsigned char) *s <= 0xC1) /* bad/overlong encoding */ + goto replacement; + else if ((unsigned char) *s <= 0xDF) { /* 2 bytes: 0x000080-0x0007FF */ + if ((s[1] & 0xC0) != 0x80) /* bad encoding */ + goto replacement; + c = (*s++ & 0x1F) << 6; + goto char1; + } else if ((unsigned char) *s <= 0xEF) { /* 3 bytes: 0x000800-0x00FFFF */ + if ((s[1] & 0xC0) != 0x80 /* bad encoding */ + || (s[2] & 0xC0) != 0x80 /* bad encoding */ + || ((unsigned char) *s == 0xE0 /* overlong encoding */ + && (s[1] & 0xE0) == 0x80) + || ((unsigned char) *s == 0xED /* encoded surrogate */ + && (s[1] & 0xE0) == 0xA0)) + goto replacement; + c = (*s++ & 0x0F) << 12; + goto char2; + } else if ((unsigned char) *s <= 0xF4) { /* 4 bytes: 0x010000-0x10FFFF */ + if ((s[1] & 0xC0) != 0x80 /* bad encoding */ + || (s[2] & 0xC0) != 0x80 /* bad encoding */ + || (s[3] & 0xC0) != 0x80 /* bad encoding */ + || ((unsigned char) *s == 0xF0 /* overlong encoding */ + && (s[1] & 0xF0) == 0x80) + || ((unsigned char) *s == 0xF4 /* encoded value > 0x10FFFF */ + && (unsigned char) s[1] >= 0x90)) + goto replacement; + c = (*s++ & 0x07) << 18; + c += (*s++ & 0x3F) << 12; + char2: + c += (*s++ & 0x3F) << 6; + char1: + c += (*s++ & 0x3F); + } else { + replacement: + c = U_REPLACEMENT; + for (s++; (*s & 0xC0) == 0x80; s++) + /* nothing */; + } + if (cp) + *cp = s; + return c; +} + +static int +utf8_charlen(const char *s) +{ + const char *sout; + (void) decode_utf8(s, &sout); + return sout - s; +} + +static int +clp_utf8_charlen(const Clp_Internal *cli, const char *s) +{ + return (cli->utf8 ? utf8_charlen(s) : 1); +} + + +/******* + * Clp_NewParser, etc. + **/ + +static int +min_different_chars(const char *s, const char *t) + /* Returns the minimum number of bytes required to distinguish + s from t. + If s is shorter than t, returns strlen(s). */ +{ + const char *sfirst = s; + while (*s && *t && *s == *t) + s++, t++; + if (!*s) + return s - sfirst; + else + return s - sfirst + 1; +} + +static int +long_as_short(const Clp_Internal *cli, const Clp_Option *o, + Clp_InternOption *io, int failure) +{ + if ((cli->long1pos || cli->long1neg) && io->ilong) { + const char *name = o->long_name + io->ilongoff; + if (cli->utf8) { + int c = decode_utf8(name, &name); + if (!*name && c && c != U_REPLACEMENT) + return c; + } else if (name[0] && !name[1]) + return (unsigned char) name[0]; + } + return failure; +} + +static void +compare_options(Clp_Parser *clp, const Clp_Option *o1, Clp_InternOption *io1, + const Clp_Option *o2, Clp_InternOption *io2) +{ + Clp_Internal *cli = clp->internal; + int short1, shortx1; + + /* ignore meaningless combinations */ + if ((!io1->ishort && !io1->ilong) || (!io2->ishort && !io2->ilong) + || !((io1->ipos && io2->ipos) || (io1->ineg && io2->ineg)) + || o1->option_id == o2->option_id) + return; + + /* look for duplication of short options */ + short1 = (io1->ishort ? o1->short_name : -1); + shortx1 = long_as_short(cli, o1, io1, -2); + if (short1 >= 0 || shortx1 >= 0) { + int short2 = (io2->ishort ? o2->short_name : -3); + int shortx2 = long_as_short(cli, o2, io2, -4); + if (short1 == short2) + Clp_OptionError(clp, "CLP internal error: more than 1 option has short name %<%c%>", short1); + else if ((short1 == shortx2 || shortx1 == short2 || shortx1 == shortx2) + && ((io1->ipos && io2->ipos && cli->long1pos) + || (io1->ineg && io2->ineg && cli->long1neg))) + Clp_OptionError(clp, "CLP internal error: 1-char long name conflicts with short name %<%c%>", (short1 == shortx2 ? shortx2 : shortx1)); + } + + /* analyze longest minimum match */ + if (io1->ilong) { + const char *name1 = o1->long_name + io1->ilongoff; + + /* long name's first character matches short name */ + if (io2->ishort && !io1->iprefmatch) { + int name1char = (cli->utf8 ? decode_utf8(name1, 0) : (unsigned char) *name1); + if (name1char == o2->short_name) { + if (io1->ipos && io2->ipos) + io1->lmmpos_short = 1; + if (io1->ineg && io2->ineg) + io1->lmmneg_short = 1; + } + } + + /* match long name to long name */ + if (io2->ilong) { + const char *name2 = o2->long_name + io2->ilongoff; + if (strcmp(name1, name2) == 0) + Clp_OptionError(clp, "CLP internal error: duplicate long name %<%s%>", name1); + if (io1->ipos && io2->ipos && !strncmp(name1, name2, io1->lmmpos) + && (!io1->iprefmatch || strncmp(name1, name2, strlen(name1)))) + io1->lmmpos = min_different_chars(name1, name2); + if (io1->ineg && io2->ineg && !strncmp(name1, name2, io1->lmmneg) + && (!io1->iprefmatch || strncmp(name1, name2, strlen(name1)))) + io1->lmmneg = min_different_chars(name1, name2); + } + } +} + +static void +calculate_lmm(Clp_Parser *clp, const Clp_Option *opt, Clp_InternOption *iopt, int nopt) +{ + int i, j; + for (i = 0; i < nopt; ++i) { + iopt[i].lmmpos = iopt[i].lmmneg = 1; + iopt[i].lmmpos_short = iopt[i].lmmneg_short = 0; + for (j = 0; j < nopt; ++j) + compare_options(clp, &opt[i], &iopt[i], &opt[j], &iopt[j]); + } +} + +/** @param argc number of arguments + * @param argv argument array + * @param nopt number of option definitions + * @param opt option definition array + * @return the parser + * + * The new Clp_Parser that will parse the arguments in @a argv according to + * the option definitions in @a opt. + * + * The Clp_Parser is created with the following characteristics: + * + *
    + *
  • The "-" character introduces short options (Clp_SetOptionChar(clp, + * '-', Clp_Short)).
  • + *
  • Clp_ProgramName is set from the first argument in @a argv, if any. The + * first argument returned by Clp_Next() will be the second argument in @a + * argv. Note that this behavior differs from Clp_SetArguments.
  • + *
  • UTF-8 support is on iff the LANG environment variable contains + * one of the substrings "UTF-8", "UTF8", or "utf8". Override this with + * Clp_SetUTF8().
  • + *
  • The Clp_ValString, Clp_ValStringNotOption, Clp_ValInt, Clp_ValUnsigned, + * Clp_ValLong, Clp_ValUnsignedLong, Clp_ValBool, and Clp_ValDouble types are + * installed.
  • + *
  • Errors are reported to standard error.
  • + *
+ * + * You may also create a Clp_Parser with no arguments or options + * (Clp_NewParser(0, 0, 0, 0)) and set the arguments and options + * later. + * + * Returns NULL if there isn't enough memory to construct the parser. + * + * @note The CLP library will not modify the contents of @a argv or @a opt. + * The calling program must not modify @a opt. It may modify @a argv in + * limited cases. + */ +Clp_Parser * +Clp_NewParser(int argc, const char * const *argv, int nopt, const Clp_Option *opt) +{ + Clp_Parser *clp = (Clp_Parser *)malloc(sizeof(Clp_Parser)); + Clp_Internal *cli = (Clp_Internal *)malloc(sizeof(Clp_Internal)); + Clp_InternOption *iopt = (Clp_InternOption *)malloc(sizeof(Clp_InternOption) * nopt); + if (cli) + cli->valtype = (Clp_ValType *)malloc(sizeof(Clp_ValType) * Clp_InitialValType); + if (!clp || !cli || !iopt || !cli->valtype) + goto failed; + + clp->option = &clp_option_sentinel[-Clp_Done]; + clp->negated = 0; + clp->have_val = 0; + clp->vstr = 0; + clp->user_data = 0; + clp->internal = cli; + + cli->opt = opt; + cli->nopt = nopt; + cli->iopt = iopt; + cli->opt_generation = 0; + cli->error_handler = 0; + + /* Assign program name (now so we can call Clp_OptionError) */ + if (argc > 0) { + const char *slash = strrchr(argv[0], '/'); + cli->program_name = slash ? slash + 1 : argv[0]; + } else + cli->program_name = 0; + + /* Assign arguments, skipping program name */ + Clp_SetArguments(clp, argc - 1, argv + 1); + + /* Initialize UTF-8 status and option classes */ + { + char *s = getenv("LANG"); + cli->utf8 = (s && (strstr(s, "UTF-8") != 0 || strstr(s, "UTF8") != 0 + || strstr(s, "utf8") != 0)); + } + cli->oclass[0].c = '-'; + cli->oclass[0].type = Clp_Short; + cli->noclass = 1; + cli->long1pos = cli->long1neg = 0; + + /* Add default type parsers */ + cli->nvaltype = 0; + Clp_AddType(clp, Clp_ValString, 0, parse_string, 0); + Clp_AddType(clp, Clp_ValStringNotOption, Clp_DisallowOptions, parse_string, 0); + Clp_AddType(clp, Clp_ValInt, 0, parse_int, (void*) (uintptr_t) 0); + Clp_AddType(clp, Clp_ValUnsigned, 0, parse_int, (void*) (uintptr_t) 1); + Clp_AddType(clp, Clp_ValLong, 0, parse_int, (void*) (uintptr_t) 2); + Clp_AddType(clp, Clp_ValUnsignedLong, 0, parse_int, (void*) (uintptr_t) 3); + Clp_AddType(clp, Clp_ValBool, 0, parse_bool, 0); + Clp_AddType(clp, Clp_ValDouble, 0, parse_double, 0); + + /* Set options */ + Clp_SetOptions(clp, nopt, opt); + + return clp; + + failed: + if (cli && cli->valtype) + free(cli->valtype); + if (cli) + free(cli); + if (clp) + free(clp); + if (iopt) + free(iopt); + return 0; +} + +/** @param clp the parser + * + * All memory associated with @a clp is freed. */ +void +Clp_DeleteParser(Clp_Parser *clp) +{ + int i; + Clp_Internal *cli; + if (!clp) + return; + + cli = clp->internal; + + /* get rid of any string list types */ + for (i = 0; i < cli->nvaltype; i++) + if (cli->valtype[i].func == parse_string_list) { + Clp_StringList *clsl = (Clp_StringList *)cli->valtype[i].user_data; + free(clsl->items); + free(clsl->iopt); + free(clsl); + } + + free(cli->valtype); + free(cli->iopt); + free(cli); + free(clp); +} + + +/** @param clp the parser + * @param errh error handler function + * @return previous error handler function + * + * The error handler function is called when CLP encounters an error while + * parsing the command line. It is called with the arguments "(*errh)(@a + * clp, s)", where s is a description of the error terminated by + * a newline. The s descriptions produced by CLP itself are prefixed + * by the program name, if any. */ +Clp_ErrorHandler +Clp_SetErrorHandler(Clp_Parser *clp, void (*errh)(Clp_Parser *, const char *)) +{ + Clp_Internal *cli = clp->internal; + Clp_ErrorHandler old = cli->error_handler; + cli->error_handler = errh; + return old; +} + +/** @param clp the parser + * @param utf8 does the parser support UTF-8? + * @return previous UTF-8 mode + * + * In UTF-8 mode, all input strings (arguments and long names for options) are + * assumed to be encoded via UTF-8, and all character names + * (Clp_SetOptionChar() and short names for options) may cover the whole + * Unicode range. Out of UTF-8 mode, all input strings are treated as binary, + * and all character names must be unsigned char values. + * + * Furthermore, error messages in UTF-8 mode may contain Unicode quote + * characters. */ +int +Clp_SetUTF8(Clp_Parser *clp, int utf8) +{ + Clp_Internal *cli = clp->internal; + int old_utf8 = cli->utf8; + cli->utf8 = utf8; + calculate_lmm(clp, cli->opt, cli->iopt, cli->nopt); + return old_utf8; +} + +/** @param clp the parser + * @param c character + * @return option character treatment + * + * Returns an integer specifying how CLP treats arguments that begin + * with character @a c. See Clp_SetOptionChar for possibilities. + */ +int +Clp_OptionChar(Clp_Parser *clp, int c) +{ + Clp_Internal *cli = clp->internal; + int i, oclass = 0; + if (cli->noclass > 0 && cli->oclass[0].c == 0) + oclass = cli->oclass[0].type; + for (i = 0; i < cli->noclass; ++i) + if (cli->oclass[i].c == c) + oclass = cli->oclass[i].type; + return oclass; +} + +/** @param clp the parser + * @param c character + * @param type option character treatment + * @return previous option character treatment, or -1 on error + * + * @a type specifies how CLP treats arguments that begin with character @a c. + * Possibilities are: + * + *
+ *
Clp_NotOption (or 0)
+ *
The argument cannot be an option.
+ *
Clp_Long
+ *
The argument is a long option.
+ *
Clp_Short
+ *
The argument is a set of short options.
+ *
Clp_Short|Clp_Long
+ *
The argument is either a long option or, if no matching long option is + * found, a set of short options.
+ *
Clp_LongNegated
+ *
The argument is a negated long option. For example, after + * Clp_SetOptionChar(@a clp, '^', Clp_LongNegated), the argument "^foo" is + * equivalent to "--no-foo".
+ *
Clp_ShortNegated
+ *
The argument is a set of negated short options.
+ *
Clp_ShortNegated|Clp_LongNegated
+ *
The argument is either a negated long option or, if no matching long + * option is found, a set of negated short options.
+ *
Clp_LongImplicit
+ *
The argument may be a long option, where the character @a c is actually + * part of the long option name. For example, after Clp_SetOptionChar(@a clp, + * 'f', Clp_LongImplicit), the argument "foo" may be equivalent to + * "--foo".
+ *
+ * + * In UTF-8 mode, @a c may be any Unicode character. Otherwise, @a c must be + * an unsigned char value. The special character 0 assigns @a type to @em + * every character. + * + * It is an error if @a c is out of range, @a type is illegal, or there are + * too many character definitions stored in @a clp already. The function + * returns -1 on error. + * + * A double hyphen "--" always introduces a long option. This behavior cannot + * currently be changed with Clp_SetOptionChar(). + */ +int +Clp_SetOptionChar(Clp_Parser *clp, int c, int type) +{ + int i, long1pos, long1neg; + int old = Clp_OptionChar(clp, c); + Clp_Internal *cli = clp->internal; + + if (type != Clp_NotOption && type != Clp_Short && type != Clp_Long + && type != Clp_ShortNegated && type != Clp_LongNegated + && type != Clp_LongImplicit && type != (Clp_Short | Clp_Long) + && type != (Clp_ShortNegated | Clp_LongNegated)) + return -1; + if (c < 0 || c >= (cli->utf8 ? 0x110000 : 256)) + return -1; + + if (c == 0) + cli->noclass = 0; + for (i = 0; i < cli->noclass; ++i) + if (cli->oclass[i].c == c) + break; + if (i == Clp_OclassSize) + return -1; + + cli->oclass[i].c = c; + cli->oclass[i].type = type; + if (cli->noclass == i) + cli->noclass = i + 1; + + long1pos = long1neg = 0; + for (i = 0; i < cli->noclass; ++i) { + if ((cli->oclass[i].type & Clp_Short) + && (cli->oclass[i].type & Clp_Long)) + long1pos = 1; + if ((cli->oclass[i].type & Clp_ShortNegated) + && (cli->oclass[i].type & Clp_LongNegated)) + long1neg = 1; + } + + if (long1pos != cli->long1pos || long1neg != cli->long1neg) { + /* Must recheck option set */ + cli->long1pos = long1pos; + cli->long1neg = long1neg; + calculate_lmm(clp, cli->opt, cli->iopt, cli->nopt); + } + + return old; +} + +/** @param clp the parser + * @param nopt number of option definitions + * @param opt option definition array + * @return 0 on success, -1 on failure + * + * Installs the option definitions in @a opt. Future option parsing will + * use @a opt to search for options. + * + * Also checks @a opt's option definitions for validity. "CLP internal + * errors" are reported via Clp_OptionError() if: + * + *
    + *
  • An option has a negative ID.
  • + *
  • Two different short options have the same name.
  • + *
  • Two different long options have the same name.
  • + *
  • A short and a long option are ambiguous, in that some option character + * might introduce either a short or a long option (e.g., Clp_SetOptionChar(@a + * clp, '-', Clp_Long|Clp_Short)), and a short name equals a long name.
  • + *
+ * + * If necessary memory cannot be allocated, this function returns -1 without + * modifying the parser. + * + * @note The CLP library will not modify the contents of @a argv or @a opt. + * The calling program must not modify @a opt either until another call to + * Clp_SetOptions() or the parser is destroyed. + */ +int +Clp_SetOptions(Clp_Parser *clp, int nopt, const Clp_Option *opt) +{ + Clp_Internal *cli = clp->internal; + Clp_InternOption *iopt; + int i; + static unsigned opt_generation = 0; + + if (nopt > cli->nopt) { + iopt = (Clp_InternOption *)malloc(sizeof(Clp_InternOption) * nopt); + if (!iopt) + return -1; + free(cli->iopt); + cli->iopt = iopt; + } + + cli->opt = opt; + cli->nopt = nopt; + cli->opt_generation = ++opt_generation; + iopt = cli->iopt; + cli->current_option = -1; + + /* Massage the options to make them usable */ + for (i = 0; i < nopt; ++i) { + memset(&iopt[i], 0, sizeof(iopt[i])); + + /* Ignore negative option_ids, which are internal to CLP */ + if (opt[i].option_id < 0) { + Clp_OptionError(clp, "CLP internal error: option %d has negative option_id", i); + iopt[i].ilong = iopt[i].ishort = iopt[i].ipos = iopt[i].ineg = 0; + continue; + } + + /* Set flags based on input flags */ + iopt[i].ilong = (opt[i].long_name != 0 && opt[i].long_name[0] != 0); + iopt[i].ishort = (opt[i].short_name > 0 + && opt[i].short_name < (cli->utf8 ? 0x110000 : 256)); + iopt[i].ipos = 1; + iopt[i].ineg = (opt[i].flags & Clp_Negate) != 0; + iopt[i].imandatory = (opt[i].flags & Clp_Mandatory) != 0; + iopt[i].ioptional = (opt[i].flags & Clp_Optional) != 0; + iopt[i].iprefmatch = (opt[i].flags & Clp_PreferredMatch) != 0; + iopt[i].ilongoff = 0; + + /* Enforce invariants */ + if (opt[i].val_type <= 0) + iopt[i].imandatory = iopt[i].ioptional = 0; + if (opt[i].val_type > 0 && !iopt[i].ioptional) + iopt[i].imandatory = 1; + + /* Options that start with 'no-' should be changed to OnlyNegated */ + if (iopt[i].ilong && strncmp(opt[i].long_name, "no-", 3) == 0) { + iopt[i].ipos = 0; + iopt[i].ineg = 1; + iopt[i].ilongoff = 3; + if (strncmp(opt[i].long_name + 3, "no-", 3) == 0) + Clp_OptionError(clp, "CLP internal error: option %d begins with \"no-no-\"", i); + } else if (opt[i].flags & Clp_OnlyNegated) { + iopt[i].ipos = 0; + iopt[i].ineg = 1; + } + } + + /* Check option set */ + calculate_lmm(clp, opt, iopt, nopt); + + return 0; +} + +/** @param clp the parser + * @param argc number of arguments + * @param argv argument array + * + * Installs the arguments in @a argv for parsing. Future option parsing will + * analyze @a argv. + * + * Unlike Clp_NewParser(), this function does not treat @a argv[0] specially. + * The first subsequent call to Clp_Next() will analyze @a argv[0]. + * + * This function also sets option processing to on, as by + * Clp_SetOptionProcessing(@a clp, 1). + * + * @note The CLP library will not modify the contents of @a argv. The calling + * program should not generally modify the element of @a argv that CLP is + * currently analyzing. + */ +void +Clp_SetArguments(Clp_Parser *clp, int argc, const char * const *argv) +{ + Clp_Internal *cli = clp->internal; + + cli->argc = argc + 1; + cli->argv = argv - 1; + + cli->is_short = 0; + cli->whole_negated = 0; + cli->option_processing = 1; + cli->current_option = -1; +} + + +/** @param clp the parser + * @param on whether to search for options + * @return previous option processing setting + * + * When option processing is off, every call to Clp_Next() returns + * Clp_NotOption. By default the option "--" turns off option + * processing and is otherwise ignored. + */ +int +Clp_SetOptionProcessing(Clp_Parser *clp, int on) +{ + Clp_Internal *cli = clp->internal; + int old = cli->option_processing; + cli->option_processing = on; + return old; +} + + +/******* + * functions for Clp_Option lists + **/ + +/* the ever-glorious argcmp */ + +static int +argcmp(const char *ref, const char *arg, int min_match, int fewer_dashes) + /* Returns 0 if ref and arg don't match. + Returns -1 if ref and arg match, but fewer than min_match characters. + Returns len if ref and arg match min_match or more characters; + len is the number of characters that matched in arg. + Allows arg to contain fewer dashes than ref iff fewer_dashes != 0. + + Examples: + argcmp("x", "y", 1, 0) --> 0 / just plain wrong + argcmp("a", "ax", 1, 0) --> 0 / ...even though min_match == 1 + and the 1st chars match + argcmp("box", "bo", 3, 0) --> -1 / ambiguous + argcmp("cat", "c=3", 1, 0) --> 1 / handles = arguments + */ +{ + const char *refstart = ref; + const char *argstart = arg; + assert(min_match > 0); + + compare: + while (*ref && *arg && *arg != '=' && *ref == *arg) + ref++, arg++; + + /* Allow arg to contain fewer dashes than ref */ + if (fewer_dashes && *ref == '-' && ref[1] && ref[1] == *arg) { + ref++; + goto compare; + } + + if (*arg && *arg != '=') + return 0; + else if (ref - refstart < min_match) + return -1; + else + return arg - argstart; +} + +static int +find_prefix_opt(Clp_Parser *clp, const char *arg, + int nopt, const Clp_Option *opt, + const Clp_InternOption *iopt, + int *ambiguous, int *ambiguous_values) + /* Looks for an unambiguous match of 'arg' against one of the long + options in 'opt'. Returns positive if it finds one; otherwise, returns + -1 and possibly changes 'ambiguous' and 'ambiguous_values' to keep + track of at most MAX_AMBIGUOUS_VALUES possibilities. */ +{ + int i, fewer_dashes = 0, first_ambiguous = *ambiguous; + int negated = clp && clp->negated; + int first_charlen = (clp ? clp_utf8_charlen(clp->internal, arg) : 1); + + retry: + for (i = 0; i < nopt; i++) { + int len, lmm; + if (!iopt[i].ilong || (negated ? !iopt[i].ineg : !iopt[i].ipos)) + continue; + + lmm = (negated ? iopt[i].lmmneg : iopt[i].lmmpos); + if (clp && clp->internal->could_be_short + && (negated ? iopt[i].lmmneg_short : iopt[i].lmmpos_short)) + lmm = (first_charlen >= lmm ? first_charlen + 1 : lmm); + len = argcmp(opt[i].long_name + iopt[i].ilongoff, arg, lmm, fewer_dashes); + if (len > 0) + return i; + else if (len < 0) { + if (*ambiguous < MAX_AMBIGUOUS_VALUES) + ambiguous_values[*ambiguous] = i; + (*ambiguous)++; + } + } + + /* If there were no partial matches, try again with fewer_dashes true */ + if (*ambiguous == first_ambiguous && !fewer_dashes) { + fewer_dashes = 1; + goto retry; + } + + return -1; +} + + +/***** + * Argument parsing + **/ + +static int +val_type_binsearch(Clp_Internal *cli, int val_type) +{ + unsigned l = 0, r = cli->nvaltype; + while (l < r) { + unsigned m = l + (r - l) / 2; + if (cli->valtype[m].val_type == val_type) + return m; + else if (cli->valtype[m].val_type < val_type) + l = m + 1; + else + r = m; + } + return l; +} + +/** @param clp the parser + * @param val_type value type ID + * @param flags value type flags + * @param parser parser function + * @param user_data user data for @a parser function + * @return 0 on success, -1 on failure + * + * Defines argument type @a val_type in parser @a clp. The parsing function + * @a parser will be passed argument values for type @a val_type. It should + * parse the argument into values (usually in @a clp->val, but sometimes + * elsewhere), report errors if necessary, and return whether the parse was + * successful. + * + * Any prior argument parser match @a val_type is removed. @a val_type must + * be greater than zero. + * + * @a flags specifies additional parsing flags. At the moment the only + * relevant flag is Clp_DisallowOptions, which means that separated values + * must not look like options. For example, assume argument + * --a/-a has mandatory value type Clp_ValStringNotOption + * (which has Clp_DisallowOptions). Then: + * + *
    + *
  • --a=--b will parse with value --b.
  • + *
  • -a--b will parse with value --b.
  • + *
  • --a --b will not parse, since the mandatory value looks like + * an option.
  • + *
  • -a --b will not parse, since the mandatory value looks like + * an option.
  • + *
+ */ +int +Clp_AddType(Clp_Parser *clp, int val_type, int flags, + Clp_ValParseFunc parser, void *user_data) +{ + Clp_Internal *cli = clp->internal; + int vtpos; + + if (val_type <= 0 || !parser) + return -1; + + vtpos = val_type_binsearch(cli, val_type); + + if (vtpos == cli->nvaltype || cli->valtype[vtpos].val_type != val_type) { + if (cli->nvaltype != 0 && (cli->nvaltype % Clp_InitialValType) == 0) { + Clp_ValType *new_valtype = + (Clp_ValType *) realloc(cli->valtype, sizeof(Clp_ValType) * (cli->nvaltype + Clp_InitialValType)); + if (!new_valtype) + return -1; + cli->valtype = new_valtype; + } + memmove(&cli->valtype[vtpos + 1], &cli->valtype[vtpos], + sizeof(Clp_ValType) * (cli->nvaltype - vtpos)); + cli->nvaltype++; + cli->valtype[vtpos].func = 0; + } + + if (cli->valtype[vtpos].func == parse_string_list) { + Clp_StringList *clsl = (Clp_StringList *) cli->valtype[vtpos].user_data; + free(clsl->items); + free(clsl->iopt); + free(clsl); + } + + cli->valtype[vtpos].val_type = val_type; + cli->valtype[vtpos].func = parser; + cli->valtype[vtpos].flags = flags; + cli->valtype[vtpos].user_data = user_data; + return 0; +} + + +/******* + * Default argument parsers + **/ + +static int +parse_string(Clp_Parser *clp, const char *arg, int complain, void *user_data) +{ + (void)complain, (void)user_data; + clp->val.s = arg; + return 1; +} + +static int +parse_int(Clp_Parser* clp, const char* arg, int complain, void* user_data) +{ + const char *val; + char *temp; + uintptr_t type = (uintptr_t) user_data; + if (*arg == 0 || isspace((unsigned char) *arg) + || ((type & 1) && *arg == '-')) + val = arg; + else if (type & 1) { /* unsigned */ +#if HAVE_STRTOUL + clp->val.ul = strtoul(arg, &temp, 0); + val = temp; +#else + /* don't bother really trying to do it right */ + if (arg[0] == '-') + val = arg; + else { + clp->val.l = strtol(arg, &temp, 0); + val = temp; + } +#endif + } else { + clp->val.l = strtol(arg, &temp, 0); + val = temp; + } + if (type <= 1) + clp->val.u = (unsigned) clp->val.ul; + if (*arg != 0 && *val == 0) + return 1; + else { + if (complain) { + const char *message = type & 1 + ? "%<%O%> expects a nonnegative integer, not %<%s%>" + : "%<%O%> expects an integer, not %<%s%>"; + Clp_OptionError(clp, message, arg); + } + return 0; + } +} + +static int +parse_double(Clp_Parser *clp, const char *arg, int complain, void *user_data) +{ + const char *val; + char *temp; + (void)user_data; + if (*arg == 0 || isspace((unsigned char) *arg)) + val = arg; + else { + clp->val.d = strtod(arg, &temp); + val = temp; + } + if (*arg != 0 && *val == 0) + return 1; + else { + if (complain) + Clp_OptionError(clp, "%<%O%> expects a real number, not %<%s%>", arg); + return 0; + } +} + +static int +parse_bool(Clp_Parser *clp, const char *arg, int complain, void *user_data) +{ + int i; + char lcarg[6]; + (void)user_data; + if (strlen(arg) > 5 || strchr(arg, '=') != 0) + goto error; + + for (i = 0; arg[i] != 0; i++) + lcarg[i] = tolower((unsigned char) arg[i]); + lcarg[i] = 0; + + if (argcmp("yes", lcarg, 1, 0) > 0 + || argcmp("true", lcarg, 1, 0) > 0 + || argcmp("1", lcarg, 1, 0) > 0) { + clp->val.i = 1; + return 1; + } else if (argcmp("no", lcarg, 1, 0) > 0 + || argcmp("false", lcarg, 1, 0) > 0 + || argcmp("1", lcarg, 1, 0) > 0) { + clp->val.i = 0; + return 1; + } + + error: + if (complain) + Clp_OptionError(clp, "%<%O%> expects a true-or-false value, not %<%s%>", arg); + return 0; +} + + +/***** + * Clp_AddStringListType + **/ + +static int +parse_string_list(Clp_Parser *clp, const char *arg, int complain, void *user_data) +{ + Clp_StringList *sl = (Clp_StringList *)user_data; + int idx, ambiguous = 0; + int ambiguous_values[MAX_AMBIGUOUS_VALUES + 1]; + + /* actually look for a string value */ + idx = find_prefix_opt + (0, arg, sl->nitems, sl->items, sl->iopt, + &ambiguous, ambiguous_values); + if (idx >= 0) { + clp->val.i = sl->items[idx].option_id; + if (sl->val_long) + clp->val.l = clp->val.i; + return 1; + } + + if (sl->allow_int) { + if (parse_int(clp, arg, 0, (void*) (uintptr_t) (sl->val_long ? 2 : 0))) + return 1; + } + + if (complain) { + const char *complaint = (ambiguous ? "ambiguous" : "invalid"); + if (!ambiguous) { + ambiguous = sl->nitems_invalid_report; + for (idx = 0; idx < ambiguous; idx++) + ambiguous_values[idx] = idx; + } + return ambiguity_error + (clp, ambiguous, ambiguous_values, sl->items, sl->iopt, + "", "option %<%V%> is %s", complaint); + } else + return 0; +} + + +static int +finish_string_list(Clp_Parser *clp, int val_type, int flags, + Clp_Option *items, int nitems, int itemscap) +{ + int i; + Clp_StringList *clsl = (Clp_StringList *)malloc(sizeof(Clp_StringList)); + Clp_InternOption *iopt = (Clp_InternOption *)malloc(sizeof(Clp_InternOption) * nitems); + if (!clsl || !iopt) + goto error; + + clsl->items = items; + clsl->iopt = iopt; + clsl->nitems = nitems; + clsl->allow_int = (flags & Clp_AllowNumbers) != 0; + clsl->val_long = (flags & Clp_StringListLong) != 0; + + if (nitems < MAX_AMBIGUOUS_VALUES && nitems < itemscap && clsl->allow_int) { + items[nitems].long_name = "any integer"; + clsl->nitems_invalid_report = nitems + 1; + } else if (nitems > MAX_AMBIGUOUS_VALUES + 1) + clsl->nitems_invalid_report = MAX_AMBIGUOUS_VALUES + 1; + else + clsl->nitems_invalid_report = nitems; + + for (i = 0; i < nitems; i++) { + iopt[i].ilong = iopt[i].ipos = 1; + iopt[i].ishort = iopt[i].ineg = iopt[i].ilongoff = iopt[i].iprefmatch = 0; + } + calculate_lmm(clp, items, iopt, nitems); + + if (Clp_AddType(clp, val_type, 0, parse_string_list, clsl) >= 0) + return 0; + + error: + if (clsl) + free(clsl); + if (iopt) + free(iopt); + return -1; +} + +/** @param clp the parser + * @param val_type value type ID + * @param flags string list flags + * @return 0 on success, -1 on failure + * + * Defines argument type @a val_type in parser @a clp. The parsing function + * sets @a clp->val.i to an integer. The value string is matched against + * strings provided in the ellipsis arguments. For example, the + * Clp_AddStringListType() call below has the same effect as the + * Clp_AddStringListTypeVec() call: + * + * For example: + * @code + * Clp_AddStringListType(clp, 100, Clp_AllowNumbers, "cat", 1, + * "cattle", 2, "dog", 3, (const char *) NULL); + * + * const char * const strs[] = { "cat", "cattle", "dog" }; + * const int vals[] = { 1, 2, 3 }; + * Clp_AddStringListTypeVec(clp, 100, Clp_AllowNumbers, 3, strs, vals); + * @endcode + * + * @note The CLP library will not modify any of the passed-in strings. The + * calling program must not modify or free them either until the parser is + * destroyed. + */ +int +Clp_AddStringListType(Clp_Parser *clp, int val_type, int flags, ...) +{ + int nitems = 0; + int itemscap = 5; + Clp_Option *items = (Clp_Option *)malloc(sizeof(Clp_Option) * itemscap); + + va_list val; + va_start(val, flags); + + if (!items) + goto error; + + /* slurp up the arguments */ + while (1) { + int value; + char *name = va_arg(val, char *); + if (!name) + break; + if (flags & Clp_StringListLong) { + long lvalue = va_arg(val, long); + value = (int) lvalue; + assert(value == lvalue); + } else + value = va_arg(val, int); + + if (nitems >= itemscap) { + Clp_Option *new_items; + itemscap *= 2; + new_items = (Clp_Option *)realloc(items, sizeof(Clp_Option) * itemscap); + if (!new_items) + goto error; + items = new_items; + } + + items[nitems].long_name = name; + items[nitems].option_id = value; + items[nitems].flags = 0; + nitems++; + } + + va_end(val); + if (finish_string_list(clp, val_type, flags, items, nitems, itemscap) >= 0) + return 0; + + error: + va_end(val); + if (items) + free(items); + return -1; +} + +/** @param clp the parser + * @param val_type value type ID + * @param flags string list flags + * @param nstrs number of strings in list + * @param strs array of strings + * @param vals array of values + * @return 0 on success, -1 on failure + * + * Defines argument type @a val_type in parser @a clp. The parsing function + * sets @a clp->val.i to an integer. The value string is matched against the + * @a strs. If there's a unique match, the corresponding entry from @a vals + * is returned. Unique prefix matches also work. Finally, if @a flags + * contains the Clp_AllowNumbers flag, then integers are also accepted. + * + * For example: + * @code + * const char * const strs[] = { "cat", "cattle", "dog" }; + * const int vals[] = { 1, 2, 3 }; + * Clp_AddStringListTypeVec(clp, 100, Clp_AllowNumbers, 3, strs, vals); + * @endcode + * + * Say that option --animal takes value type 100. Then: + * + *
    + *
  • --animal=cat will succeed and set @a clp->val.i = 1.
  • + *
  • --animal=cattle will succeed and set @a clp->val.i = 2.
  • + *
  • --animal=dog will succeed and set @a clp->val.i = 3.
  • + *
  • --animal=d will succeed and set @a clp->val.i = 3.
  • + *
  • --animal=c will fail, since c is ambiguous.
  • + *
  • --animal=4 will succeed and set @a clp->val.i = 4.
  • + *
+ * + * @note The CLP library will not modify the contents of @a strs or @a vals. + * The calling program can modify the @a strs array, but the actual strings + * (for instance, @a strs[0] and @a strs[1]) must not be modified or freed + * until the parser is destroyed. + */ +int +Clp_AddStringListTypeVec(Clp_Parser *clp, int val_type, int flags, + int nstrs, const char * const *strs, + const int *vals) + /* An alternate way to make a string list type. See Clp_AddStringListType + for the basics; this coalesces the strings and values into two arrays, + rather than spreading them out into a variable argument list. */ +{ + int i; + int itemscap = (nstrs < 5 ? 5 : nstrs); + Clp_Option *items = (Clp_Option *)malloc(sizeof(Clp_Option) * itemscap); + if (!items) + return -1; + + /* copy over items */ + for (i = 0; i < nstrs; i++) { + items[i].long_name = strs[i]; + items[i].option_id = vals[i]; + items[i].flags = 0; + } + + if (finish_string_list(clp, val_type, flags, items, nstrs, itemscap) >= 0) + return 0; + else { + free(items); + return -1; + } +} + + +/******* + * Returning information + **/ + +const char * +Clp_ProgramName(Clp_Parser *clp) +{ + return clp->internal->program_name; +} + +/** @param clp the parser + * @param name new program name + * @return previous program name + * + * The calling program should not modify or free @a name until @a clp itself + * is destroyed. */ +const char * +Clp_SetProgramName(Clp_Parser *clp, const char *name) +{ + const char *old = clp->internal->program_name; + clp->internal->program_name = name; + return old; +} + + +/****** + * Clp_ParserStates + **/ + +/** @return the parser state + * + * A Clp_ParserState object can store a parsing state of a Clp_Parser object. + * This state specifies exactly how far the Clp_Parser has gotten in parsing + * an argument list. The Clp_SaveParser() and Clp_RestoreParser() functions + * can be used to save this state and then restore it later, allowing a + * Clp_Parser to switch among argument lists. + * + * The initial state is empty, in that after Clp_RestoreParser(clp, state), + * Clp_Next(clp) would return Clp_Done. + * + * Parser states can be saved and restored among different parser objects. + * + * @sa Clp_DeleteParserState, Clp_SaveParser, Clp_RestoreParser + */ +Clp_ParserState * +Clp_NewParserState(void) +{ + Clp_ParserState *state = (Clp_ParserState *)malloc(sizeof(Clp_ParserState)); + if (state) { + state->argv = 0; + state->argc = 0; + state->option_chars[0] = 0; + state->xtext = 0; + state->option_processing = 0; + state->opt_generation = 0; + state->current_option = -1; + state->is_short = 0; + state->whole_negated = 0; + state->current_short = 0; + state->negated_by_no = 0; + } + return state; +} + +/** @param state parser state + * + * The memory associated with @a state is freed. + */ +void +Clp_DeleteParserState(Clp_ParserState *state) +{ + free(state); +} + +/** @param clp the parser + * @param state parser state + * @sa Clp_NewParserState, Clp_RestoreParser + */ +void +Clp_SaveParser(const Clp_Parser *clp, Clp_ParserState *state) +{ + Clp_Internal *cli = clp->internal; + state->argv = cli->argv; + state->argc = cli->argc; + memcpy(state->option_chars, cli->option_chars, Clp_OptionCharsSize); + state->xtext = cli->xtext; + + state->option_processing = cli->option_processing; + state->opt_generation = cli->opt_generation; + state->current_option = cli->current_option; + state->is_short = cli->is_short; + state->whole_negated = cli->whole_negated; + state->current_short = cli->current_short; + state->negated_by_no = cli->negated_by_no; +} + + +/** @param clp the parser + * @param state parser state + * + * The parser state in @a state is restored into @a clp. The next call to + * Clp_Next() will return the same result as it would have at the time @a + * state was saved (probably by Clp_SaveParser(@a clp, @a state)). + * + * A parser state contains information about arguments (argc and argv; see + * Clp_SetArguments()) and option processing (Clp_SetOptionProcessing()), but + * not about options (Clp_SetOptions()). Changes to options and value types + * are preserved across Clp_RestoreParser(). + * + * @sa Clp_NewParserState, Clp_SaveParser + */ +void +Clp_RestoreParser(Clp_Parser *clp, const Clp_ParserState *state) +{ + Clp_Internal *cli = clp->internal; + cli->argv = state->argv; + cli->argc = state->argc; + memcpy(cli->option_chars, state->option_chars, Clp_OptionCharsSize); + cli->xtext = state->xtext; + cli->option_processing = state->option_processing; + cli->is_short = state->is_short; + cli->whole_negated = state->whole_negated; + cli->current_short = state->current_short; + cli->negated_by_no = state->negated_by_no; + if (cli->opt_generation == state->opt_generation) + cli->current_option = state->current_option; + else + cli->current_option = -1; +} + + +/******* + * Clp_Next and its helpers + **/ + +static void +set_option_text(Clp_Internal *cli, const char *text, int n_option_chars) +{ + assert(n_option_chars < Clp_OptionCharsSize); + memcpy(cli->option_chars, text, n_option_chars); + cli->option_chars[n_option_chars] = 0; + cli->xtext = text + n_option_chars; +} + +static int +get_oclass(Clp_Parser *clp, const char *text, int *ocharskip) +{ + int c; + if (clp->internal->utf8) { + const char *s; + c = decode_utf8(text, &s); + *ocharskip = s - text; + } else { + c = (unsigned char) text[0]; + *ocharskip = 1; + } + return Clp_OptionChar(clp, c); +} + +static int +next_argument(Clp_Parser *clp, int want_argument) + /* Moves clp to the next argument. + Returns 1 if it finds another option. + Returns 0 if there aren't any more arguments. + Returns 0, sets clp->have_val = 1, and sets clp->vstr to the argument + if the next argument isn't an option. + If want_argument > 0, it'll look for an argument. + want_argument == 1: Accept arguments that start with Clp_NotOption + or Clp_LongImplicit. + want_argument == 2: Accept ALL arguments. + + Where is the option stored when this returns? + Well, cli->argv[0] holds the whole of the next command line argument. + cli->option_chars holds a string: what characters began the option? + It is generally "-" or "--". + cli->text holds the text of the option: + for short options, cli->text[0] is the relevant character; + for long options, cli->text holds the rest of the option. */ +{ + Clp_Internal *cli = clp->internal; + const char *text; + int oclass, ocharskip; + + /* clear relevant flags */ + clp->have_val = 0; + clp->vstr = 0; + cli->could_be_short = 0; + + /* if we're in a string of short options, move up one char in the string */ + if (cli->is_short) { + cli->xtext += clp_utf8_charlen(cli, cli->xtext); + if (cli->xtext[0] == 0) + cli->is_short = 0; + else if (want_argument > 0) { + /* handle -O[=]argument case */ + clp->have_val = 1; + if (cli->xtext[0] == '=') + clp->vstr = cli->xtext + 1; + else + clp->vstr = cli->xtext; + cli->is_short = 0; + return 0; + } + } + + /* if in short options, we're all set */ + if (cli->is_short) + return 1; + + /** if not in short options, move to the next argument **/ + cli->whole_negated = 0; + cli->xtext = 0; + + if (cli->argc <= 1) + return 0; + + cli->argc--; + cli->argv++; + text = cli->argv[0]; + + if (want_argument > 1) + goto not_option; + + if (text[0] == '-' && text[1] == '-') { + oclass = Clp_DoubledLong; + ocharskip = 2; + } else + oclass = get_oclass(clp, text, &ocharskip); + + /* If this character could introduce either a short or a long option, + try a long option first, but remember that short's a possibility for + later. */ + if ((oclass & (Clp_Short | Clp_ShortNegated)) + && (oclass & (Clp_Long | Clp_LongNegated))) { + oclass &= ~(Clp_Short | Clp_ShortNegated); + if (text[ocharskip]) + cli->could_be_short = 1; + } + + switch (oclass) { + + case Clp_Short: + cli->is_short = 1; + goto check_singleton; + + case Clp_ShortNegated: + cli->is_short = 1; + cli->whole_negated = 1; + goto check_singleton; + + case Clp_Long: + goto check_singleton; + + case Clp_LongNegated: + cli->whole_negated = 1; + goto check_singleton; + + check_singleton: + /* For options introduced with one character, option-char, + '[option-char]' alone is NOT an option. */ + if (!text[ocharskip]) + goto not_option; + set_option_text(cli, text, ocharskip); + break; + + case Clp_LongImplicit: + /* LongImplict: option_chars == "" (since all chars are part of the + option); restore head -> text of option */ + if (want_argument > 0) + goto not_option; + set_option_text(cli, text, 0); + break; + + case Clp_DoubledLong: + set_option_text(cli, text, ocharskip); + break; + + not_option: + case Clp_NotOption: + cli->is_short = 0; + clp->have_val = 1; + clp->vstr = text; + return 0; + + default: + assert(0 /* CLP misconfiguration: bad option type */); + + } + + return 1; +} + + +static void +switch_to_short_argument(Clp_Parser *clp) +{ + Clp_Internal *cli = clp->internal; + const char *text = cli->argv[0]; + int ocharskip, oclass = get_oclass(clp, text, &ocharskip); + assert(cli->could_be_short); + cli->is_short = 1; + cli->whole_negated = (oclass & Clp_ShortNegated ? 1 : 0); + set_option_text(cli, cli->argv[0], ocharskip); +} + + +static int +find_long(Clp_Parser *clp, const char *arg) + /* If arg corresponds to one of clp's options, finds that option & + returns it. If any argument is given after an = sign in arg, sets + clp->have_val = 1 and clp->vstr to that argument. Sets cli->ambiguous + to 1 iff there was no match because the argument was ambiguous. */ +{ + Clp_Internal *cli = clp->internal; + int optno, len, lmm; + const Clp_Option *opt = cli->opt; + const Clp_InternOption *iopt; + int first_negative_ambiguous; + + /* Look for a normal option. */ + optno = find_prefix_opt + (clp, arg, cli->nopt, opt, cli->iopt, + &cli->ambiguous, cli->ambiguous_values); + if (optno >= 0) + goto worked; + + /* If we can't find it, look for a negated option. */ + /* I know this is silly, but it makes me happy to accept + --no-no-option as a double negative synonym for --option. :) */ + first_negative_ambiguous = cli->ambiguous; + while (arg[0] == 'n' && arg[1] == 'o' && arg[2] == '-') { + arg += 3; + clp->negated = !clp->negated; + optno = find_prefix_opt + (clp, arg, cli->nopt, opt, cli->iopt, + &cli->ambiguous, cli->ambiguous_values); + if (optno >= 0) + goto worked; + } + + /* No valid option was found; return 0. Mark the ambiguous values found + through '--no' by making them negative. */ + { + int i, max = cli->ambiguous; + if (max > MAX_AMBIGUOUS_VALUES) max = MAX_AMBIGUOUS_VALUES; + for (i = first_negative_ambiguous; i < max; i++) + cli->ambiguous_values[i] = -cli->ambiguous_values[i] - 1; + } + return -1; + + worked: + iopt = &cli->iopt[optno]; + lmm = (clp->negated ? iopt->lmmneg : iopt->lmmpos); + if (cli->could_be_short + && (clp->negated ? iopt->lmmneg_short : iopt->lmmpos_short)) { + int first_charlen = clp_utf8_charlen(cli, arg); + lmm = (first_charlen >= lmm ? first_charlen + 1 : lmm); + } + len = argcmp(opt[optno].long_name + iopt->ilongoff, arg, lmm, 1); + assert(len > 0); + if (arg[len] == '=') { + clp->have_val = 1; + clp->vstr = arg + len + 1; + } + return optno; +} + + +static int +find_short(Clp_Parser *clp, const char *text) + /* If short_name corresponds to one of clp's options, returns it. */ +{ + Clp_Internal *cli = clp->internal; + const Clp_Option *opt = cli->opt; + const Clp_InternOption *iopt = cli->iopt; + int i, c; + if (clp->internal->utf8) + c = decode_utf8(text, 0); + else + c = (unsigned char) *text; + + for (i = 0; i < cli->nopt; i++) + if (iopt[i].ishort && opt[i].short_name == c + && (!clp->negated || iopt[i].ineg)) { + clp->negated = clp->negated || !iopt[i].ipos; + return i; + } + + return -1; +} + + +/** @param clp the parser + * @return option ID of next option + * + * Parse the next argument from the argument list, store information about + * that argument in the fields of @a clp, and return the option's ID. + * + * If an argument was successfully parsed, that option's ID is returned. + * Other possible return values are: + * + *
+ *
Clp_Done
+ *
There are no more arguments.
+ *
Clp_NotOption
+ *
The next argument was not an option. The argument's text is @a + * clp->vstr (and @a clp->val.s).
+ *
Clp_BadOption
+ *
The next argument was a bad option: either an option that wasn't + * understood, or an option lacking a required value, or an option whose value + * couldn't be parsed. The option has been skipped.
+ *
Clp_Error
+ *
There was an internal error. This should never occur unless a user + * messes with, for example, a Clp_Option array.
+ *
+ * + * The fields of @a clp are set as follows. + * + *
+ *
negated
+ *
1 if the option was negated, 0 if it wasn't.
+ *
have_val
+ *
1 if the option had a value, 0 if it didn't. Note that negated options + * are not allowed to have values.
+ *
vstr
+ *
The value string, if any. NULL if there was no value.
+ *
val
+ *
An option's value type will parse the value string into this + * union.
+ *
+ * + * The parsed argument is shifted off the argument list, so that sequential + * calls to Clp_Next() step through the argument list. + */ +int +Clp_Next(Clp_Parser *clp) +{ + Clp_Internal *cli = clp->internal; + int optno; + const Clp_Option *opt; + Clp_ParserState clpsave; + int vtpos, complain; + + /* Set up clp */ + cli->current_option = -1; + cli->ambiguous = 0; + + /* Get the next argument or option */ + if (!next_argument(clp, cli->option_processing ? 0 : 2)) { + clp->val.s = clp->vstr; + optno = clp->have_val ? Clp_NotOption : Clp_Done; + clp->option = &clp_option_sentinel[-optno]; + return optno; + } + + clp->negated = cli->whole_negated; + if (cli->is_short) + optno = find_short(clp, cli->xtext); + else + optno = find_long(clp, cli->xtext); + + /* If there's ambiguity between long & short options, and we couldn't + find a long option, look for a short option */ + if (optno < 0 && cli->could_be_short) { + switch_to_short_argument(clp); + optno = find_short(clp, cli->xtext); + } + + /* If we didn't find an option... */ + if (optno < 0 || (clp->negated && !cli->iopt[optno].ineg)) { + /* default processing for the "--" option: turn off option processing + and return the next argument */ + if (strcmp(cli->argv[0], "--") == 0) { + Clp_SetOptionProcessing(clp, 0); + return Clp_Next(clp); + } + + /* otherwise, report some error or other */ + if (cli->ambiguous) + ambiguity_error(clp, cli->ambiguous, cli->ambiguous_values, + cli->opt, cli->iopt, cli->option_chars, + "option %<%s%s%> is ambiguous", + cli->option_chars, cli->xtext); + else if (cli->is_short && !cli->could_be_short) + Clp_OptionError(clp, "unrecognized option %<%s%C%>", + cli->option_chars, cli->xtext); + else + Clp_OptionError(clp, "unrecognized option %<%s%s%>", + cli->option_chars, cli->xtext); + + clp->option = &clp_option_sentinel[-Clp_BadOption]; + return Clp_BadOption; + } + + /* Set the current option */ + cli->current_option = optno; + cli->current_short = cli->is_short; + cli->negated_by_no = clp->negated && !cli->whole_negated; + + /* The no-argument (or should-have-no-argument) case */ + if (clp->negated + || (!cli->iopt[optno].imandatory && !cli->iopt[optno].ioptional)) { + if (clp->have_val) { + Clp_OptionError(clp, "%<%O%> can%,t take an argument"); + clp->option = &clp_option_sentinel[-Clp_BadOption]; + return Clp_BadOption; + } else { + clp->option = &cli->opt[optno]; + return cli->opt[optno].option_id; + } + } + + /* Get an argument if we need one, or if it's optional */ + /* Sanity-check the argument type. */ + opt = &cli->opt[optno]; + if (opt->val_type <= 0) { + clp->option = &clp_option_sentinel[-Clp_Error]; + return Clp_Error; + } + vtpos = val_type_binsearch(cli, opt->val_type); + if (vtpos == cli->nvaltype + || cli->valtype[vtpos].val_type != opt->val_type) { + clp->option = &clp_option_sentinel[-Clp_Error]; + return Clp_Error; + } + + /* complain == 1 only if the argument was explicitly given, + or it is mandatory. */ + complain = (clp->have_val != 0) || cli->iopt[optno].imandatory; + Clp_SaveParser(clp, &clpsave); + + if (cli->iopt[optno].imandatory && !clp->have_val) { + /* Mandatory argument case */ + /* Allow arguments to options to start with a dash, but only if the + argument type allows it by not setting Clp_DisallowOptions */ + int disallow = (cli->valtype[vtpos].flags & Clp_DisallowOptions) != 0; + next_argument(clp, disallow ? 1 : 2); + if (!clp->have_val) { + int got_option = cli->xtext != 0; + Clp_RestoreParser(clp, &clpsave); + if (got_option) + Clp_OptionError(clp, "%<%O%> requires a non-option argument"); + else + Clp_OptionError(clp, "%<%O%> requires an argument"); + clp->option = &clp_option_sentinel[-Clp_BadOption]; + return Clp_BadOption; + } + + } else if (cli->is_short && !clp->have_val + && cli->xtext[clp_utf8_charlen(cli, cli->xtext)]) + /* The -[option]argument case: + Assume that the rest of the current string is the argument. */ + next_argument(clp, 1); + + /* Parse the argument */ + clp->option = opt; + if (clp->have_val) { + Clp_ValType *atr = &cli->valtype[vtpos]; + if (atr->func(clp, clp->vstr, complain, atr->user_data) <= 0) { + /* parser failed */ + clp->have_val = 0; + if (complain) { + clp->option = &clp_option_sentinel[-Clp_BadOption]; + return Clp_BadOption; + } else { + Clp_RestoreParser(clp, &clpsave); + clp->option = opt; + } + } + } + + return opt->option_id; +} + + +/** @param clp the parser + * @param allow_options whether options will be allowed + * + * Remove and return the next argument from @a clp's argument array. If there + * are no arguments left, or if the next argument is an option and @a + * allow_options != 0, then returns null. + */ +const char * +Clp_Shift(Clp_Parser *clp, int allow_options) + /* Returns the next argument from the argument list without parsing it. + If there are no more arguments, returns 0. */ +{ + Clp_ParserState clpsave; + Clp_SaveParser(clp, &clpsave); + next_argument(clp, allow_options ? 2 : 1); + if (!clp->have_val) + Clp_RestoreParser(clp, &clpsave); + return clp->vstr; +} + + +/******* + * Clp_OptionError + **/ + +typedef struct Clp_BuildString { + char* data; + char* pos; + char* end_data; + char buf[256]; +} Clp_BuildString; + +static void build_string_program_prefix(Clp_BuildString* bs, + const Clp_Parser* clp); + +static void build_string_init(Clp_BuildString* bs, Clp_Parser* clp) { + bs->data = bs->pos = bs->buf; + bs->end_data = &bs->buf[sizeof(bs->buf)]; + if (clp) + build_string_program_prefix(bs, clp); +} + +static void build_string_cleanup(Clp_BuildString* bs) { + if (bs->data != bs->buf) + free(bs->data); +} + +static int build_string_grow(Clp_BuildString* bs, size_t want) { + size_t ipos = bs->pos - bs->data, ncap; + if (!bs->pos) + return 0; + for (ncap = (bs->end_data - bs->data) << 1; ncap < want; ncap *= 2) + /* nada */; + if (bs->data == bs->buf) { + if ((bs->data = (char*) malloc(ncap))) + memcpy(bs->data, bs->buf, bs->pos - bs->buf); + } else + bs->data = (char*) realloc(bs->data, ncap); + if (!bs->data) { + bs->pos = bs->end_data = bs->data; + return 0; + } else { + bs->pos = bs->data + ipos; + bs->end_data = bs->data + ncap; + return 1; + } +} + +#define ENSURE_BUILD_STRING(bs, space) \ + ((((bs)->end_data - (bs)->pos) >= (space)) \ + || build_string_grow((bs), (bs)->pos - (bs)->data + (space))) + +static void +append_build_string(Clp_BuildString *bs, const char *s, int l) +{ + if (l < 0) + l = strlen(s); + if (ENSURE_BUILD_STRING(bs, l)) { + memcpy(bs->pos, s, l); + bs->pos += l; + } +} + +static void +build_string_program_prefix(Clp_BuildString* bs, const Clp_Parser* clp) +{ + const Clp_Internal* cli = clp->internal; + if (cli->program_name && cli->program_name[0]) { + append_build_string(bs, cli->program_name, -1); + append_build_string(bs, ": ", 2); + } +} + + +static void +Clp_vbsprintf(Clp_Parser *clp, Clp_BuildString *bs, + const char *fmt, va_list val) +{ + Clp_Internal *cli = clp->internal; + const char *percent; + int c; + + for (percent = strchr(fmt, '%'); percent; percent = strchr(fmt, '%')) { + append_build_string(bs, fmt, percent - fmt); + switch (*++percent) { + + case 's': { + const char *s = va_arg(val, const char *); + append_build_string(bs, s ? s : "(null)", -1); + break; + } + + case 'C': { + const char *s = va_arg(val, const char *); + if (cli->utf8) + c = decode_utf8(s, 0); + else + c = (unsigned char) *s; + goto char_c; + } + + case 'c': + c = va_arg(val, int); + goto char_c; + + char_c: + if (ENSURE_BUILD_STRING(bs, 4)) { + if (c >= 32 && c <= 126) + *bs->pos++ = c; + else if (c < 32) { + *bs->pos++ = '^'; + *bs->pos++ = c + 64; + } else if (cli->utf8 && c >= 127 && c < 0x110000) { + bs->pos = encode_utf8(bs->pos, 4, c); + } else if (c >= 127 && c <= 255) { + sprintf(bs->pos, "\\%03o", c & 0xFF); + bs->pos += 4; + } else { + *bs->pos++ = '\\'; + *bs->pos++ = '?'; + } + } + break; + + case 'd': { + int d = va_arg(val, int); + if (ENSURE_BUILD_STRING(bs, 32)) { + sprintf(bs->pos, "%d", d); + bs->pos = strchr(bs->pos, 0); + } + break; + } + + case 'O': + case 'V': { + int optno = cli->current_option; + const Clp_Option *opt = &cli->opt[optno]; + if (optno < 0) + append_build_string(bs, "(no current option!)", -1); + else if (cli->current_short) { + append_build_string(bs, cli->option_chars, -1); + if (ENSURE_BUILD_STRING(bs, 5)) { + if (cli->utf8) + bs->pos = encode_utf8(bs->pos, 5, opt->short_name); + else + *bs->pos++ = opt->short_name; + } + } else if (cli->negated_by_no) { + append_build_string(bs, cli->option_chars, -1); + append_build_string(bs, "no-", 3); + append_build_string(bs, opt->long_name + cli->iopt[optno].ilongoff, -1); + } else { + append_build_string(bs, cli->option_chars, -1); + append_build_string(bs, opt->long_name + cli->iopt[optno].ilongoff, -1); + } + if (optno >= 0 && clp->have_val && *percent == 'V') { + if (cli->current_short && !cli->iopt[optno].ioptional) + append_build_string(bs, " ", 1); + else if (!cli->current_short) + append_build_string(bs, "=", 1); + append_build_string(bs, clp->vstr, -1); + } + break; + } + + case '%': + if (ENSURE_BUILD_STRING(bs, 1)) + *bs->pos++ = '%'; + break; + + case '`': /* backwards compatibility */ + case '<': + append_build_string(bs, (cli->utf8 ? "\342\200\230" : "'"), -1); + break; + + case '\'': /* backwards compatibility */ + case ',': + case '>': + append_build_string(bs, (cli->utf8 ? "\342\200\231" : "'"), -1); + break; + + case 0: + append_build_string(bs, "%", 1); + goto done; + + default: + if (ENSURE_BUILD_STRING(bs, 2)) { + *bs->pos++ = '%'; + *bs->pos++ = *percent; + } + break; + + } + fmt = ++percent; + } + + done: + append_build_string(bs, fmt, -1); +} + +static const char* build_string_text(Clp_BuildString* bs, int report_oom) { + if (bs->pos) { + *bs->pos = 0; + return bs->data; + } else if (report_oom) + return "out of memory\n"; + else + return NULL; +} + +static void +do_error(Clp_Parser *clp, Clp_BuildString *bs) +{ + const char *text = build_string_text(bs, 1); + if (clp->internal->error_handler != 0) + (*clp->internal->error_handler)(clp, text); + else + fputs(text, stderr); +} + +/** @param clp the parser + * @param format error format + * + * Format an error message from @a format and any additional arguments in + * the ellipsis. The resulting error string is then printed to standard + * error (or passed to the error handler specified by Clp_SetErrorHandler). + * Returns the number of characters printed. + * + * The following format characters are accepted: + * + *
+ *
%c
+ *
A character (type int). Control characters are printed in + * caret notation. If the parser is in UTF-8 mode, the character is formatted + * in UTF-8. Otherwise, special characters are printed with backslashes and + * octal notation.
+ *
%s
+ *
A string (type const char *).
+ *
%C
+ *
The argument is a string (type const char *). The first + * character in this string is printed. If the parser is in UTF-8 mode, this + * may involve multiple bytes.
+ *
%d
+ *
An integer (type int). Printed in decimal.
+ *
%O
+ *
The current option. No values are read from the argument list; the + * current option is defined in the Clp_Parser object itself.
+ *
%V
+ *
Like %O, but also includes the current value, + * if any.
+ *
%%
+ *
Prints a percent character.
+ *
%<
+ *
Prints an open quote string. In UTF-8 mode, prints a left single + * quote. Otherwise prints a single quote.
+ *
%>
+ *
Prints a closing quote string. In UTF-8 mode, prints a right single + * quote. Otherwise prints a single quote.
+ *
%,
+ *
Prints an apostrophe. In UTF-8 mode, prints a right single quote. + * Otherwise prints a single quote.
+ *
+ * + * Note that no flag characters, precision, or field width characters are + * currently supported. + * + * @sa Clp_SetErrorHandler + */ +int +Clp_OptionError(Clp_Parser *clp, const char *format, ...) +{ + Clp_BuildString bs; + va_list val; + va_start(val, format); + build_string_init(&bs, clp); + Clp_vbsprintf(clp, &bs, format, val); + append_build_string(&bs, "\n", 1); + va_end(val); + do_error(clp, &bs); + build_string_cleanup(&bs); + return bs.pos - bs.data; +} + +/** @param clp the parser + * @param f output file + * @param format error format + * + * Format an error message using @a format and additional arguments in the + * ellipsis, according to the Clp_OptionError formatting conventions. The + * resulting message is written to @a f. + * + * @sa Clp_OptionError */ +int +Clp_fprintf(Clp_Parser* clp, FILE* f, const char* format, ...) +{ + Clp_BuildString bs; + va_list val; + va_start(val, format); + build_string_init(&bs, NULL); + Clp_vbsprintf(clp, &bs, format, val); + va_end(val); + if (bs.pos != bs.data) + fwrite(bs.data, 1, bs.pos - bs.data, f); + build_string_cleanup(&bs); + return bs.pos - bs.data; +} + +/** @param clp the parser + * @param f output file + * @param format error format + * @param val arguments + * + * Format an error message using @a format and @a val, according to the + * Clp_OptionError formatting conventions. The resulting message is written + * to @a f. + * + * @sa Clp_OptionError */ +int +Clp_vfprintf(Clp_Parser* clp, FILE* f, const char* format, va_list val) +{ + Clp_BuildString bs; + build_string_init(&bs, NULL); + Clp_vbsprintf(clp, &bs, format, val); + if (bs.pos != bs.data) + fwrite(bs.data, 1, bs.pos - bs.data, f); + build_string_cleanup(&bs); + return bs.pos - bs.data; +} + +/** @param clp the parser + * @param str output string + * @param size size of output string + * @param format error format + * + * Format an error message from @a format and any additional arguments in + * the ellipsis, according to the Clp_OptionError formatting conventions. + * The resulting string is written to @a str. At most @a size characters are + * written to @a str, including a terminating null byte. The return value is + * the number of characters that would have been written (excluding the + * terminating null byte) if @a size were large enough to contain the entire + * string. + * + * @sa Clp_OptionError */ +int +Clp_vsnprintf(Clp_Parser* clp, char* str, size_t size, + const char* format, va_list val) +{ + Clp_BuildString bs; + build_string_init(&bs, NULL); + Clp_vbsprintf(clp, &bs, format, val); + if ((size_t) (bs.pos - bs.data) < size) { + memcpy(str, bs.data, bs.pos - bs.data); + str[bs.pos - bs.data] = 0; + } else { + memcpy(str, bs.data, size - 1); + str[size - 1] = 0; + } + build_string_cleanup(&bs); + return bs.pos - bs.data; +} + +static int +ambiguity_error(Clp_Parser *clp, int ambiguous, int *ambiguous_values, + const Clp_Option *opt, const Clp_InternOption *iopt, + const char *prefix, const char *fmt, ...) +{ + Clp_Internal *cli = clp->internal; + Clp_BuildString bs; + int i; + va_list val; + + va_start(val, fmt); + build_string_init(&bs, clp); + Clp_vbsprintf(clp, &bs, fmt, val); + append_build_string(&bs, "\n", 1); + + build_string_program_prefix(&bs, clp); + append_build_string(&bs, "(Possibilities are", -1); + + for (i = 0; i < ambiguous && i < MAX_AMBIGUOUS_VALUES; i++) { + int value = ambiguous_values[i]; + const char *no_dash = ""; + if (value < 0) + value = -(value + 1), no_dash = "no-"; + if (i == 0) + append_build_string(&bs, " ", 1); + else if (i == ambiguous - 1) + append_build_string(&bs, (i == 1 ? " and " : ", and "), -1); + else + append_build_string(&bs, ", ", 2); + append_build_string(&bs, (cli->utf8 ? "\342\200\230" : "'"), -1); + append_build_string(&bs, prefix, -1); + append_build_string(&bs, no_dash, -1); + append_build_string(&bs, opt[value].long_name + iopt[value].ilongoff, -1); + append_build_string(&bs, (cli->utf8 ? "\342\200\231" : "'"), -1); + } + + if (ambiguous > MAX_AMBIGUOUS_VALUES) + append_build_string(&bs, ", and others", -1); + append_build_string(&bs, ".)\n", -1); + va_end(val); + + do_error(clp, &bs); + build_string_cleanup(&bs); + return 0; +} + +static int +copy_string(char *buf, int buflen, int bufpos, const char *what) +{ + int l = strlen(what); + if (l > buflen - bufpos - 1) + l = buflen - bufpos - 1; + memcpy(buf + bufpos, what, l); + return l; +} + +/** @param clp the parser + * @param buf output buffer + * @param len length of output buffer + * @return number of characters written to the buffer, not including the terminating NUL + * + * A string that looks like the last option parsed by @a clp is extracted into + * @a buf. The correct option characters are put into the string first, + * followed by the option text. The output buffer is null-terminated unless + * @a len == 0. + * + * @sa Clp_CurOptionName + */ +int +Clp_CurOptionNameBuf(Clp_Parser *clp, char *buf, int len) +{ + Clp_Internal *cli = clp->internal; + int optno = cli->current_option; + int pos = 0; + if (optno < 0) + pos += copy_string(buf, len, pos, "(no current option!)"); + else if (cli->current_short) { + pos += copy_string(buf, len, pos, cli->option_chars); + if (cli->utf8) + pos = (encode_utf8(buf + pos, len - pos - 1, cli->opt[optno].short_name) - buf); + else if (pos < len - 1) + buf[pos++] = cli->opt[optno].short_name; + } else if (cli->negated_by_no) { + pos += copy_string(buf, len, pos, cli->option_chars); + pos += copy_string(buf, len, pos, "no-"); + pos += copy_string(buf, len, pos, cli->opt[optno].long_name + cli->iopt[optno].ilongoff); + } else { + pos += copy_string(buf, len, pos, cli->option_chars); + pos += copy_string(buf, len, pos, cli->opt[optno].long_name + cli->iopt[optno].ilongoff); + } + if (pos < len) + buf[pos] = 0; + return pos; +} + +/** @param clp the parser + * @return string describing the current option + * + * This function acts like Clp_CurOptionNameBuf(), but returns a pointer into + * a static buffer that will be rewritten on the next call to + * Clp_CurOptionName(). + * + * @note This function is not thread safe. + * + * @sa Clp_CurOptionName + */ +const char * +Clp_CurOptionName(Clp_Parser *clp) +{ + static char buf[256]; + Clp_CurOptionNameBuf(clp, buf, 256); + return buf; +} + +int +Clp_IsLong(Clp_Parser *clp, const char *long_name) +{ + Clp_Internal *cli = clp->internal; + int optno = cli->current_option; + return optno >= 0 && strcmp(cli->opt[optno].long_name, long_name) == 0; +} + +int +Clp_IsShort(Clp_Parser *clp, int short_name) +{ + Clp_Internal *cli = clp->internal; + int optno = cli->current_option; + return optno >= 0 && cli->opt[optno].short_name == short_name; +} + +#ifdef __cplusplus +} +#endif diff --git a/Build/source/utils/t1utils/t1utils-src/config.h.in b/Build/source/utils/t1utils/t1utils-src/config.h.in new file mode 100644 index 00000000000..e3686d8e044 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/config.h.in @@ -0,0 +1,114 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +#ifndef T1UTILS_CONFIG_H +#define T1UTILS_CONFIG_H + +/* Define to 1 if you have the declaration of `memmem', and to 0 if you don't. + */ +#undef HAVE_DECL_MEMMEM + +/* Define if intXX_t types are not available. */ +#undef HAVE_FAKE_INT_TYPES + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `memmem' function. */ +#undef HAVE_MEMMEM + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if the system has the type `uintptr_t'. */ +#undef HAVE_UINTPTR_T + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if you have u_intXX_t types but not uintXX_t types. */ +#undef HAVE_U_INT_TYPES + +/* 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 + +/* 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 + +/* The size of `unsigned int', as computed by sizeof. */ +#undef SIZEOF_UNSIGNED_INT + +/* The size of `unsigned long', as computed by sizeof. */ +#undef SIZEOF_UNSIGNED_LONG + +/* The size of `void *', as computed by sizeof. */ +#undef SIZEOF_VOID_P + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Prototype strerror if we don't have it. */ +#if !HAVE_STRERROR +char* strerror(int errno); +#endif + +/* Prototype memmem if we don't have it. */ +#if !HAVE_MEMMEM || !HAVE_DECL_MEMMEM +void* memmem(const void* haystack, size_t haystack_len, + const void* needle, size_t needle_len); +#endif + +#ifdef __cplusplus +} +/* Get rid of a possible inline macro under C++. */ +# define inline inline +#endif + +#endif /* T1UTILS_CONFIG_H */ diff --git a/Build/source/utils/t1utils/t1utils-src/configure.ac b/Build/source/utils/t1utils/t1utils-src/configure.ac new file mode 100644 index 00000000000..d5619c5a1d0 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/configure.ac @@ -0,0 +1,125 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT([t1utils], [1.42]) +AC_CONFIG_SRCDIR([t1ascii.c]) +AM_INIT_AUTOMAKE +AC_CONFIG_HEADERS([config.h]) + +AC_PROG_CC +AC_C_CONST + +AC_ARG_ENABLE([warnings], + [AS_HELP_STRING([--enable-warnings], [compile with -W -Wall])], + [if test "$enableval" = yes; then + CFLAGS="$CFLAGS -W -Wall" + fi]) + + +dnl +dnl strerror()? +dnl + +AC_REPLACE_FUNCS([strerror memmem]) +AC_CHECK_DECLS([memmem]) + + +dnl +dnl integer types +dnl + +AC_CHECK_HEADERS(inttypes.h, have_inttypes_h=yes, have_inttypes_h=no) +AC_CHECK_HEADERS(sys/types.h, have_sys_types_h=yes, have_sys_types_h=no) + +if test $have_inttypes_h = no -a $have_sys_types_h = yes; then + AC_CACHE_CHECK([for uintXX_t typedefs], ac_cv_uint_t, + [AC_EGREP_HEADER(dnl +changequote(<<,>>)<<(^|[^a-zA-Z_0-9])uint32_t[^a-zA-Z_0-9]>>changequote([,]), + sys/types.h, ac_cv_uint_t=yes, ac_cv_uint_t=no)]) +fi +if test $have_inttypes_h = no -a $have_sys_types_h = yes -a "$ac_cv_uint_t" = no; then + AC_CACHE_CHECK([for u_intXX_t typedefs], ac_cv_u_int_t, + [AC_EGREP_HEADER(dnl +changequote(<<,>>)<<(^|[^a-zA-Z_0-9])u_int32_t[^a-zA-Z_0-9]>>changequote([,]), + sys/types.h, ac_cv_u_int_t=yes, ac_cv_u_int_t=no)]) +fi +if test $have_inttypes_h = yes -o "$ac_cv_uint_t" = yes; then + : +elif test "$ac_cv_u_int_t" = yes; then + AC_DEFINE(HAVE_U_INT_TYPES, 1, [Define if you have u_intXX_t types but not uintXX_t types.]) +else + AC_MSG_WARN([ +========================================= + +Neither uint32_t nor u_int32_t defined by or ! +Assuming "short" has 16 bits and "int" has 32 bits. + +=========================================]) + AC_DEFINE(HAVE_FAKE_INT_TYPES, 1, [Define if intXX_t types are not available.]) +fi + +AC_CHECK_TYPES(uintptr_t, [], [], +[#if HAVE_INTTYPES_H +# include +#endif +#if HAVE_SYS_TYPES_H +# include +#endif +]) + +AC_CHECK_SIZEOF(void *) +AC_CHECK_SIZEOF(unsigned long) +AC_CHECK_SIZEOF(unsigned int) + + +dnl +dnl verbatim portions of the header +dnl + +AH_TOP([#ifndef T1UTILS_CONFIG_H +#define T1UTILS_CONFIG_H]) + +AH_BOTTOM([#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Prototype strerror if we don't have it. */ +#if !HAVE_STRERROR +char* strerror(int errno); +#endif + +/* Prototype memmem if we don't have it. */ +#if !HAVE_MEMMEM || !HAVE_DECL_MEMMEM +void* memmem(const void* haystack, size_t haystack_len, + const void* needle, size_t needle_len); +#endif + +#ifdef __cplusplus +} +/* Get rid of a possible inline macro under C++. */ +# define inline inline +#endif + +#endif /* T1UTILS_CONFIG_H */]) + + +dnl +dnl Multiplatform output directories (for teTeX and TeX Live) +dnl + +AC_CANONICAL_HOST +AC_ARG_ENABLE([multiplatform], + [AS_HELP_STRING([--enable-multiplatform], + [put executables into bin/PLATFORM and libraries into lib/PLATFORM])]) +if test "x$enable_multiplatform" = xyes; then + test "x$bindir" = 'x${exec_prefix}/bin' && bindir="$bindir/$host" + test "x$libdir" = 'x${exec_prefix}/lib' && libdir="$libdir/$host" +fi + + +dnl +dnl Output +dnl + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/Build/source/utils/t1utils/t1utils-src/include/lcdf/clp.h b/Build/source/utils/t1utils/t1utils-src/include/lcdf/clp.h new file mode 100644 index 00000000000..37b75194ac0 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/include/lcdf/clp.h @@ -0,0 +1,334 @@ +/* -*- related-file-name: "../../liblcdf/clp.c" -*- */ +#ifndef LCDF_CLP_H +#define LCDF_CLP_H +#ifdef __cplusplus +extern "C" { +#endif + +/* clp.h - Public interface to CLP. + * This file is part of CLP, the command line parser package. + * + * Copyright (c) 1997-2014 Eddie Kohler, ekohler@gmail.com + * + * CLP is free software. It is distributed under the GNU General Public + * License, Version 2, or, alternatively and at your discretion, under the + * more permissive (BSD-like) Click LICENSE file as described below. + * + * 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, subject to the + * conditions listed in the Click LICENSE file, which is available in full at + * http://github.com/kohler/click/blob/master/LICENSE. The conditions + * include: you must preserve this copyright notice, and you cannot mention + * the copyright holders in advertising related to the Software without + * their permission. The Software is provided WITHOUT ANY WARRANTY, EXPRESS + * OR IMPLIED. This notice is a summary of the Click LICENSE file; the + * license in that file is binding. */ + +#include +#include + +typedef struct Clp_Option Clp_Option; +typedef struct Clp_Parser Clp_Parser; +typedef struct Clp_ParserState Clp_ParserState; + + +/** @brief Option description. + * + * CLP users declare arrays of Clp_Option structures to specify what options + * should be parsed. + * @sa Clp_NewParser, Clp_SetOptions */ +struct Clp_Option { + const char *long_name; /**< Name of long option, or NULL if the option + has no long name. */ + int short_name; /**< Character defining short option, or 0 if + the option has no short name. */ + int option_id; /**< User-specified ID defining option, + returned by Clp_Next. */ + int val_type; /**< ID of option's value type, or 0 if option + takes no value. */ + int flags; /**< Option parsing flags. */ +}; + +/** @name Value types + * These values describe the type of an option's argument and are used in + * the Clp_Option val_type field. For example, if an option took integers, its + * Clp_Option structure would have val_type set to Clp_ValInt. */ +/**@{*/ +#define Clp_NoVal 0 /**< @brief Option takes no value. */ +#define Clp_ValString 1 /**< @brief Option value is an + arbitrary string. */ +#define Clp_ValStringNotOption 2 /**< @brief Option value is a + non-option string. + + See Clp_DisallowOptions. */ +#define Clp_ValBool 3 /**< @brief Option value is a + boolean. + + Accepts "true", "false", "yes", "no", "1", and "0", or any + prefixes thereof. The match is case-insensitive. */ +#define Clp_ValInt 4 /**< @brief Option value is a + signed int. + + Accepts an optional "+" or "-" sign, followed by one or more + digits. The digits may be include a "0x" or "0X" prefix, for + a hexadecimal number, or a "0" prefix, for an octal number; + otherwise it is decimal. */ +#define Clp_ValUnsigned 5 /**< @brief Option value is an + unsigned int. + + Accepts an optional "+" sign, followed by one or more + digits. The digits may be include a "0x" or "0X" prefix, for + a hexadecimal number, or a "0" prefix, for an octal number; + otherwise it is decimal. */ +#define Clp_ValLong 6 /**< @brief Option value is a + signed long. */ +#define Clp_ValUnsignedLong 7 /**< @brief Option value is an + unsigned long. */ +#define Clp_ValDouble 8 /**< @brief Option value is a + double. + Accepts a real number as defined by strtod(). */ +#define Clp_ValFirstUser 10 /**< @brief Value types >= + Clp_ValFirstUser are available + for user types. */ +/**@}*/ + +/** @name Option flags + * These flags are used in the Clp_Option flags field. */ +/**@{*/ +#define Clp_Mandatory (1<<0) /**< @brief Option flag: value + is mandatory. + + It is an error if the option has no value. This is the + default if an option has arg_type != 0 and the Clp_Optional + flag is not provided. */ +#define Clp_Optional (1<<1) /**< @brief Option flag: value + is optional. */ +#define Clp_Negate (1<<2) /**< @brief Option flag: option + may be negated. + + --no-[long_name] will be accepted in argument lists. */ +#define Clp_OnlyNegated (1<<3) /**< @brief Option flag: option + must be negated. + + --no-[long_name] will be accepted in argument lists, but + --[long_name] will not. This is the default if long_name + begins with "no-". */ +#define Clp_PreferredMatch (1<<4) /**< @brief Option flag: prefer this + option when matching. + + Prefixes of --[long_name] should map to this option, even if + other options begin with --[long_name]. */ +/**@}*/ + +/** @name Option character types + * These flags are used in to define character types in Clp_SetOptionChar(). */ +/**@{*/ +/* Clp_NotOption 0 */ +#define Clp_Short (1<<0) /**< @brief Option character begins + a set of short options. */ +#define Clp_Long (1<<1) /**< @brief Option character begins + a long option. */ +#define Clp_ShortNegated (1<<2) /**< @brief Option character begins + a set of negated short options. */ +#define Clp_LongNegated (1<<3) /**< @brief Option character begins + a negated long option. */ +#define Clp_LongImplicit (1<<4) /**< @brief Option character can begin + a long option, and is part of that + long option. */ +/**@}*/ + +#define Clp_NotOption 0 /**< @brief Clp_Next value: argument + was not an option. */ +#define Clp_Done -1 /**< @brief Clp_Next value: there are + no more arguments. */ +#define Clp_BadOption -2 /**< @brief Clp_Next value: argument + was an erroneous option. */ +#define Clp_Error -3 /**< @brief Clp_Next value: internal + CLP error. */ + +#define Clp_ValSize 40 /**< @brief Minimum size of the + Clp_Parser val.cs field. */ +#define Clp_ValIntSize 10 /**< @brief Minimum size of the + Clp_Parser val.is field. */ + + +/** @brief A value parsing function. + * @param clp the parser + * @param vstr the value to be parsed + * @param complain if nonzero, report error messages via Clp_OptionError + * @param user_data user data passed to Clp_AddType() + * @return 1 if parsing succeeded, 0 otherwise + */ +typedef int (*Clp_ValParseFunc)(Clp_Parser *clp, const char *vstr, + int complain, void *user_data); + +/** @brief A function for reporting option errors. + * @param clp the parser + * @param message error message + */ +typedef void (*Clp_ErrorHandler)(Clp_Parser *clp, const char *message); + + +/** @brief Command line parser. + * + * A Clp_Parser object defines an instance of CLP, including allowed options, + * value types, and current arguments. + * @sa Clp_NewParser, Clp_SetOptions, Clp_SetArguments */ +struct Clp_Parser { + const Clp_Option *option; /**< The last option. */ + + int negated; /**< Whether the last option was negated. */ + + int have_val; /**< Whether the last option had a value. */ + const char *vstr; /**< The string value provided with the last + option. */ + + union { + int i; + unsigned u; + long l; + unsigned long ul; + double d; + const char *s; + void *pv; +#ifdef HAVE_INT64_TYPES + int64_t i64; + uint64_t u64; +#endif + char cs[Clp_ValSize]; + unsigned char ucs[Clp_ValSize]; + int is[Clp_ValIntSize]; + unsigned us[Clp_ValIntSize]; + } val; /**< The parsed value provided with the last + option. */ + + void *user_data; /**< Uninterpreted by CLP; users can set + arbitrarily. */ + + struct Clp_Internal *internal; +}; + +/** @cond never */ +#if __GNUC__ >= 4 +# define CLP_SENTINEL __attribute__((sentinel)) +#else +# define CLP_SENTINEL /* nothing */ +#endif +/** @endcond never */ + + +/** @brief Create a new Clp_Parser. */ +Clp_Parser *Clp_NewParser(int argc, const char * const *argv, + int nopt, const Clp_Option *opt); + +/** @brief Destroy a Clp_Parser object. */ +void Clp_DeleteParser(Clp_Parser *clp); + + +/** @brief Return @a clp's program name. */ +const char *Clp_ProgramName(Clp_Parser *clp); + +/** @brief Set @a clp's program name. */ +const char *Clp_SetProgramName(Clp_Parser *clp, const char *name); + + +/** @brief Set @a clp's error handler function. */ +Clp_ErrorHandler Clp_SetErrorHandler(Clp_Parser *clp, Clp_ErrorHandler errh); + +/** @brief Set @a clp's UTF-8 mode. */ +int Clp_SetUTF8(Clp_Parser *clp, int utf8); + +/** @brief Return @a clp's treatment of character @a c. */ +int Clp_OptionChar(Clp_Parser *clp, int c); + +/** @brief Set @a clp's treatment of character @a c. */ +int Clp_SetOptionChar(Clp_Parser *clp, int c, int type); + +/** @brief Set @a clp's option definitions. */ +int Clp_SetOptions(Clp_Parser *clp, int nopt, const Clp_Option *opt); + +/** @brief Set @a clp's arguments. */ +void Clp_SetArguments(Clp_Parser *clp, int argc, const char * const *argv); + +/** @brief Set whether @a clp is searching for options. */ +int Clp_SetOptionProcessing(Clp_Parser *clp, int on); + + +#define Clp_DisallowOptions (1<<0) /**< @brief Value type flag: value + can't be an option string. + + See Clp_AddType(). */ + +/** @brief Define a new value type for @a clp. */ +int Clp_AddType(Clp_Parser *clp, int val_type, int flags, + Clp_ValParseFunc parser, void *user_data); + + +#define Clp_AllowNumbers (1<<0) /**< @brief String list flag: allow + explicit numbers. + + See Clp_AddStringListType() and Clp_AddStringListTypeVec(). */ +#define Clp_StringListLong (1<<1) /**< @brief String list flag: values + have long type. */ + +/** @brief Define a new string list value type for @a clp. */ +int Clp_AddStringListTypeVec(Clp_Parser *clp, int val_type, int flags, + int nstrs, const char * const *strs, + const int *vals); + +/** @brief Define a new string list value type for @a clp. */ +int Clp_AddStringListType(Clp_Parser *clp, int val_type, int flags, ...) + CLP_SENTINEL; + + +/** @brief Parse and return the next argument from @a clp. */ +int Clp_Next(Clp_Parser *clp); + +/** @brief Return the next argument from @a clp without option parsing. */ +const char *Clp_Shift(Clp_Parser *clp, int allow_options); + + +/** @brief Create a new Clp_ParserState. */ +Clp_ParserState *Clp_NewParserState(void); + +/** @brief Destroy a Clp_ParserState object. */ +void Clp_DeleteParserState(Clp_ParserState *state); + +/** @brief Save @a clp's current state in @a state. */ +void Clp_SaveParser(const Clp_Parser *clp, Clp_ParserState *state); + +/** @brief Restore parser state from @a state into @a clp. */ +void Clp_RestoreParser(Clp_Parser *clp, const Clp_ParserState *state); + + +/** @brief Report a parser error. */ +int Clp_OptionError(Clp_Parser *clp, const char *format, ...); + +/** @brief Format a message. */ +int Clp_vsnprintf(Clp_Parser* clp, char* str, size_t size, + const char* format, va_list val); + +/** @brief Print a message. */ +int Clp_fprintf(Clp_Parser* clp, FILE* f, const char* format, ...); + +/** @brief Print a message. */ +int Clp_vfprintf(Clp_Parser* clp, FILE* f, const char* format, va_list val); + +/** @brief Extract the current option as a string. */ +int Clp_CurOptionNameBuf(Clp_Parser *clp, char *buf, int len); + +/** @brief Extract the current option as a string. */ +const char *Clp_CurOptionName(Clp_Parser *clp); + +/** @brief Test if the current option had long name @a name. */ +int Clp_IsLong(Clp_Parser *clp, const char *long_name); + +/** @brief Test if the current option had short name @a name. */ +int Clp_IsShort(Clp_Parser *clp, int short_name); + +#undef CLP_SENTINEL +#ifdef __cplusplus +} +#endif +#endif diff --git a/Build/source/utils/t1utils/t1utils-src/include/lcdf/inttypes.h b/Build/source/utils/t1utils/t1utils-src/include/lcdf/inttypes.h new file mode 100644 index 00000000000..b8bcedd120e --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/include/lcdf/inttypes.h @@ -0,0 +1,36 @@ +#ifndef LCDF_INTTYPES_H +#define LCDF_INTTYPES_H +/* Define known-width integer types. */ + +#include + +#ifdef HAVE_INTTYPES_H +# include +#elif defined(HAVE_SYS_TYPES_H) +# include +# ifdef HAVE_U_INT_TYPES +typedef u_int8_t uint8_t; +typedef u_int16_t uint16_t; +typedef u_int32_t uint32_t; +# endif +#endif + +#ifdef HAVE_FAKE_INT_TYPES +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed int int32_t; +typedef unsigned int uint32_t; +#endif + +#ifndef HAVE_UINTPTR_T +# if SIZEOF_VOID_P == SIZEOF_UNSIGNED_INT +typedef unsigned int uintptr_t; +# elif SIZEOF_VOID_P == SIZEOF_UNSIGNED_LONG +typedef unsigned long uintptr_t; +# endif +#endif + +/* Note: Windows compilers call these types '[un]signed __int8', etc. */ +#endif diff --git a/Build/source/utils/t1utils/t1utils-src/memmem.c b/Build/source/utils/t1utils/t1utils-src/memmem.c new file mode 100644 index 00000000000..a724dc6f517 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/memmem.c @@ -0,0 +1,34 @@ +/* Some operating systems might not have memmem. */ + +#ifdef HAVE_CONFIG_H +# include +#endif +#include +#include +#ifdef __cplusplus +extern "C" { +#endif + +#define memmem my_memmem + +void* +memmem(const void* haystack, size_t haystack_len, + const void* needle, size_t needle_len) +{ + const unsigned char* s = (const unsigned char*) haystack; + const unsigned char* ends = s + haystack_len - needle_len; + const unsigned char* p = (const unsigned char*) needle; + void* try; + if (needle_len == 0) + return (void*) haystack; + while (s <= ends && (try = memchr(s, *p, ends - s + 1))) + if (memcmp(try, p, needle_len) == 0) + return (void*) try; + else + s = (const unsigned char*) try + 1; + return 0; +} + +#ifdef __cplusplus +} +#endif diff --git a/Build/source/utils/t1utils/t1utils-src/t1ascii.1 b/Build/source/utils/t1utils/t1utils-src/t1ascii.1 new file mode 100644 index 00000000000..e8fa1e11a80 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1ascii.1 @@ -0,0 +1,51 @@ +.ds V 1.42 +.de M +.BR "\\$1" "(\\$2)\\$3" +.. +.TH T1ASCII 1 "" "Version \*V" +.SH NAME +t1ascii \- convert PostScript Type 1 font from binary to ASCII +.SH SYNOPSIS +.B t1ascii +\%[\fB\-l\fR \fIlength\fR] +\%[\fIinput\fR [\fIoutput\fR]] +.SH DESCRIPTION +.BR t1ascii +converts Adobe Type 1 font programs in PFB (binary) format to PFA +(hexadecimal) format. If the file +.I output +is not specified output goes to the standard output. +If the file +.I input +is not specified input comes from the standard input. +' +.SH OPTIONS +.TP 5 +.BI \-\-line\-length= "num\fR, " \-l " num" +Set the maximum length of encrypted lines in the output to +.I num. +(These are the lines consisting wholly of hexadecimal digits.) The default +is 64. +' +.TP 5 +.BR \-\-warnings ", " \-w +Warn when the input font contains lines longer than 255 characters. +Long lines don't strictly conform to Adobe's Document Structuring +Conventions, and may cause problems with older software. +' +.SH "SEE ALSO" +.LP +.M t1binary 1 , +.M t1unmac 1 , +.M t1mac 1 , +.M t1asm 1 , +.M t1disasm 1 +.LP +.I "Adobe Type 1 Font Format" +.SH AUTHORS +Lee Hetherington (ilh@lcs.mit.edu) +.br +Eddie Kohler (ekohler@gmail.com) +.PP +Ported to Microsoft C/C++ Compiler and MS-DOS operating system by +Kai-Uwe Herbing (herbing@netmbx.netmbx.de). diff --git a/Build/source/utils/t1utils/t1utils-src/t1ascii.c b/Build/source/utils/t1utils/t1utils-src/t1ascii.c new file mode 100644 index 00000000000..3e7d2abeb10 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1ascii.c @@ -0,0 +1,312 @@ +/* t1ascii + * + * This program takes an Adobe Type-1 font program in binary (PFB) format and + * converts it to ASCII (PFA) format. + * + * Copyright (c) 1992 by I. Lee Hetherington, all rights reserved. + * Copyright (c) 1998-2017 Eddie Kohler + * + * 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, subject to the + * conditions listed in the Click LICENSE file, which is available in full at + * http://github.com/kohler/click/blob/master/LICENSE. The conditions + * include: you must preserve this copyright notice, and you cannot mention + * the copyright holders in advertising related to the Software without + * their permission. The Software is provided WITHOUT ANY WARRANTY, EXPRESS + * OR IMPLIED. This notice is a summary of the Click LICENSE file; the + * license in that file is binding. + * + * New change log in `NEWS'. Old change log: + * + * Revision 1.2 92/06/23 10:58:43 ilh + * MSDOS porting by Kai-Uwe Herbing (herbing@netmbx.netmbx.de) + * incoporated. + * + * Revision 1.1 92/05/22 11:47:24 ilh + * initial version + * + * Ported to Microsoft C/C++ Compiler and MS-DOS operating system by + * Kai-Uwe Herbing (herbing@netmbx.netmbx.de) on June 12, 1992. Code + * specific to the MS-DOS version is encapsulated with #ifdef _MSDOS + * ... #endif, where _MSDOS is an identifier, which is automatically + * defined, if you compile with the Microsoft C/C++ Compiler. + * + */ + +/* Note: this is ANSI C. */ + +#ifdef HAVE_CONFIG_H +# include +#endif +#if defined(_MSDOS) || defined(_WIN32) +# include +# include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include "t1lib.h" + +#ifdef __cplusplus +extern "C" { +#endif + +static FILE *ofp; +static int line_length = 64; + + +/***** + * Command line + **/ + +#define OUTPUT_OPT 301 +#define VERSION_OPT 302 +#define HELP_OPT 303 +#define LINE_LEN_OPT 304 +#define WARNINGS_OPT 305 + +static Clp_Option options[] = { + { "help", 0, HELP_OPT, 0, 0 }, + { "line-length", 'l', LINE_LEN_OPT, Clp_ValInt, 0 }, + { "output", 'o', OUTPUT_OPT, Clp_ValString, 0 }, + { "version", 0, VERSION_OPT, 0, 0 }, + { "warnings", 'w', WARNINGS_OPT, 0, Clp_Negate } +}; +static const char *program_name; +static const char *ifp_filename = ""; +static int line_length_warning = -1; + +void +fatal_error(const char *message, ...) +{ + va_list val; + va_start(val, message); + fprintf(stderr, "%s: ", program_name); + vfprintf(stderr, message, val); + putc('\n', stderr); + va_end(val); + exit(1); +} + +void +error(const char *message, ...) +{ + va_list val; + va_start(val, message); + fprintf(stderr, "%s: ", program_name); + vfprintf(stderr, message, val); + putc('\n', stderr); + va_end(val); +} + +static void +short_usage(void) +{ + fprintf(stderr, "Usage: %s [OPTION]... [INPUT [OUTPUT]]\n\ +Try `%s --help' for more information.\n", + program_name, program_name); +} + +static void +usage(void) +{ + printf("\ +`T1ascii' translates a PostScript Type 1 font from compact binary (PFB) to\n\ +ASCII (PFA) format. The result is written to the standard output unless an\n\ +OUTPUT file is given.\n\ +\n\ +Usage: %s [OPTION]... [INPUT [OUTPUT]]\n\ +\n\ +Options:\n\ + -l, --line-length=NUM Set max encrypted line length (default 64).\n\ + -o, --output=FILE Write output to FILE.\n\ + -w, --warnings Warn on too-long lines.\n\ + -h, --help Print this message and exit.\n\ + --version Print version number and warranty and exit.\n\ +\n\ +Report bugs to .\n", program_name); +} + + +/***** + * PFA font_reader functions + **/ + +static int hexcol = 0; + +static void +pfa_output_ascii(char *data, int len) +{ + if (hexcol) { + putc('\n', ofp); + hexcol = 0; + } + if (line_length_warning == 0 && len > 256) { + line_length_warning = 1; + fprintf(stderr, "%s: warning: %s has lines longer than 255 characters\n%s: (This may cause problems with older printers.)\n", program_name, ifp_filename, program_name); + } + fputs(data, ofp); + if (len && data[len - 1] != '\n') { + int p = len - 2; + while (p > 0 && data[p] != '\n') + p--; + hexcol = (p ? len - p - 1 : hexcol + len); + } +} + +static void +pfa_output_binary(unsigned char *data, int len) +{ + static const char *hexchar = "0123456789abcdef"; + for (; len > 0; len--, data++) { + /* trim hexadecimal lines to line_length columns */ + if (hexcol >= line_length) { + putc('\n', ofp); + hexcol = 0; + } + putc(hexchar[(*data >> 4) & 0xf], ofp); + putc(hexchar[*data & 0xf], ofp); + hexcol += 2; + } +} + +static void +pfa_output_end(void) +{ +} + +#ifdef __cplusplus +} +#endif + + +/***** + * main() + **/ + +int +main(int argc, char *argv[]) +{ + struct font_reader fr; + int c; + FILE *ifp = 0; + + Clp_Parser *clp = + Clp_NewParser(argc, (const char * const *)argv, sizeof(options) / sizeof(options[0]), options); + program_name = Clp_ProgramName(clp); + + /* interpret command line arguments using CLP */ + while (1) { + int opt = Clp_Next(clp); + switch (opt) { + + case LINE_LEN_OPT: + line_length = clp->val.i; + if (line_length < 8) { + line_length = 8; + error("warning: line length raised to %d", line_length); + } else if (line_length > 1024) { + line_length = 1024; + error("warning: line length lowered to %d", line_length); + } + break; + + output_file: + case OUTPUT_OPT: + if (ofp) + fatal_error("output file already specified"); + if (strcmp(clp->vstr, "-") == 0) + ofp = stdout; + else { + ofp = fopen(clp->vstr, "w"); + if (!ofp) fatal_error("%s: %s", clp->vstr, strerror(errno)); + } + break; + + case WARNINGS_OPT: + line_length_warning = (clp->negated ? -1 : 0); + break; + + case HELP_OPT: + usage(); + exit(0); + break; + + case VERSION_OPT: + printf("t1ascii (LCDF t1utils) %s\n", VERSION); + printf("Copyright (C) 1992-2017 I. Lee Hetherington, Eddie Kohler et al.\n\ +This is free software; see the source for copying conditions.\n\ +There is NO warranty, not even for merchantability or fitness for a\n\ +particular purpose.\n"); + exit(0); + break; + + case Clp_NotOption: + if (ifp && ofp) + fatal_error("too many arguments"); + else if (ifp) + goto output_file; + if (strcmp(clp->vstr, "-") == 0) { + ifp_filename = ""; + ifp = stdin; + } else { + ifp_filename = clp->vstr; + ifp = fopen(clp->vstr, "rb"); + if (!ifp) + fatal_error("%s: %s", clp->vstr, strerror(errno)); + } + break; + + case Clp_Done: + goto done; + + case Clp_BadOption: + short_usage(); + exit(1); + break; + + } + } + + done: + if (!ifp) + ifp = stdin; + if (!ofp) + ofp = stdout; + if (line_length > 255 && line_length_warning == 0) + fprintf(stderr, "%s: warning: selected --line-length is greater than 255\n", program_name); + +#if defined(_MSDOS) || defined(_WIN32) + /* As we are processing a PFB (binary) input */ + /* file, we must set its file mode to binary. */ + _setmode(_fileno(ifp), _O_BINARY); + _setmode(_fileno(ofp), _O_BINARY); +#endif + + /* prepare font reader */ + fr.output_ascii = pfa_output_ascii; + fr.output_binary = pfa_output_binary; + fr.output_end = pfa_output_end; + + /* peek at first byte to see if it is the PFB marker 0x80 */ + c = getc(ifp); + ungetc(c, ifp); + + /* do the file */ + if (c == PFB_MARKER) + process_pfb(ifp, ifp_filename, &fr); + else if (c == '%') + process_pfa(ifp, ifp_filename, &fr); + else + fatal_error("%s does not start with font marker (`%%' or 0x80)", ifp_filename); + + fclose(ifp); + fclose(ofp); + return 0; +} diff --git a/Build/source/utils/t1utils/t1utils-src/t1asm.1 b/Build/source/utils/t1utils/t1utils-src/t1asm.1 new file mode 100644 index 00000000000..a346be75532 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1asm.1 @@ -0,0 +1,96 @@ +.ds V 1.42 +.de M +.BR "\\$1" "(\\$2)\\$3" +.. +.TH T1ASM 1 "" "Version \*V" +.SH NAME +t1asm \- assemble PostScript Type 1 font +.SH SYNOPSIS +.B t1asm +\%[\fB\-a\fR|\fB\-b\fR] +\%[\fB\-l\fR \fIlength\fR] +\%[\fIinput\fR [\fIoutput\fR]] +.SH DESCRIPTION +.B t1asm +assembles Adobe Type 1 font programs into either PFA (hexadecimal) or PFB +(binary) formats from a human-readable form. If the file +.I output +is not specified output goes to the standard output. If the file +.I input +is not specified input comes from the standard input. + +.B t1asm +tokenizes the charstring data and performs eexec and charstring encryption +as specified in the ``black book,'' +.I "Adobe Type 1 Font Format." + +The input must have a line of the form +.RS +.nf +.ft B +/-|{string currentfile exch readstring pop}executeonly def +.ft R +.fi +.RE +which defines the command, in this case `\-|', that is to start charstring +data. It is an error not to define such a command. Another common name for +this command is `RD'. + +After the start of the +.B Subrs +array in the input, all open braces `{' not in a comment begin a +charstring. Such a charstring is terminated by the next non-comment close +brace `}'. Within such a charstring, only comments, integers, and valid +charstring commands are allowed. Valid charstring command names can be +found in +.I "Adobe Type 1 Font Format" +and other documents describing the newer Type 2 opcodes. The format within +a charstring is unimportant as long as integers and commands are separated +by at least a one whitespace (space, tab, newline) character. Note that +within charstrings, comments are discarded because they cannot be encoded. +.SH OPTIONS +.TP 5 +.BR \-\-pfa ", " \-a +Output in PFA (ASCII) format. +.TP 5 +.BR \-\-pfb ", " \-b +Output in PFB (binary) format. This is the default. +.TP +.BI \-\-block\-length= "num\fR, " \-l " num" +PFB only: Set the maximum output block length to +.I num. +The default length is as large as memory allows. +.TP +.BI \-\-line\-length= "num\fR, " \-l " num" +PFA only: Set the maximum length of encrypted lines in the output to +.I num. +(These are the lines consisting wholly of hexadecimal digits.) The default +is 64. +.SH EXAMPLES +.LP +.nf +% t1asm Utopia-Regular.raw > Utopia-Regular.pfb +% t1asm -a Utopia-Regular.raw > Utopia-Regular.pfa +.fi +.SH "SEE ALSO" +.LP +.M t1disasm 1 , +.M t1ascii 1 , +.M t1binary 1 , +.M t1unmac 1 , +.M t1mac 1 +.LP +.I "Adobe Type 1 Font Format" +is available free from Adobe as a PDF file. +http://partners.adobe.com/asn/developer/PDFS/TN/T1_SPEC.PDF +.LP +.I "The Type 2 Charstring Format," +also available from Adobe as a PDF file, describes the newer Type 2 +operators, which are also used in some multiple-master Type 1 fonts like +Adobe Jenson and Kepler. +http://partners.adobe.com/asn/developer/PDFS/TN/5177.Type2.pdf +' +.SH AUTHORS +Lee Hetherington (ilh@lcs.mit.edu) +.br +Eddie Kohler (ekohler@gmail.com) diff --git a/Build/source/utils/t1utils/t1utils-src/t1asm.c b/Build/source/utils/t1utils/t1utils-src/t1asm.c new file mode 100644 index 00000000000..67a6ced2234 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1asm.c @@ -0,0 +1,810 @@ +/* t1asm -*- c-basic-offset: 2 -*- + * + * This program `assembles' Adobe Type-1 font programs in pseudo-PostScript + * form into either PFB or PFA format. The human readable/editable input is + * charstring- and eexec-encrypted as specified in the `Adobe Type 1 Font + * Format' version 1.1 (the `black book'). There is a companion program, + * t1disasm, which `disassembles' PFB and PFA files into a pseudo-PostScript + * file. + * + * Copyright (c) 1992 by I. Lee Hetherington, all rights reserved. + * Copyright (c) 1998-2017 Eddie Kohler + * + * 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, subject to the + * conditions listed in the Click LICENSE file, which is available in full at + * http://github.com/kohler/click/blob/master/LICENSE. The conditions + * include: you must preserve this copyright notice, and you cannot mention + * the copyright holders in advertising related to the Software without + * their permission. The Software is provided WITHOUT ANY WARRANTY, EXPRESS + * OR IMPLIED. This notice is a summary of the Click LICENSE file; the + * license in that file is binding. + * + * New change log in `NEWS'. Old change log: + * + * Revision 1.4 92/07/10 10:53:09 ilh + * Added support for additional PostScript after the closefile command + * (ie., some fonts have {restore}if after the cleartomark). + * + * Revision 1.3 92/06/23 10:58:25 ilh + * MSDOS porting by Kai-Uwe Herbing (herbing@netmbx.netmbx.de) + * incoporated. + * + * Revision 1.2 92/05/22 11:54:45 ilh + * Fixed bug where integers larger than 32000 could not be encoded in + * charstrings. Now integer range is correct for four-byte + * twos-complement integers: -(1<<31) <= i <= (1<<31)-1. Bug detected by + * Piet Tutelaers (rcpt@urc.tue.nl). + * + * Revision 1.1 92/05/22 11:48:46 ilh + * initial version + * + * Ported to Microsoft C/C++ Compiler and MS-DOS operating system by + * Kai-Uwe Herbing (herbing@netmbx.netmbx.de) on June 12, 1992. Code + * specific to the MS-DOS version is encapsulated with #ifdef _MSDOS + * ... #endif, where _MSDOS is an identifier, which is automatically + * defined, if you compile with the Microsoft C/C++ Compiler. + * + */ + +/* Note: this is ANSI C. */ + +#ifdef HAVE_CONFIG_H +# include +#endif +#if defined(_MSDOS) || defined(_WIN32) +# include +# include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include "t1lib.h" +#include "t1asmhelp.h" + +#define LINESIZE 512 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned char byte; + +static FILE *ifp; +static FILE *ofp; +static struct pfb_writer w; +static int blocklen = -1; + +/* flags */ +static int pfb = 1; +static int active = 0; +static int ever_active = 0; +static int start_charstring = 0; +static int in_eexec = 0; + +/* need to add 1 as space for \0 */ +static char line[LINESIZE + 1]; + +/* for charstring buffering */ +static byte *charstring_buf, *charstring_bp; +static int charstring_bufsiz; + +/* decryption stuff */ +static uint16_t er, cr; +static const uint32_t c1 = 52845; +static const uint32_t c2 = 22719; + +/* table of charstring commands */ +static struct command { + const char *name; + int one, two; +} command_table[] = { + { "abs", 12, 9 }, /* Type 2 */ + { "add", 12, 10 }, /* Type 2 */ + { "and", 12, 3 }, /* Type 2 */ + { "blend", 16, -1 }, /* Type 2 */ + { "callgsubr", 29, -1 }, /* Type 2 */ + { "callother", 12, 16 }, /* Type 1 ONLY */ + { "callothersubr", 12, 16 }, /* Type 1 ONLY */ + { "callsubr", 10, -1 }, + { "closepath", 9, -1 }, /* Type 1 ONLY */ + { "cntrmask", 20, -1 }, /* Type 2 */ + { "div", 12, 12 }, + { "dotsection", 12, 0 }, /* Type 1 ONLY */ + { "drop", 12, 18 }, /* Type 2 */ + { "dup", 12, 27 }, /* Type 2 */ + { "endchar", 14, -1 }, + { "eq", 12, 15 }, /* Type 2 */ + { "error", 0, -1 }, /* special */ + { "escape", 12, -1 }, /* special */ + { "exch", 12, 28 }, /* Type 2 */ + { "flex", 12, 35 }, /* Type 2 */ + { "flex1", 12, 37 }, /* Type 2 */ + { "get", 12, 21 }, /* Type 2 */ + { "hflex", 12, 34 }, /* Type 2 */ + { "hflex1", 12, 36 }, /* Type 2 */ + { "hhcurveto", 27, -1 }, /* Type 2 */ + { "hintmask", 19, -1 }, /* Type 2 */ + { "hlineto", 6, -1 }, + { "hmoveto", 22, -1 }, + { "hsbw", 13, -1 }, /* Type 1 ONLY */ + { "hstem", 1, -1 }, + { "hstem3", 12, 2 }, /* Type 1 ONLY */ + { "hstemhm", 18, -1 }, /* Type 2 */ + { "hvcurveto", 31, -1 }, + { "ifelse", 12, 22 }, /* Type 2 */ + { "index", 12, 29 }, /* Type 2 */ + { "load", 12, 13 }, /* Type 2 */ + { "mul", 12, 24 }, /* Type 2 */ + { "neg", 12, 14 }, /* Type 2 */ + { "not", 12, 5 }, /* Type 2 */ + { "or", 12, 4 }, /* Type 2 */ + { "pop", 12, 17 }, /* Type 1 ONLY */ + { "put", 12, 20 }, /* Type 2 */ + { "random", 12, 23 }, /* Type 2 */ + { "rcurveline", 24, -1 }, /* Type 2 */ + { "return", 11, -1 }, + { "rlinecurve", 25, -1 }, /* Type 2 */ + { "rlineto", 5, -1 }, + { "rmoveto", 21, -1 }, + { "roll", 12, 30 }, /* Type 2 */ + { "rrcurveto", 8, -1 }, + { "sbw", 12, 7 }, /* Type 1 ONLY */ + { "seac", 12, 6 }, /* Type 1 ONLY */ + { "setcurrentpoint", 12, 33 }, /* Type 1 ONLY */ + { "sqrt", 12, 26 }, /* Type 2 */ + { "store", 12, 8 }, /* Type 2 */ + { "sub", 12, 11 }, /* Type 2 */ + { "vhcurveto", 30, -1 }, + { "vlineto", 7, -1 }, + { "vmoveto", 4, -1 }, + { "vstem", 3, -1 }, + { "vstem3", 12, 1 }, /* Type 1 ONLY */ + { "vstemhm", 23, -1 }, /* Type 2 */ + { "vvcurveto", 26, -1 }, /* Type 2 */ +}; /* alphabetical */ + +/* Two separate encryption functions because eexec and charstring encryption + must proceed in parallel. */ + +static byte eencrypt(byte plain) +{ + byte cipher; + + cipher = (byte)(plain ^ (er >> 8)); + er = (uint16_t)((cipher + er) * c1 + c2); + return cipher; +} + +static byte cencrypt(byte plain) +{ + byte cipher; + + /* Thanks to Tom Kacvinsky who reported that lenIV == -1 means + unencrypted charstrings. */ + if (lenIV < 0) return plain; + + cipher = (byte)(plain ^ (cr >> 8)); + cr = (uint16_t)((cipher + cr) * c1 + c2); + return cipher; +} + +/* This function outputs a single byte. If output is in PFB format then output + is buffered through blockbuf[]. If output is in PFA format, then output + will be hexadecimal if in_eexec is set, ASCII otherwise. */ + +static void output_byte(byte b) +{ + static const char *hexchar = "0123456789abcdef"; + static int hexcol = 0; + + if (pfb) { + /* PFB */ + PFB_OUTPUT_BYTE(&w, b); + } else { + /* PFA */ + if (in_eexec) { + /* trim hexadecimal lines to `blocklen' columns */ + if (hexcol >= blocklen) { + putc('\n', ofp); + hexcol = 0; + } + putc(hexchar[(b >> 4) & 0xf], ofp); + putc(hexchar[b & 0xf], ofp); + hexcol += 2; + } else { + putc(b, ofp); + } + } +} + +/* This function outputs a byte through possible eexec encryption. */ + +static void eexec_byte(byte b) +{ + if (in_eexec) + output_byte(eencrypt(b)); + else + output_byte(b); +} + +/* This function outputs a null-terminated string through possible eexec + encryption. */ + +static void eexec_string(const char *string) +{ + while (*string) + eexec_byte(*string++); +} + +/* This function gets ready for the eexec-encrypted data. If output is in + PFB format then flush current ASCII block and get ready for binary block. + We start encryption with four random (zero) bytes. */ + +static void eexec_start(char *string) +{ + eexec_string("currentfile eexec\n"); + if (pfb && w.blocktyp != PFB_BINARY) { + pfb_writer_output_block(&w); + w.blocktyp = PFB_BINARY; + } + + in_eexec = 1; + er = 55665; + eexec_byte(0); + eexec_byte(0); + eexec_byte(0); + eexec_byte(0); + eexec_string(string); +} + +/* 25.Aug.1999 -- Return 1 if this line actually looks like the start of a + charstring. We use the heuristic that it should start with `/' (a name) or + `dup' (a subroutine). Previous heuristic caused killa bad output. */ + +static int check_line_charstring(void) +{ + char *p = line; + while (isspace((unsigned char) *p)) + p++; + return (*p == '/' || (p[0] == 'd' && p[1] == 'u' && p[2] == 'p')); +} + +/* This function returns an input line of characters. A line is terminated by + length (including terminating null) greater than LINESIZE, \r, \n, \r\n, or + when active (looking for charstrings) by '{'. When terminated by a newline + the newline is put into line[]. When terminated by '{', the '{' is not put + into line[], and the flag start_charstring is set to 1. */ + +static void t1utils_getline(void) +{ + int c; + char *p = line; + int comment = 0; + start_charstring = 0; + + while (p < line + LINESIZE) { + c = getc(ifp); + + if (c == EOF) + break; + else if (c == '%') + comment = 1; + else if (active && !comment && c == '{') { + /* 25.Aug.1999 -- new check for whether we should stop be active */ + if (check_line_charstring()) { + start_charstring = 1; + break; + } else + active = 0; + } + + *p++ = (char) c; + + /* end of line processing: change CR or CRLF into LF, and exit */ + if (c == '\r') { + c = getc(ifp); + if (c != '\n') + ungetc(c, ifp); + p[-1] = '\n'; + break; + } else if (c == '\n') + break; + } + + *p = '\0'; +} + +/* This function wraps-up the eexec-encrypted data and writes ASCII trailer. + If output is in PFB format then this entails flushing binary block and + starting an ASCII block. */ + +static void eexec_end(void) +{ + int i, j; + + if (!pfb) + putc('\n', ofp); + else if (w.blocktyp != PFB_ASCII) { + pfb_writer_output_block(&w); + w.blocktyp = PFB_ASCII; + } + + in_eexec = active = 0; + + for (i = 0; i < 8; i++) { + for (j = 0; j < 64; j++) + eexec_byte('0'); + eexec_byte('\n'); + } +} + +/* This function is used by the binary search, bsearch(), for command names in + the command table. */ + +static int CDECL command_compare(const void *key, const void *item) +{ + return strcmp((const char *) key, ((const struct command *) item)->name); +} + +/* This function returns 1 if the string is an integer and 0 otherwise. */ + +static int is_integer(char *string) +{ + if (isdigit((unsigned char) string[0]) || string[0] == '-' || string[0] == '+') { + while (*++string && isdigit((unsigned char) *string)) + ; /* deliberately empty */ + if (!*string) + return 1; + } + return 0; +} + +/* This function initializes charstring encryption. Note that this is called + at the beginning of every charstring. */ + +static void charstring_start(void) +{ + int i; + + if (!charstring_buf) { + charstring_bufsiz = 65536; + if (!(charstring_buf = (byte *) malloc(charstring_bufsiz))) + fatal_error("out of memory"); + } + + charstring_bp = charstring_buf; + cr = 4330; + for (i = 0; i < lenIV; i++) + *charstring_bp++ = cencrypt((byte) 0); +} + +/* This function encrypts and buffers a single byte of charstring data. */ + +static void charstring_byte(int v) +{ + byte b = (byte)(v & 0xff); + if (charstring_bp - charstring_buf == charstring_bufsiz) { + charstring_bufsiz *= 2; + if (!(charstring_buf = (byte *) realloc(charstring_buf, charstring_bufsiz))) + fatal_error("out of memory"); + charstring_bp = charstring_buf + charstring_bufsiz / 2; + } + *charstring_bp++ = cencrypt(b); +} + +/* This function outputs buffered, encrypted charstring data through possible + eexec encryption. */ + +static void charstring_end(void) +{ + byte *bp; + + sprintf(line, "%d ", (int) (charstring_bp - charstring_buf)); + eexec_string(line); + sprintf(line, "%s ", cs_start); + eexec_string(line); + for (bp = charstring_buf; bp < charstring_bp; bp++) + eexec_byte(*bp); +} + +/* This function generates the charstring representation of an integer. */ + +static void charstring_int(int num) +{ + int x; + + if (num >= -107 && num <= 107) { + charstring_byte(num + 139); + } else if (num >= 108 && num <= 1131) { + x = num - 108; + charstring_byte(x / 256 + 247); + charstring_byte(x % 256); + } else if (num >= -1131 && num <= -108) { + x = abs(num) - 108; + charstring_byte(x / 256 + 251); + charstring_byte(x % 256); + } else if (num >= (-2147483647-1) && num <= 2147483647) { + charstring_byte(255); + charstring_byte(num >> 24); + charstring_byte(num >> 16); + charstring_byte(num >> 8); + charstring_byte(num); + } else { + error("can't format huge number `%d'", num); + /* output 0 instead */ + charstring_byte(139); + } +} + +/* This function returns one charstring token. It ignores comments. */ + +static void get_charstring_token(void) +{ + int c = getc(ifp); + while (isspace(c)) + c = getc(ifp); + + if (c == '%') { + while (c != EOF && c != '\r' && c != '\n') + c = getc(ifp); + get_charstring_token(); + + } else if (c == '}') { + line[0] = '}'; + line[1] = 0; + + } else { + char *p = line; + while (p < line + LINESIZE) { + *p++ = c; + c = getc(ifp); + if (c == EOF || isspace(c) || c == '%' || c == '}') { + ungetc(c, ifp); + break; + } + } + *p = 0; + } +} + + +/* This function parses an entire charstring into integers and commands, + outputting bytes through the charstring buffer. */ + +static void parse_charstring(void) +{ + struct command *cp; + + charstring_start(); + while (!feof(ifp)) { + get_charstring_token(); + if (line[0] == '}') + break; + if (is_integer(line)) { + charstring_int(atoi(line)); + } else { + int one; + int two; + int ok = 0; + + cp = (struct command *) + bsearch((void *) line, (void *) command_table, + sizeof(command_table) / sizeof(struct command), + sizeof(struct command), + command_compare); + + if (cp) { + one = cp->one; + two = cp->two; + ok = 1; + + } else if (strncmp(line, "escape_", 7) == 0) { + /* Parse the `escape' keyword requested by Lee Chun-Yu and Werner + Lemberg */ + one = 12; + if (sscanf(line + 7, "%d", &two) == 1) + ok = 1; + + } else if (strncmp(line, "UNKNOWN_", 8) == 0) { + /* Allow unanticipated UNKNOWN commands. */ + one = 12; + if (sscanf(line + 8, "12_%d", &two) == 1) + ok = 1; + else if (sscanf(line + 8, "%d", &one) == 1) { + two = -1; + ok = 1; + } + } + + if (!ok) + error("unknown charstring command `%s'", line); + else if (one < 0 || one > 255) + error("bad charstring command number `%d'", one); + else if (two > 255) + error("bad charstring command number `%d'", two); + else if (two < 0) + charstring_byte(one); + else { + charstring_byte(one); + charstring_byte(two); + } + } + } + charstring_end(); +} + + +/***** + * Command line + **/ + +#define BLOCK_LEN_OPT 300 +#define OUTPUT_OPT 301 +#define VERSION_OPT 302 +#define HELP_OPT 303 +#define PFB_OPT 304 +#define PFA_OPT 305 + +static Clp_Option options[] = { + { "block-length", 'l', BLOCK_LEN_OPT, Clp_ValInt, 0 }, + { "help", 0, HELP_OPT, 0, 0 }, + { "line-length", 0, BLOCK_LEN_OPT, Clp_ValInt, 0 }, + { "output", 'o', OUTPUT_OPT, Clp_ValString, 0 }, + { "pfa", 'a', PFA_OPT, 0, 0 }, + { "pfb", 'b', PFB_OPT, 0, 0 }, + { "version", 0, VERSION_OPT, 0, 0 }, +}; +static const char *program_name; + +void +fatal_error(const char *message, ...) +{ + va_list val; + va_start(val, message); + fprintf(stderr, "%s: ", program_name); + vfprintf(stderr, message, val); + putc('\n', stderr); + va_end(val); + exit(1); +} + +void +error(const char *message, ...) +{ + va_list val; + va_start(val, message); + fprintf(stderr, "%s: ", program_name); + vfprintf(stderr, message, val); + putc('\n', stderr); + va_end(val); +} + +static void +short_usage(void) +{ + fprintf(stderr, "Usage: %s [OPTION]... [INPUT [OUTPUT]]\n\ +Try `%s --help' for more information.\n", + program_name, program_name); +} + +static void +usage(void) +{ + printf("\ +`T1asm' translates a human-readable version of a PostScript Type 1 font into\n\ +standard PFB or PFA format. The result is written to the standard output\n\ +unless an OUTPUT file is given.\n\ +\n\ +Usage: %s [OPTION]... [INPUT [OUTPUT]]\n\ +\n\ +Options:\n\ + -a, --pfa Output font in ASCII (PFA) format.\n\ + -b, --pfb Output font in binary (PFB) format. This is\n\ + the default.\n\ + -l, --block-length NUM Set max block length for PFB output.\n\ + -l, --line-length NUM Set max encrypted line length for PFA output.\n\ + -o, --output=FILE Write output to FILE.\n\ + -h, --help Print this message and exit.\n\ + --version Print version number and warranty and exit.\n\ +\n\ +Report bugs to .\n", program_name); +} + +#ifdef __cplusplus +} +#endif + + +int main(int argc, char *argv[]) +{ + char *p, *q; + + Clp_Parser *clp = + Clp_NewParser(argc, (const char * const *)argv, sizeof(options) / sizeof(options[0]), options); + program_name = Clp_ProgramName(clp); + + /* interpret command line arguments using CLP */ + while (1) { + int opt = Clp_Next(clp); + switch (opt) { + + case BLOCK_LEN_OPT: + blocklen = clp->val.i; + break; + + output_file: + case OUTPUT_OPT: + if (ofp) + fatal_error("output file already specified"); + if (strcmp(clp->vstr, "-") == 0) + ofp = stdout; + else if (!(ofp = fopen(clp->vstr, "w"))) + fatal_error("%s: %s", clp->vstr, strerror(errno)); + break; + + case PFB_OPT: + pfb = 1; + break; + + case PFA_OPT: + pfb = 0; + break; + + case HELP_OPT: + usage(); + exit(0); + break; + + case VERSION_OPT: + printf("t1asm (LCDF t1utils) %s\n", VERSION); + printf("Copyright (C) 1992-2017 I. Lee Hetherington, Eddie Kohler et al.\n\ +This is free software; see the source for copying conditions.\n\ +There is NO warranty, not even for merchantability or fitness for a\n\ +particular purpose.\n"); + exit(0); + break; + + case Clp_NotOption: + if (ifp && ofp) + fatal_error("too many arguments"); + else if (ifp) + goto output_file; + if (strcmp(clp->vstr, "-") == 0) + ifp = stdin; + else if (!(ifp = fopen(clp->vstr, "r"))) + fatal_error("%s: %s", clp->vstr, strerror(errno)); + break; + + case Clp_Done: + goto done; + + case Clp_BadOption: + short_usage(); + exit(1); + break; + + } + } + + done: + if (!pfb) { + if (blocklen == -1) + blocklen = 64; + else if (blocklen < 8) { + blocklen = 8; + error("warning: line length raised to %d", blocklen); + } else if (blocklen > 1024) { + blocklen = 1024; + error("warning: line length lowered to %d", blocklen); + } + } + + if (!ifp) ifp = stdin; + if (!ofp) ofp = stdout; + + if (pfb) + init_pfb_writer(&w, blocklen, ofp); + +#if defined(_MSDOS) || defined(_WIN32) + /* If we are processing a PFB (binary) output */ + /* file, we must set its file mode to binary. */ + _setmode(_fileno(ofp), _O_BINARY); +#endif + + /* Finally, we loop until no more input. Some special things to look for are + the `currentfile eexec' line, the beginning of the `/Subrs' or + `/CharStrings' definition, the definition of `/lenIV', and the definition + of the charstring start command which has `...string currentfile...' in + it. + + Being careful: Check with `/Subrs' and `/CharStrings' to see that a + number follows the token -- otherwise, the token is probably nested in a + subroutine a la Adobe Jenson, and we shouldn't pay attention to it. + + Bugs: Occurrence of `/Subrs 9' in a comment will fool t1asm. + + Thanks to Tom Kacvinsky who reported that some fonts come + without /Subrs sections and provided a patch. */ + + while (!feof(ifp) && !ferror(ifp)) { + t1utils_getline(); + + if (!ever_active) { + if (strncmp(line, "currentfile eexec", 17) == 0 && isspace((unsigned char) line[17])) { + /* Allow arbitrary whitespace after "currentfile eexec". + Thanks to Tom Kacvinsky for reporting this. + Note: strlen("currentfile eexec") == 17. */ + for (p = line + 18; isspace((unsigned char) *p); p++) + ; + eexec_start(p); + continue; + } else if (strncmp(line, "/lenIV", 6) == 0) { + set_lenIV(line, strlen(line)); + } else if ((p = strstr(line, "string currentfile"))) { + set_cs_start(line, strlen(line)); + } + } + + if (!active) { + if ((p = strstr(line, "/Subrs")) && isdigit((unsigned char) p[7])) + ever_active = active = 1; + else if ((p = strstr(line, "/CharStrings")) && isdigit((unsigned char) p[13])) + ever_active = active = 1; + } + if ((p = strstr(line, "currentfile closefile"))) { + /* 2/14/99 -- happy Valentine's day! -- don't look for `mark + currentfile closefile'; the `mark' might be on a different line */ + /* 1/3/2002 -- happy new year! -- Luc Devroye reports a failure with + some printers when `currentfile closefile' is followed by space */ + p += sizeof("currentfile closefile") - 1; + for (q = p; isspace((unsigned char) *q) && *q != '\n'; q++) + /* nada */; + if (q == p && !*q) + error("warning: `currentfile closefile' line too long"); + else if (q != p) { + if (*q != '\n') + error("text after `currentfile closefile' ignored"); + *p++ = '\n'; + *p++ = '\0'; + } + eexec_string(line); + break; + } + + eexec_string(line); + + /* output line data */ + if (start_charstring) { + if (!cs_start[0]) + fatal_error("couldn't find charstring start command"); + parse_charstring(); + } + } + + /* Handle remaining PostScript after the eexec section */ + if (in_eexec) + eexec_end(); + + /* There may be additional code. */ + while (!feof(ifp) && !ferror(ifp)) { + t1utils_getline(); + eexec_string(line); + } + + if (pfb) + pfb_writer_end(&w); + + /* the end! */ + if (!ever_active) + error("warning: no charstrings found in input file"); + fclose(ifp); + fclose(ofp); + return 0; +} diff --git a/Build/source/utils/t1utils/t1utils-src/t1asmhelp.h b/Build/source/utils/t1utils/t1utils-src/t1asmhelp.h new file mode 100644 index 00000000000..1cb5b09b180 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1asmhelp.h @@ -0,0 +1,58 @@ +#ifndef T1ASMHELP_H +#define T1ASMHELP_H + +static int lenIV = 4; + +/* If the line contains an entry of the form `/lenIV ' then set the global + lenIV to . This indicates the number of random bytes at the beginning + of each charstring. */ + +#define memmem my_memmem + +static void +set_lenIV(const char* line, size_t line_len) +{ + char* p = memmem(line, line_len, "/lenIV ", 7); + + /* Allow lenIV to be negative. Thanks to Tom Kacvinsky */ + if (p && p + 7 < line + line_len) { + const char* x = p + 7 + (p[7] == '+' || p[7] == '-'); + if (x < line + line_len && isdigit((unsigned char) *x)) { + lenIV = (unsigned char) *x - '0'; + for (++x; x < line + line_len && isdigit((unsigned char) *x); ++x) + lenIV = 10 * lenIV + (unsigned char) *x - '0'; + if (p[7] == '-') + lenIV = -lenIV; + } + } +} + + +static char cs_start_init[] = ""; +static char *cs_start = cs_start_init; + +static void +set_cs_start(const char* line, size_t line_len) +{ + static int cs_start_set = 0; + char *p, *q, *r; + + if ((p = memmem(line, line_len, "string currentfile", 18)) + && memmem(line, line_len, "readstring", 10)) { + /* locate the name of the charstring start command */ + for (q = p; q != line && *(q-1) != '/'; --q) + /* nada */; + if (q != line) { + for (r = q; r != p && !isspace((unsigned char) *r) && *r != '{'; ++r) + /* nada */; + if (cs_start_set) + free(cs_start); + cs_start = p = malloc(r - q + 1); + memcpy(p, q, r - q); + p[r - q] = 0; + cs_start_set = 1; + } + } +} + +#endif diff --git a/Build/source/utils/t1utils/t1utils-src/t1binary.1 b/Build/source/utils/t1utils/t1utils-src/t1binary.1 new file mode 100644 index 00000000000..9a1e8f02bed --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1binary.1 @@ -0,0 +1,42 @@ +.ds V 1.42 +.de M +.BR "\\$1" "(\\$2)\\$3" +.. +.TH T1BINARY 1 "" "Version \*V" +.SH NAME +t1binary \- convert PostScript Type 1 font from ASCII to binary +.SH SYNOPSIS +.B t1binary +\%[\fB\-l\fR \fIlength\fR] +\%[\fIinput\fR [\fIoutput\fR]] +.SH DESCRIPTION +.B t1binary +converts Adobe Type 1 font programs in PFA (hexadecimal) format to PFB +(binary) format. If the file +.I output +is not specified output goes to the standard output. +If the file +.I input +is not specified input comes from the standard input. +.SH OPTIONS +.TP 5 +.BI \-\-block\-length= "length\fR, " \-l " length" +Set the maximum length of sections in PFB output to +.I length. +The default length is as large as memory allows. +.SH "SEE ALSO" +.LP +.M t1ascii 1 , +.M t1unmac 1 , +.M t1mac 1 , +.M t1disasm 1 , +.M t1asm 1 +.LP +.I "Adobe Type 1 Font Format" +.SH AUTHORS +Lee Hetherington (ilh@lcs.mit.edu) +.br +Eddie Kohler (ekohler@gmail.com) +.PP +Ported to Microsoft C/C++ Compiler and MS-DOS operating system by +Kai-Uwe Herbing (herbing@netmbx.netmbx.de). diff --git a/Build/source/utils/t1utils/t1utils-src/t1binary.c b/Build/source/utils/t1utils/t1utils-src/t1binary.c new file mode 100644 index 00000000000..240617ada0b --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1binary.c @@ -0,0 +1,285 @@ +/* t1binary + * + * This program takes an Adobe Type-1 font program in ASCII (PFA) format and + * converts it to binary (PFB) format. + * + * Copyright (c) 1992 by I. Lee Hetherington, all rights reserved. + * Copyright (c) 1998-2017 Eddie Kohler + * + * 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, subject to the + * conditions listed in the Click LICENSE file, which is available in full at + * http://github.com/kohler/click/blob/master/LICENSE. The conditions + * include: you must preserve this copyright notice, and you cannot mention + * the copyright holders in advertising related to the Software without + * their permission. The Software is provided WITHOUT ANY WARRANTY, EXPRESS + * OR IMPLIED. This notice is a summary of the Click LICENSE file; the + * license in that file is binding. + * + * New change log in `NEWS'. Old change log: + * + * Revision 1.2 92/06/23 10:58:08 ilh + * MSDOS porting by Kai-Uwe Herbing (herbing@netmbx.netmbx.de) + * incoporated. + * + * Revision 1.1 92/05/22 11:58:17 ilh + * initial version + * + * Ported to Microsoft C/C++ Compiler and MS-DOS operating system by + * Kai-Uwe Herbing (herbing@netmbx.netmbx.de) on June 12, 1992. Code + * specific to the MS-DOS version is encapsulated with #ifdef _MSDOS + * ... #endif, where _MSDOS is an identifier, which is automatically + * defined, if you compile with the Microsoft C/C++ Compiler. + * + */ + +/* Note: this is ANSI C. */ + +#ifdef HAVE_CONFIG_H +# include +#endif +#if defined(_MSDOS) || defined(_WIN32) +# include +# include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include "t1lib.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned char byte; + +/* for PFB block buffering */ +static struct pfb_writer w; + + +/* PFB font_reader functions */ + +static void +pfb_output_ascii(char *s, int len) +{ + if (w.blocktyp == PFB_BINARY) { + pfb_writer_output_block(&w); + w.blocktyp = PFB_ASCII; + } + for (; len > 0; len--, s++) + PFB_OUTPUT_BYTE(&w, (byte)*s); +} + +static void +pfb_output_binary(unsigned char *s, int len) +{ + if (w.blocktyp == PFB_ASCII) { + pfb_writer_output_block(&w); + w.blocktyp = PFB_BINARY; + } + for (; len > 0; len--, s++) + PFB_OUTPUT_BYTE(&w, *s); +} + +static void +pfb_output_end(void) +{ + pfb_writer_end(&w); +} + + +/***** + * Command line + **/ + +#define BLOCK_LEN_OPT 300 +#define OUTPUT_OPT 301 +#define VERSION_OPT 302 +#define HELP_OPT 303 + +static Clp_Option options[] = { + { "block-length", 'l', BLOCK_LEN_OPT, Clp_ValInt, 0 }, + { "help", 0, HELP_OPT, 0, 0 }, + { "length", 0, BLOCK_LEN_OPT, Clp_ValInt, 0 }, + { "output", 'o', OUTPUT_OPT, Clp_ValString, 0 }, + { "version", 0, VERSION_OPT, 0, 0 }, +}; +static const char *program_name; + + +void +fatal_error(const char *message, ...) +{ + va_list val; + va_start(val, message); + fprintf(stderr, "%s: ", program_name); + vfprintf(stderr, message, val); + putc('\n', stderr); + va_end(val); + exit(1); +} + +void +error(const char *message, ...) +{ + va_list val; + va_start(val, message); + fprintf(stderr, "%s: ", program_name); + vfprintf(stderr, message, val); + putc('\n', stderr); + va_end(val); +} + + +static void +short_usage(void) +{ + fprintf(stderr, "Usage: %s [OPTION]... [INPUT [OUTPUT]]\n\ +Try `%s --help' for more information.\n", + program_name, program_name); +} + + +static void +usage(void) +{ + printf("\ +`T1binary' translates a PostScript Type 1 font from ASCII (PFA) to compact\n\ +binary (PFB) format. The result is written to the standard output unless an\n\ +OUTPUT file is given.\n\ +\n\ +Usage: %s [OPTION]... [INPUT [OUTPUT]]\n\ +\n\ +Options:\n\ + -l, --block-length=NUM Set max output block length.\n\ + -o, --output=FILE Write output to FILE.\n\ + -h, --help Print this message and exit.\n\ + --version Print version number and warranty and exit.\n\ +\n\ +Report bugs to .\n", program_name); +} + +#ifdef __cplusplus +} +#endif + + +int +main(int argc, char *argv[]) +{ + int c; + FILE *ifp = 0, *ofp = 0; + const char *ifp_filename = ""; + struct font_reader fr; + int max_blocklen = -1; + + Clp_Parser *clp = + Clp_NewParser(argc, (const char * const *)argv, sizeof(options) / sizeof(options[0]), options); + program_name = Clp_ProgramName(clp); + + /* interpret command line arguments using CLP */ + while (1) { + int opt = Clp_Next(clp); + switch (opt) { + + case BLOCK_LEN_OPT: + max_blocklen = clp->val.i; + if (max_blocklen <= 0) { + max_blocklen = 1; + error("warning: block length raised to %d", max_blocklen); + } + break; + + output_file: + case OUTPUT_OPT: + if (ofp) + fatal_error("output file already specified"); + if (strcmp(clp->vstr, "-") == 0) + ofp = stdout; + else { + ofp = fopen(clp->vstr, "wb"); + if (!ofp) fatal_error("%s: %s", clp->vstr, strerror(errno)); + } + break; + + case HELP_OPT: + usage(); + exit(0); + break; + + case VERSION_OPT: + printf("t1binary (LCDF t1utils) %s\n", VERSION); + printf("Copyright (C) 1992-2017 I. Lee Hetherington, Eddie Kohler et al.\n\ +This is free software; see the source for copying conditions.\n\ +There is NO warranty, not even for merchantability or fitness for a\n\ +particular purpose.\n"); + exit(0); + break; + + case Clp_NotOption: + if (ifp && ofp) + fatal_error("too many arguments"); + else if (ifp) + goto output_file; + if (strcmp(clp->vstr, "-") == 0) + ifp = stdin; + else { + ifp_filename = clp->vstr; + ifp = fopen(clp->vstr, "r"); + if (!ifp) fatal_error("%s: %s", clp->vstr, strerror(errno)); + } + break; + + case Clp_Done: + goto done; + + case Clp_BadOption: + short_usage(); + exit(1); + break; + + } + } + + done: + if (!ifp) ifp = stdin; + if (!ofp) ofp = stdout; + +#if defined(_MSDOS) || defined(_WIN32) + /* As we are processing a PFB (binary) output */ + /* file, we must set its file mode to binary. */ + _setmode(_fileno(ofp), _O_BINARY); +#endif + + /* prepare font reader and pfb writer */ + fr.output_ascii = pfb_output_ascii; + fr.output_binary = pfb_output_binary; + fr.output_end = pfb_output_end; + init_pfb_writer(&w, max_blocklen, ofp); + + /* peek at first byte to see if it is the PFB marker 0x80 */ + c = getc(ifp); + ungetc(c, ifp); + + /* do the file */ + if (c == PFB_MARKER) + process_pfb(ifp, ifp_filename, &fr); + else if (c == '%') + process_pfa(ifp, ifp_filename, &fr); + else + fatal_error("%s does not start with font marker (`%%' or 0x80)", ifp_filename); + + fclose(ifp); + fclose(ofp); + + if (!w.binary_blocks_written) + fatal_error("no binary blocks written! Are you sure this was a font?"); + + return 0; +} diff --git a/Build/source/utils/t1utils/t1utils-src/t1disasm.1 b/Build/source/utils/t1utils/t1utils-src/t1disasm.1 new file mode 100644 index 00000000000..60940523142 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1disasm.1 @@ -0,0 +1,96 @@ +.ds V 1.42 +.de M +.BR "\\$1" "(\\$2)\\$3" +.. +.TH T1DISASM 1 "" "Version \*V" +.SH NAME +t1disasm \- disassemble PostScript Type 1 font +.SH SYNOPSIS +.B t1disasm +\%[\fIinput\fR [\fIoutput\fR]] +.SH DESCRIPTION +.B t1disasm +disassembles Adobe Type 1 font programs in either PFA (hexadecimal) or PFB +(binary) formats into human-readable form. If the file +.I output +is not specified output goes to the standard output. +If the file +.I input +is not specified input comes from the standard input. + +.B t1disasm +performs eexec and charstring decryption as specified in the ``black +book'', +.I "Adobe Type 1 Font Format." +Additionally, the charstring binary tokens are expanded into human-readable +text form, using the names given in the black book and later documents +describing Type 2 opcodes. +.SH EXAMPLES +.LP +.nf +% t1disasm Utopia-Regular.pfb Utopia-Regular.raw +% t1disasm Utopia-Regular.pfa Utopia-Regular.raw +.fi + +In +.B Subrs +entries in Utopia-Regular.raw will look like +.RS +.nf +.ft B +dup 5 { + 8 111 vstem + \-12 128 hstem + 707 \-20 hstem + return + } | +.ft R +.fi +.RE +and the +.B CharStrings +entries like +.RS +.nf +.ft B +/exclam { + 58 242 hsbw + 6 callsubr + 5 4 callsubr + 63 707 rmoveto + \-54 0 \-5 \-22 4 \-45 rrcurveto + 40 \-431 rlineto + 29 hlineto + 42 431 rlineto + 4 45 \-5 22 \-55 0 rrcurveto + closepath + 6 4 callsubr + \-719 vmoveto + 243 callsubr + endchar + } |\- +.ft R +.fi +.RE +.SH "SEE ALSO" +.LP +.M t1asm 1 , +.M t1ascii 1 , +.M t1binary 1 , +.M t1unmac 1 , +.M t1mac 1 +.LP +.I "Adobe Type 1 Font Format" +is available free from Adobe as a PDF file: +http://partners.adobe.com/asn/developer/PDFS/TN/T1_SPEC.PDF +.LP +.I "The Type 2 Charstring Format," +also available from Adobe as a PDF file, describes the newer Type 2 +operators, which are also used in some multiple-master Type 1 fonts like +Adobe Jenson and Kepler: +http://partners.adobe.com/asn/developer/PDFS/TN/5177.Type2.pdf +' +.SH AUTHORS +Lee Hetherington (ilh@lcs.mit.edu) +.br +Eddie Kohler (ekohler@gmail.com) diff --git a/Build/source/utils/t1utils/t1utils-src/t1disasm.c b/Build/source/utils/t1utils/t1utils-src/t1disasm.c new file mode 100644 index 00000000000..4382f6839b7 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1disasm.c @@ -0,0 +1,760 @@ +/* t1disasm + * + * This program `disassembles' Adobe Type-1 font programs in either PFB or PFA + * format. It produces a human readable/editable pseudo-PostScript file by + * performing eexec and charstring decryption as specified in the `Adobe Type 1 + * Font Format' version 1.1 (the `black book'). There is a companion program, + * t1asm, which `assembles' such a pseudo-PostScript file into either PFB or + * PFA format. + * + * Copyright (c) 1992 by I. Lee Hetherington, all rights reserved. + * Copyright (c) 1998-2017 Eddie Kohler + * + * 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, subject to the + * conditions listed in the Click LICENSE file, which is available in full at + * http://github.com/kohler/click/blob/master/LICENSE. The conditions + * include: you must preserve this copyright notice, and you cannot mention + * the copyright holders in advertising related to the Software without + * their permission. The Software is provided WITHOUT ANY WARRANTY, EXPRESS + * OR IMPLIED. This notice is a summary of the Click LICENSE file; the + * license in that file is binding. + * + * New change log in `NEWS'. Old change log: + * + * Revision 1.4 92/07/10 10:55:08 ilh + * Added support for additional PostScript after the closefile command + * (ie., some fonts have {restore}if' after the cleartomark). Also, + * removed hardwired charstring start command (-| or RD) in favor of + * automatically determining it. + * + * Revision 1.3 92/06/23 10:57:53 ilh + * MSDOS porting by Kai-Uwe Herbing (herbing@netmbx.netmbx.de) + * incoporated. + * + * Revision 1.2 92/05/22 12:05:33 ilh + * Fixed bug where we were counting on sprintf to return its first + * argument---not true in ANSI C. This bug was detected by Piet + * Tutelaers (rcpt@urc.tue.nl). Also, fixed (signed) integer overflow + * error when testing high-order bit of integer for possible + * sign-extension by making comparison between unsigned integers. + * + * Revision 1.1 92/05/22 12:04:07 ilh + * initial version + * + * Ported to Microsoft C/C++ Compiler and MS-DOS operating system by + * Kai-Uwe Herbing (herbing@netmbx.netmbx.de) on June 12, 1992. Code + * specific to the MS-DOS version is encapsulated with #ifdef _MSDOS + * ... #endif, where _MSDOS is an identifier, which is automatically + * defined, if you compile with the Microsoft C/C++ Compiler. + * + */ + +/* Note: this is ANSI C. */ + +#ifdef HAVE_CONFIG_H +# include +#endif +#if defined(_MSDOS) || defined(_WIN32) +# include +# include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "t1lib.h" +#include "t1asmhelp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned char byte; + +static FILE *ofp; +static int unknown = 0; + +/* decryption stuff */ +static const uint32_t c1 = 52845; +static const uint32_t c2 = 22719; +static uint16_t cr_default = 4330; +static uint16_t er_default = 55665; + +static int error_count = 0; + + +/* Subroutine to output strings. */ + +static void +output(const char *string) +{ + fprintf(ofp, "%s", string); +} + +/* Subroutine to neatly format output of charstring tokens. If token = "\n", + then a newline is output. If at start of line (start == 1), prefix token + with tab, otherwise a space. */ + +static void +output_token(const char *token) +{ + static int start = 1; + if (strcmp(token, "\n") == 0) { + fprintf(ofp, "\n"); + start = 1; + } else { + fprintf(ofp, "%s%s", start ? "\t" : " ", token); + start = 0; + } +} + +/* Subroutine to decrypt and ASCII-ify tokens in charstring data. The + charstring decryption machinery is fired up, skipping the first lenIV + bytes, and the decrypted tokens are expanded into human-readable form. */ + +static void +decrypt_charstring(unsigned char *line, int len) +{ + int i; + int32_t val; + char buf[20]; + + /* decrypt charstring */ + if (lenIV >= 0) { + /* only decrypt if lenIV >= 0 -- negative lenIV means unencrypted + charstring. Thanks to Tom Kacvinsky */ + uint16_t cr = cr_default; + byte plain; + for (i = 0; i < len; i++) { + byte cipher = line[i]; + plain = (byte)(cipher ^ (cr >> 8)); + cr = (uint16_t)((cipher + cr) * c1 + c2); + line[i] = plain; + } + line += lenIV; + len -= lenIV; + } + + /* handle each charstring command */ + for (i = 0; i < len; i++) { + byte b = line[i]; + + if (b >= 32) { + if (b >= 32 && b <= 246) + val = b - 139; + else if (b >= 247 && b <= 250) { + i++; + val = (b - 247)*256 + 108 + line[i]; + } else if (b >= 251 && b <= 254) { + i++; + val = -(b - 251)*256 - 108 - line[i]; + } else { + uint32_t uval; + uval = (uint32_t) line[i+1] << 24; + uval |= (uint32_t) line[i+2] << 16; + uval |= (uint32_t) line[i+3] << 8; + uval |= (uint32_t) line[i+4] << 0; + /* in case an int32 is larger than four bytes---sign extend */ +#if INT_MAX > 0x7FFFFFFFUL + if (uval & 0x80000000U) + uval |= ~0x7FFFFFFFU; +#endif + val = (int32_t) uval; + i += 4; + } + sprintf(buf, "%d", val); + output_token(buf); + + } else { + switch (b) { + case 0: output_token("error"); break; /* special */ + case 1: output_token("hstem"); break; + case 3: output_token("vstem"); break; + case 4: output_token("vmoveto"); break; + case 5: output_token("rlineto"); break; + case 6: output_token("hlineto"); break; + case 7: output_token("vlineto"); break; + case 8: output_token("rrcurveto"); break; + case 9: output_token("closepath"); break; /* Type 1 ONLY */ + case 10: output_token("callsubr"); break; + case 11: output_token("return"); break; + case 13: output_token("hsbw"); break; /* Type 1 ONLY */ + case 14: output_token("endchar"); break; + case 16: output_token("blend"); break; /* Type 2 */ + case 18: output_token("hstemhm"); break; /* Type 2 */ + case 19: output_token("hintmask"); break; /* Type 2 */ + case 20: output_token("cntrmask"); break; /* Type 2 */ + case 21: output_token("rmoveto"); break; + case 22: output_token("hmoveto"); break; + case 23: output_token("vstemhm"); break; /* Type 2 */ + case 24: output_token("rcurveline"); break; /* Type 2 */ + case 25: output_token("rlinecurve"); break; /* Type 2 */ + case 26: output_token("vvcurveto"); break; /* Type 2 */ + case 27: output_token("hhcurveto"); break; /* Type 2 */ + case 28: { /* Type 2 */ + /* short integer */ + val = (line[i+1] & 0xff) << 8; + val |= (line[i+2] & 0xff); + i += 2; + if (val & 0x8000) + val |= ~0x7FFF; + sprintf(buf, "%d", val); + output_token(buf); + } + case 29: output_token("callgsubr"); break; /* Type 2 */ + case 30: output_token("vhcurveto"); break; + case 31: output_token("hvcurveto"); break; + case 12: + i++; + b = line[i]; + switch (b) { + case 0: output_token("dotsection"); break; /* Type 1 ONLY */ + case 1: output_token("vstem3"); break; /* Type 1 ONLY */ + case 2: output_token("hstem3"); break; /* Type 1 ONLY */ + case 3: output_token("and"); break; /* Type 2 */ + case 4: output_token("or"); break; /* Type 2 */ + case 5: output_token("not"); break; /* Type 2 */ + case 6: output_token("seac"); break; /* Type 1 ONLY */ + case 7: output_token("sbw"); break; /* Type 1 ONLY */ + case 8: output_token("store"); break; /* Type 2 */ + case 9: output_token("abs"); break; /* Type 2 */ + case 10: output_token("add"); break; /* Type 2 */ + case 11: output_token("sub"); break; /* Type 2 */ + case 12: output_token("div"); break; + case 13: output_token("load"); break; /* Type 2 */ + case 14: output_token("neg"); break; /* Type 2 */ + case 15: output_token("eq"); break; /* Type 2 */ + case 16: output_token("callothersubr"); break; /* Type 1 ONLY */ + case 17: output_token("pop"); break; /* Type 1 ONLY */ + case 18: output_token("drop"); break; /* Type 2 */ + case 20: output_token("put"); break; /* Type 2 */ + case 21: output_token("get"); break; /* Type 2 */ + case 22: output_token("ifelse"); break; /* Type 2 */ + case 23: output_token("random"); break; /* Type 2 */ + case 24: output_token("mul"); break; /* Type 2 */ + case 26: output_token("sqrt"); break; /* Type 2 */ + case 27: output_token("dup"); break; /* Type 2 */ + case 28: output_token("exch"); break; /* Type 2 */ + case 29: output_token("index"); break; /* Type 2 */ + case 30: output_token("roll"); break; /* Type 2 */ + case 33: output_token("setcurrentpoint"); break;/* Type 1 ONLY */ + case 34: output_token("hflex"); break; /* Type 2 */ + case 35: output_token("flex"); break; /* Type 2 */ + case 36: output_token("hflex1"); break; /* Type 2 */ + case 37: output_token("flex1"); break; /* Type 2 */ + default: + sprintf(buf, "escape_%d", b); + unknown++; + output_token(buf); + break; + } + break; + default: + sprintf(buf, "UNKNOWN_%d", b); + unknown++; + output_token(buf); + break; + } + output_token("\n"); + } + } + if (i > len) { + output("\terror\n"); + error("disassembly error: charstring too short"); + } +} + + +/* Disassembly font_reader functions */ + +static int in_eexec = 0; +static unsigned char *save = 0; +static int save_len = 0; +static int save_cap = 0; + +static void +append_save(const unsigned char *line, int len) +{ + if (line == save) { + assert(len <= save_cap); + save_len = len; + return; + } + if (save_len + len >= save_cap) { + unsigned char *new_save; + if (!save_cap) save_cap = 1024; + while (save_len + len >= save_cap) save_cap *= 2; + new_save = (unsigned char *)malloc(save_cap); + if (!new_save) + fatal_error("out of memory"); + memcpy(new_save, save, save_len); + free(save); + save = new_save; + } + memcpy(save + save_len, line, len); + save_len += len; +} + + +static unsigned char* +check_eexec_charstrings_begin(unsigned char* line, int line_len) +{ + unsigned char* line_end = line + line_len; + line = memmem(line, line_len, "/CharStrings ", 13); + if (!line) + return 0; + line += 13; + while (line < line_end && isspace(*line)) + ++line; + if (line == line_end || !isdigit(*line)) + return 0; + while (line < line_end && isdigit(*line)) + ++line; + if (line == line_end || !isspace(*line)) + return 0; + while (line < line_end && isspace(*line)) + ++line; + if (line_end - line < 14 || memcmp(line, "dict dup begin", 14) != 0) + return 0; + line += 14; + while (line < line_end && isspace(*line)) + ++line; + if (line == line_end || *line != '/') + return 0; + return line; +} + + +/* returns 1 if next \n should be deleted */ + +static int +eexec_line(unsigned char *line, int line_len) +{ + int cs_start_len = strlen(cs_start); + int pos; + int first_space; + int digits; + int cut_newline = 0; + + /* append this data to the end of `save' if necessary */ + if (save_len) { + append_save(line, line_len); + line = save; + line_len = save_len; + save_len = 0; + } + + if (!line_len) + return 0; + + /* Look for charstring start */ + + /* skip first word */ + for (pos = 0; pos < line_len && isspace(line[pos]); pos++) + ; + while (pos < line_len && !isspace(line[pos])) + pos++; + if (pos >= line_len) + goto not_charstring; + + /* skip spaces */ + first_space = pos; + while (pos < line_len && isspace(line[pos])) + pos++; + if (pos >= line_len || !isdigit(line[pos])) + goto not_charstring; + + /* skip number */ + digits = pos; + while (pos < line_len && isdigit(line[pos])) + pos++; + + /* check for subr (another number) */ + if (pos < line_len - 1 && isspace(line[pos]) && isdigit(line[pos+1])) { + first_space = pos; + digits = pos + 1; + for (pos = digits; pos < line_len && isdigit(line[pos]); pos++) + ; + } + + /* check for charstring start */ + if (pos + 2 + cs_start_len < line_len + && pos > digits + && line[pos] == ' ' + && strncmp((const char *)(line + pos + 1), cs_start, cs_start_len) == 0 + && line[pos + 1 + cs_start_len] == ' ') { + /* check if charstring is long enough */ + int cs_len = atoi((const char *)(line + digits)); + if (pos + 2 + cs_start_len + cs_len < line_len) { + /* long enough! */ + if (line[line_len - 1] == '\r') { + line[line_len - 1] = '\n'; + cut_newline = 1; + } + fprintf(ofp, "%.*s {\n", first_space, line); + decrypt_charstring(line + pos + 2 + cs_start_len, cs_len); + pos += 2 + cs_start_len + cs_len; + fprintf(ofp, "\t}%.*s", line_len - pos, line + pos); + return cut_newline; + } else { + /* not long enough! */ + append_save(line, line_len); + return 0; + } + } + + /* otherwise, just output the line */ + not_charstring: + /* 6.Oct.2003 - Werner Lemberg reports a stupid Omega font that behaves + badly: a charstring definition follows "/Charstrings ... begin", ON THE + SAME LINE. */ + { + unsigned char* csbegin = check_eexec_charstrings_begin(line, line_len); + if (csbegin) { + int len = csbegin - line; + fprintf(ofp, "%.*s\n", len, line); + return eexec_line(csbegin, line_len - len); + } + } + + if (line[line_len - 1] == '\r') { + line[line_len - 1] = '\n'; + cut_newline = 1; + } + set_lenIV((char*) line, line_len); + set_cs_start((char*) line, line_len); + fprintf(ofp, "%.*s", line_len, line); + + /* look for `currentfile closefile' to see if we should stop decrypting */ + if (memmem(line, line_len, "currentfile closefile", 21) != 0) + in_eexec = -1; + + return cut_newline; +} + +static int +all_zeroes(const char *string) +{ + if (*string != '0') + return 0; + while (*string == '0') + string++; + return *string == '\0' || *string == '\n'; +} + +static void +disasm_output_ascii(char *line, int len) +{ + int was_in_eexec = in_eexec; + (void) len; /* avoid warning */ + in_eexec = 0; + + /* if we came from a binary section, we need to process that too */ + if (was_in_eexec > 0) { + unsigned char zero = 0; + eexec_line(&zero, 0); + } + + /* if we just came from the "ASCII part" of an eexec section, we need to + process the saved lines */ + if (was_in_eexec < 0) { + int i = 0; + int save_char = 0; /* note: save[] is unsigned char * */ + + while (i < save_len) { + /* grab a line */ + int start = i; + while (i < save_len && save[i] != '\r' && save[i] != '\n') + i++; + if (i < save_len) { + if (i < save_len - 1 && save[i] == '\r' && save[i+1] == '\n') + save_char = -1; + else + save_char = save[i+1]; + save[i] = '\n'; + save[i+1] = 0; + } else + save[i] = 0; + + /* output it */ + disasm_output_ascii((char *)(save + start), -1); + + /* repair damage */ + if (i < save_len) { + if (save_char >= 0) { + save[i+1] = save_char; + i++; + } else + i += 2; + } + } + save_len = 0; + } + + if (!all_zeroes(line)) + output(line); +} + +/* collect until '\n' or end of binary section */ + +static void +disasm_output_binary(unsigned char *data, int len) +{ + static int ignore_newline; + static uint16_t er; + + byte plain; + int i; + + /* in the ASCII portion of a binary section, just save this data */ + if (in_eexec < 0) { + append_save(data, len); + return; + } + + /* eexec initialization */ + if (in_eexec == 0) { + er = er_default; + ignore_newline = 0; + in_eexec = 0; + } + if (in_eexec < 4) { + for (i = 0; i < len && in_eexec < 4; i++, in_eexec++) { + byte cipher = data[i]; + plain = (byte)(cipher ^ (er >> 8)); + er = (uint16_t)((cipher + er) * c1 + c2); + data[i] = plain; + } + data += i; + len -= i; + } + + /* now make lines: collect until '\n' or '\r' and pass them off to + eexec_line. */ + i = 0; + while (in_eexec > 0) { + int start = i; + + for (; i < len; i++) { + byte cipher = data[i]; + plain = (byte)(cipher ^ (er >> 8)); + er = (uint16_t)((cipher + er) * c1 + c2); + data[i] = plain; + if (plain == '\r' || plain == '\n') + break; + } + + if (ignore_newline && start < i && data[start] == '\n') { + ignore_newline = 0; + continue; + } + + if (i >= len) { + if (start < len) + append_save(data + start, i - start); + break; + } + + i++; + ignore_newline = eexec_line(data + start, i - start); + } + + /* if in_eexec < 0, we have some plaintext lines sitting around in a binary + section of the PFB. save them for later */ + if (in_eexec < 0 && i < len) + append_save(data + i, len - i); +} + +static void +disasm_output_end(void) +{ + /* take care of leftover saved data */ + static char crap[1] = ""; + disasm_output_ascii(crap, 0); +} + + +/***** + * Command line + **/ + +#define OUTPUT_OPT 301 +#define VERSION_OPT 302 +#define HELP_OPT 303 + +static Clp_Option options[] = { + { "help", 0, HELP_OPT, 0, 0 }, + { "output", 'o', OUTPUT_OPT, Clp_ValString, 0 }, + { "version", 0, VERSION_OPT, 0, 0 }, +}; +static const char *program_name; + +void +fatal_error(const char *message, ...) +{ + va_list val; + va_start(val, message); + fprintf(stderr, "%s: ", program_name); + vfprintf(stderr, message, val); + fputc('\n', stderr); + va_end(val); + exit(1); +} + +void +error(const char *message, ...) +{ + va_list val; + va_start(val, message); + fprintf(stderr, "%s: ", program_name); + vfprintf(stderr, message, val); + fputc('\n', stderr); + error_count++; + va_end(val); +} + +static void +short_usage(void) +{ + fprintf(stderr, "Usage: %s [INPUT [OUTPUT]]\n\ +Try `%s --help' for more information.\n", + program_name, program_name); +} + +static void +usage(void) +{ + printf("\ +`T1disasm' translates a PostScript Type 1 font in PFB or PFA format into a\n\ +human-readable, human-editable form. The result is written to the standard\n\ +output unless an OUTPUT file is given.\n\ +\n\ +Usage: %s [OPTION]... [INPUT [OUTPUT]]\n\ +\n\ +Options:\n\ + -o, --output=FILE Write output to FILE.\n\ + -h, --help Print this message and exit.\n\ + --version Print version number and warranty and exit.\n\ +\n\ +Report bugs to .\n", program_name); +} + +#ifdef __cplusplus +} +#endif + + +int +main(int argc, char *argv[]) +{ + struct font_reader fr; + int c; + FILE *ifp = 0; + const char *ifp_filename = ""; + + Clp_Parser *clp = + Clp_NewParser(argc, (const char * const *)argv, sizeof(options) / sizeof(options[0]), options); + program_name = Clp_ProgramName(clp); + + /* interpret command line arguments using CLP */ + while (1) { + int opt = Clp_Next(clp); + switch (opt) { + + output_file: + case OUTPUT_OPT: + if (ofp) + fatal_error("output file already specified"); + if (strcmp(clp->vstr, "-") == 0) + ofp = stdout; + else { + ofp = fopen(clp->vstr, "w"); + if (!ofp) fatal_error("%s: %s", clp->vstr, strerror(errno)); + } + break; + + case HELP_OPT: + usage(); + exit(0); + break; + + case VERSION_OPT: + printf("t1disasm (LCDF t1utils) %s\n", VERSION); + printf("Copyright (C) 1992-2017 I. Lee Hetherington, Eddie Kohler et al.\n\ +This is free software; see the source for copying conditions.\n\ +There is NO warranty, not even for merchantability or fitness for a\n\ +particular purpose.\n"); + exit(0); + break; + + case Clp_NotOption: + if (ifp && ofp) + fatal_error("too many arguments"); + else if (ifp) + goto output_file; + if (strcmp(clp->vstr, "-") == 0) + ifp = stdin; + else { + ifp_filename = clp->vstr; + ifp = fopen(clp->vstr, "rb"); + if (!ifp) fatal_error("%s: %s", clp->vstr, strerror(errno)); + } + break; + + case Clp_Done: + goto done; + + case Clp_BadOption: + short_usage(); + exit(1); + break; + + } + } + + done: + if (!ifp) ifp = stdin; + if (!ofp) ofp = stdout; + +#if defined(_MSDOS) || defined(_WIN32) + /* As we might be processing a PFB (binary) input file, we must set its file + mode to binary. */ + _setmode(_fileno(ifp), _O_BINARY); + _setmode(_fileno(ofp), _O_BINARY); +#endif + + /* prepare font reader */ + fr.output_ascii = disasm_output_ascii; + fr.output_binary = disasm_output_binary; + fr.output_end = disasm_output_end; + + /* peek at first byte to see if it is the PFB marker 0x80 */ + c = getc(ifp); + ungetc(c, ifp); + + /* do the file */ + if (c == PFB_MARKER) + process_pfb(ifp, ifp_filename, &fr); + else if (c == '%') + process_pfa(ifp, ifp_filename, &fr); + else + fatal_error("%s does not start with font marker (`%%' or 0x80)", ifp_filename); + + fclose(ifp); + fclose(ofp); + + if (unknown) + error((unknown > 1 + ? "encountered %d unknown charstring commands" + : "encountered %d unknown charstring command"), + unknown); + + return (error_count ? 1 : 0); +} diff --git a/Build/source/utils/t1utils/t1utils-src/t1lib.c b/Build/source/utils/t1utils/t1utils-src/t1lib.c new file mode 100644 index 00000000000..80af787dc06 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1lib.c @@ -0,0 +1,449 @@ +/* t1lib + * + * This file contains functions for reading PFA and PFB files. + * + * Copyright (c) 1998-2017 Eddie Kohler + * + * 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, subject to the + * conditions listed in the Click LICENSE file, which is available in full at + * http://github.com/kohler/click/blob/master/LICENSE. The conditions + * include: you must preserve this copyright notice, and you cannot mention + * the copyright holders in advertising related to the Software without + * their permission. The Software is provided WITHOUT ANY WARRANTY, EXPRESS + * OR IMPLIED. This notice is a summary of the Click LICENSE file; the + * license in that file is binding. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif +#include +#include +#include +#include +#include "t1lib.h" +#ifdef __cplusplus +extern "C" { +#endif + +#define PFA_ASCII 1 +#define PFA_EEXEC_TEST 2 +#define PFA_HEX 3 +#define PFA_BINARY 4 + +/* This function returns the value (0-15) of a single hex digit. It returns + 0 for an invalid hex digit. */ + +static int +hexval(char c) +{ + if (c >= 'A' && c <= 'F') + return c - 'A' + 10; + else if (c >= 'a' && c <= 'f') + return c - 'a' + 10; + else if (c >= '0' && c <= '9') + return c - '0'; + else + return 0; +} + +/* This function translates a string of hexadecimal digits into binary data. + We allow an odd number of digits. Returns length of binary data. */ + +static int +translate_hex_string(char *s, char *saved_orphan) +{ + int c1 = *saved_orphan; + char *start = s; + char *t = s; + for (; *s; s++) { + if (isspace((unsigned char) *s)) + continue; + if (c1) { + *t++ = (hexval(c1) << 4) + hexval(*s); + c1 = 0; + } else + c1 = *s; + } + *saved_orphan = c1; + return t - start; +} + +/* This function returns 1 if the string contains all '0's. */ + +static int +all_zeroes(char *s) +{ + if (*s == '\0' || *s == '\n') + return 0; + while (*s == '0') + s++; + return *s == '\0' || *s == '\n'; +} + +/* This function handles the entire file. */ + +#define LINESIZE 1024 + +void +process_pfa(FILE *ifp, const char *ifp_filename, struct font_reader *fr) +{ + /* Loop until no more input. We need to look for `currentfile eexec' to + start eexec section (hex to binary conversion) and line of all zeros to + switch back to ASCII. */ + + /* Don't use fgets() in case line-endings are indicated by bare \r's, as + occurs in Macintosh fonts. */ + + /* 2.Aug.1999 - At the behest of Tom Kacvinsky , support + binary PFA fonts. */ + + char buffer[LINESIZE]; + int c = 0; + int blocktyp = PFA_ASCII; + char saved_orphan = 0; + (void)ifp_filename; + + while (c != EOF) { + char *line = buffer, *last = buffer; + int crlf = 0; + c = getc(ifp); + while (c != EOF && c != '\r' && c != '\n' && last < buffer + LINESIZE - 1) { + *last++ = c; + c = getc(ifp); + } + + /* handle the end of the line */ + if (last == buffer + LINESIZE - 1) + /* buffer overrun: don't append newline even if we have it */ + ungetc(c, ifp); + else if (c == '\r' && blocktyp != PFA_BINARY) { + /* change CR or CR/LF into LF, unless reading binary data! (This + condition was wrong before, caused Thanh problems - + 6.Mar.2001) */ + c = getc(ifp); + if (c != '\n') + ungetc(c, ifp), crlf = 1; + else + crlf = 2; + *last++ = '\n'; + } else if (c != EOF) + *last++ = c; + + *last = 0; + + /* now that we have the line, handle it */ + if (blocktyp == PFA_ASCII) { + if (strncmp(line, "currentfile eexec", 17) == 0 && isspace((unsigned char) line[17])) { + char saved_p; + /* assert(line == buffer); */ + for (line += 18; isspace((unsigned char) *line); line++) + /* nada */; + saved_p = *line; + *line = 0; + fr->output_ascii(buffer, line - buffer); + *line = saved_p; + blocktyp = PFA_EEXEC_TEST; + if (!*line) + continue; + } else { + fr->output_ascii(line, last - line); + continue; + } + } + + /* check immediately after "currentfile eexec" for ASCII or binary */ + if (blocktyp == PFA_EEXEC_TEST) { + /* 8.Feb.2004: fix bug if first character in a binary eexec block + is 0, reported by Werner Lemberg */ + for (; line < last && isspace((unsigned char) *line); line++) + /* nada */; + if (line == last) + continue; + else if (last >= line + 4 && isxdigit((unsigned char) line[0]) + && isxdigit((unsigned char) line[1]) + && isxdigit((unsigned char) line[2]) + && isxdigit((unsigned char) line[3])) + blocktyp = PFA_HEX; + else + blocktyp = PFA_BINARY; + memmove(buffer, line, last - line + 1); + last = buffer + (last - line); + line = buffer; + /* patch up crlf fix */ + if (blocktyp == PFA_BINARY && crlf) { + last[-1] = '\r'; + if (crlf == 2) + *last++ = '\n'; + } + } + + /* blocktyp == PFA_HEX || blocktyp == PFA_BINARY */ + if (all_zeroes(line)) { /* XXX not safe */ + fr->output_ascii(line, last - line); + blocktyp = PFA_ASCII; + } else if (blocktyp == PFA_HEX) { + int len = translate_hex_string(line, &saved_orphan); + if (len) + fr->output_binary((unsigned char *)line, len); + } else + fr->output_binary((unsigned char *)line, last - line); + } + + fr->output_end(); +} + +/* Process a PFB file. */ + +/* XXX Doesn't handle "currentfile eexec" as intelligently as process_pfa + does. */ + +static int +handle_pfb_ascii(struct font_reader *fr, char *line, int len) +{ + /* Divide PFB_ASCII blocks into lines */ + int start = 0; + + while (1) { + int pos = start; + + while (pos < len && line[pos] != '\n' && line[pos] != '\r') + pos++; + + if (pos >= len) { + if (pos == start) + return 0; + else if (start == 0 && pos == LINESIZE - 1) { + line[pos] = 0; + fr->output_ascii(line, pos); + return 0; + } else { + memmove(line, line + start, pos - start); + return pos - start; + } + + } else if (pos < len - 1 && line[pos] == '\r' && line[pos+1] == '\n') { + line[pos] = '\n'; + line[pos+1] = 0; + fr->output_ascii(line + start, pos + 1 - start); + start = pos + 2; + + } else { + char save = line[pos+1]; + line[pos] = '\n'; + line[pos+1] = 0; + fr->output_ascii(line + start, pos + 1 - start); + line[pos+1] = save; + start = pos + 1; + } + } +} + + +void +process_pfb(FILE *ifp, const char *ifp_filename, struct font_reader *fr) +{ + int blocktyp = 0; + unsigned block_len = 0; + int c = 0; + unsigned filepos = 0; + int linepos = 0; + char line[LINESIZE]; + + while (1) { + while (block_len == 0) { + c = getc(ifp); + blocktyp = getc(ifp); + if (c != PFB_MARKER + || (blocktyp != PFB_ASCII && blocktyp != PFB_BINARY + && blocktyp != PFB_DONE)) { + if (c == EOF || blocktyp == EOF) + error("%s corrupted: no end-of-file marker", ifp_filename); + else + error("%s corrupted: bad block marker at position %u", + ifp_filename, filepos); + blocktyp = PFB_DONE; + } + if (blocktyp == PFB_DONE) + goto done; + + block_len = getc(ifp) & 0xFF; + block_len |= (getc(ifp) & 0xFF) << 8; + block_len |= (getc(ifp) & 0xFF) << 16; + block_len |= (unsigned) (getc(ifp) & 0xFF) << 24; + if (feof(ifp)) { + error("%s corrupted: bad block length at position %u", + ifp_filename, filepos); + blocktyp = PFB_DONE; + goto done; + } + filepos += 6; + } + + /* read the block in its entirety, in LINESIZE chunks */ + while (block_len > 0) { + unsigned rest = LINESIZE - 1 - linepos; /* leave space for '\0' */ + unsigned n = (block_len > rest ? rest : block_len); + int actual = fread(line + linepos, 1, n, ifp); + if (actual != (int) n) { + error("%s corrupted: block short by %u bytes at position %u", + ifp_filename, block_len - actual, filepos); + block_len = actual; + } + + if (blocktyp == PFB_BINARY) + fr->output_binary((unsigned char *)line, actual); + else + linepos = handle_pfb_ascii(fr, line, linepos + actual); + + block_len -= actual; + filepos += actual; + } + + /* handle any leftover line */ + if (linepos > 0) { + line[linepos] = 0; + fr->output_ascii(line, linepos); + linepos = 0; + } + } + + done: + c = getc(ifp); + if (c != EOF) + error("%s corrupted: data after PFB end marker at position %u", + ifp_filename, filepos - 2); + fr->output_end(); +} + + +#define DEFAULT_BLOCKLEN (1L<<12) + +void +init_pfb_writer(struct pfb_writer *w, int blocklen, FILE *f) +{ + w->len = DEFAULT_BLOCKLEN; + w->buf = (unsigned char *)malloc(w->len); + if (!w->buf) + fatal_error("out of memory"); + w->max_len = (blocklen <= 0 ? 0xFFFFFFFFU : (unsigned)blocklen); + w->pos = 0; + w->blocktyp = PFB_ASCII; + w->binary_blocks_written = 0; + w->f = f; +} + +void +pfb_writer_output_block(struct pfb_writer *w) +{ + /* do nothing if nothing in block */ + if (w->pos == 0) + return; + + /* output four-byte block length */ + putc(PFB_MARKER, w->f); + putc(w->blocktyp, w->f); + putc((int)(w->pos & 0xff), w->f); + putc((int)((w->pos >> 8) & 0xff), w->f); + putc((int)((w->pos >> 16) & 0xff), w->f); + putc((int)((w->pos >> 24) & 0xff), w->f); + + /* output block data */ + fwrite(w->buf, 1, w->pos, w->f); + + /* mark block buffer empty and uninitialized */ + w->pos = 0; + if (w->blocktyp == PFB_BINARY) + w->binary_blocks_written++; +} + +void +pfb_writer_grow_buf(struct pfb_writer *w) +{ + if (w->len < w->max_len) { + /* grow w->buf */ + unsigned new_len = w->len * 2; + unsigned char *new_buf; + if (new_len > w->max_len) + new_len = w->max_len; + new_buf = (unsigned char *)malloc(new_len); + if (!new_buf) { + error("out of memory; continuing with a smaller block size"); + w->max_len = w->len; + pfb_writer_output_block(w); + } else { + memcpy(new_buf, w->buf, w->len); + free(w->buf); + w->buf = new_buf; + w->len = new_len; + } + + } else + /* buf already the right size, just output the block */ + pfb_writer_output_block(w); +} + +void +pfb_writer_end(struct pfb_writer *w) +{ + if (w->pos) + pfb_writer_output_block(w); + putc(PFB_MARKER, w->f); + putc(PFB_DONE, w->f); +} + +/* This CRC table and routine were borrowed from macutils-2.0b3 */ + +static unsigned short crctab[256] = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, + 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, + 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, + 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, + 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, + 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, + 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, + 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, + 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, + 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, + 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, + 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, + 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, + 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, + 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, + 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, + 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, + 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, + 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, + 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, + 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, + 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, + 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0, +}; + +/* + * Update a CRC check on the given buffer. + */ + +int +crcbuf(int crc, unsigned int len, const char *buf) +{ + const unsigned char *ubuf = (const unsigned char *)buf; + while (len--) + crc = ((crc << 8) & 0xFF00) ^ crctab[((crc >> 8) & 0xFF) ^ *ubuf++]; + return crc; +} + +#ifdef __cplusplus +} +#endif diff --git a/Build/source/utils/t1utils/t1utils-src/t1lib.h b/Build/source/utils/t1utils/t1utils-src/t1lib.h new file mode 100644 index 00000000000..93859fea731 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1lib.h @@ -0,0 +1,56 @@ +#ifndef T1LIB_H +#define T1LIB_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef WIN32 +# pragma warning (disable: 4007 4096) +# define CDECL __cdecl +#else +# define CDECL +#endif + +#define PFB_MARKER 128 +#define PFB_ASCII 1 +#define PFB_BINARY 2 +#define PFB_DONE 3 + +struct font_reader { + void (*output_ascii)(char *, int); + void (*output_binary)(unsigned char *, int); + void (*output_end)(); +}; + +void process_pfa(FILE *, const char *filename, struct font_reader *); +void process_pfb(FILE *, const char *filename, struct font_reader *); + +struct pfb_writer { + unsigned char *buf; + unsigned len; + unsigned max_len; + unsigned pos; + int blocktyp; + int binary_blocks_written; + FILE *f; +}; + +void init_pfb_writer(struct pfb_writer *, int, FILE *); +void pfb_writer_output_block(struct pfb_writer *); +void pfb_writer_grow_buf(struct pfb_writer *); +void pfb_writer_end(struct pfb_writer *); +#define PFB_OUTPUT_BYTE(w, b) do { \ + if ((w)->pos >= (w)->len) pfb_writer_grow_buf(w); \ + (w)->buf[(w)->pos++] = (b); \ + } while (0) + +int crcbuf(int crc, unsigned int len, const char *buf); + +/* whoever uses this code must provide a definition for these functions */ +extern void error(const char *, ...); +extern void fatal_error(const char *, ...); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Build/source/utils/t1utils/t1utils-src/t1mac.1 b/Build/source/utils/t1utils/t1utils-src/t1mac.1 new file mode 100644 index 00000000000..d19c96f3d41 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1mac.1 @@ -0,0 +1,62 @@ +.ds V 1.42 +.de M +.BR "\\$1" "(\\$2)\\$3" +.. +.TH T1MAC 1 "" "Version \*V" +.SH NAME +t1mac \- translate a PFA or PFB PostScript Type 1 font into Macintosh format +.SH SYNOPSIS +.B t1mac +\%[\fB\-\-macbinary\fR | \fB\-\-applesingle\fR | +\fB\-\-appledouble\fR | \fB\-\-binhex\fR | \fB\-\-raw\fR] +\%[\fB\-\-filename\fR \fIname\fR] +\%[\fIinput\fR [\fIoutput\fR]] +.SH DESCRIPTION +.B t1mac +reads a PFA (hexadecimal) or PFB (binary) PostScript Type 1 font file and +generates an equivalent Macintosh Type 1 font file. The output file can be +in MacBinary II, AppleSingle, AppleDouble, or BinHex format, or it can be a +raw resource fork. The default is MacBinary II; use an option to choose a +different format. If the +.I output +file is not specified output goes to the standard output. +.PP +WARNING: The output of +.B t1mac +is not sufficient to use the font, since Macintoshes can't read raw Type 1 +fonts. You will need to create a font suitcase containing bitmap fonts if +you do not have such a suitcase for the font already. +.B t1mac +cannot help you do this. +.SH OPTIONS +.TP 5 +.BR \-\-raw ", " \-r +Indicates that output should be a raw resource fork. +.TP 5 +.BR \-\-macbinary +Indicates that output should be in MacBinary I or II format. This is the +default. +.TP 5 +.BR \-\-applesingle +Indicates that output should be in AppleSingle format. +.TP 5 +.BR \-\-appledouble +Indicates that output should be in AppleDouble format. +.TP 5 +.BR \-\-binhex +Indicates that output should be in BinHex 4.0 format. +.TP 5 +.BR \-\-filename "=\fIname\fR, " \-n " \fIname\fR" +Sets the Macintosh filename of the output font to \fIname\fR. The default +is to construct the filename from the font's name using established +Macintosh conventions. This option is not useful when output is a raw +resource fork. +.SH "SEE ALSO" +.LP +.M t1unmac 1 , +.M t1ascii 1 , +.M t1binary 1 , +.M t1asm 1 , +.M t1disasm 1 +.SH AUTHORS +Eddie Kohler (ekohler@gmail.com) diff --git a/Build/source/utils/t1utils/t1utils-src/t1mac.c b/Build/source/utils/t1utils/t1utils-src/t1mac.c new file mode 100644 index 00000000000..3b5657e1075 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1mac.c @@ -0,0 +1,1028 @@ +/* t1mac + * + * This program converts Type 1 fonts in PFA or PFB format into Macintosh Type + * 1 fonts stored in MacBinary (I or II), AppleSingle, AppleDouble, BinHex, or + * raw resource fork format. + * + * Copyright (c) 2000-2017 Eddie Kohler + * + * 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, subject to the + * conditions listed in the Click LICENSE file, which is available in full at + * http://github.com/kohler/click/blob/master/LICENSE. The conditions + * include: you must preserve this copyright notice, and you cannot mention + * the copyright holders in advertising related to the Software without + * their permission. The Software is provided WITHOUT ANY WARRANTY, EXPRESS + * OR IMPLIED. This notice is a summary of the Click LICENSE file; the + * license in that file is binding. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif +#if defined(_MSDOS) || defined(_WIN32) +# include +# include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "t1lib.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned char byte; + +/* resource fork layout */ +#define RFORK_HEADERLEN 256 +#define RFORK_MAP_RESERVEDLEN 22 +#define RFORK_MAP_HEADERLEN 28 +#define RFORK_RTYPE_LEN 8 +#define RFORK_RSRC_LEN 12 + +/* Macintosh times are # seconds since 1/1/1904, not 1/1/1970 */ +#define MAC_TIME_DELTA 2082844800 + +/* POST resource information */ +#define POST_ASCII 1 +#define POST_BINARY 2 +#define POST_END 5 + +/* Adobe font file information */ +#define T1_FILETYPE 0x4C57464E /* LWFN */ +#define T1_FILECREATOR 0x54315554 /* T1UT */ +#define T1_FINDERFLAGS 33 /* Bundle + Inited */ + +#define MAX_RSRC_LEN 2048 +static byte rbuf[MAX_RSRC_LEN]; +static int rbufpos; +static int blocktyp; + +static char *font_name; + +/* information about the resources being built */ +typedef struct Rsrc { + int32_t type; + int id; + int attrs; + int data_offset; + uint32_t data_len; + int next_in_type; + int next_type; +} Rsrc; +static Rsrc *rsrc = 0; +static int nrsrc = 0; +static int rsrc_cap = 0; +static int cur_post_id = 0; + +/* output resource fork */ +static FILE *rfork_f = 0; + +/* ICN# data */ +static const unsigned char icon_bw_data[] = { +0,0,0,0,255,255,255,255,128,0,0,1,128,0,0,1,128,0,0,1, +128,0,0,1,128,0,0,1,128,0,0,1,128,0,0,1,128,0,0,33, +128,0,0,97,128,0,0,225,128,0,1,225,128,0,3,225,128,0,7,225, +128,0,15,225,128,0,31,225,128,0,55,225,159,128,103,249,144,128,199,9, +240,129,135,15,0,131,7,0,0,134,7,0,15,140,7,240,8,31,255,240, +8,63,255,240,8,96,7,240,8,192,7,240,9,192,15,240,11,224,31,240, +15,240,63,240,15,255,255,240,0,0,0,0,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,240,255,255,15,240,255,255,15,0,255,255,0,0,255,255,0, +15,255,255,240,15,255,255,240,15,255,255,240,15,255,255,240,15,255,255,240, +15,255,255,240,15,255,255,240,15,255,255,240,15,255,255,240,}; + +static const unsigned char small_icon_bw_data[] = { +255,255,128,1,128,1,128,1,128,5,128,13,128,29,128,61,128,125,184,253, +201,179,59,60,39,252,44,60,60,124,63,252,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,207,243,63,252,63,252,63,252, +63,252,63,252,}; + +static const unsigned char icon_8_data[] = { +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,105,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,105,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,105, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,105,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,105,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,105,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,105,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,5,92,92,92,92,105, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,5,5,92,92,92,92,105,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,5,5,5,92, +92,92,92,105,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,5,5,5,5,92,92,92,92,105,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,5,5, +5,5,5,92,92,92,92,105,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,5,5,5,5,5,5,92,92,92,92,105, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +5,5,5,5,5,5,5,92,92,92,92,105,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,5,5,5,5,5,5,5,5,92, +92,92,92,105,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,5,5,92,5,5,5,5,5,5,92,92,92,92,105,92,92,92,105, +105,105,105,105,92,92,92,92,92,92,92,92,92,5,5,92,92,5,5,105, +105,105,105,105,92,92,92,105,92,92,92,105,0,0,0,0,92,92,92,92, +92,92,92,92,5,5,92,92,92,5,5,105,0,0,0,0,92,92,92,105, +105,105,105,105,0,0,0,0,92,92,92,92,92,92,92,5,5,92,92,92, +92,5,5,105,0,0,0,0,105,105,105,105,0,0,0,0,0,0,0,0, +92,92,92,92,92,92,5,5,92,92,92,92,92,5,5,105,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,92,92,92,92,92,5,5,92, +92,92,92,92,92,5,5,105,0,0,0,0,0,0,0,0,0,0,0,0, +92,92,92,92,92,92,92,92,5,5,92,92,92,92,92,92,92,5,5,5, +5,5,5,92,0,0,0,0,0,0,0,0,92,92,92,92,92,92,92,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,105,0,0,0,0, +0,0,0,0,92,92,92,92,92,92,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,105,0,0,0,0,0,0,0,0,92,92,92,92, +92,5,5,92,92,92,92,92,92,92,92,92,92,5,5,5,5,5,5,105, +0,0,0,0,0,0,0,0,92,92,92,92,5,5,92,92,92,92,92,92, +92,92,92,92,92,5,5,5,5,5,5,105,0,0,0,0,0,0,0,0, +92,92,92,5,5,5,92,92,92,92,92,92,92,92,92,92,5,5,5,5, +5,5,5,105,0,0,0,0,0,0,0,0,92,92,5,5,5,5,5,92, +92,92,92,92,92,92,92,5,5,5,5,5,5,5,5,105,0,0,0,0, +0,0,0,0,92,5,5,5,5,5,5,5,92,92,92,92,92,92,5,5, +5,5,5,5,5,5,5,105,0,0,0,0,0,0,0,0,92,105,105,105, +105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, +0,0,0,0,}; + +static const unsigned char small_icon_8_data[] = { +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,105,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,105,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,105,92,92,92,92,92,92,92,92,92,92,92,92,92,5,92,105, +92,92,92,92,92,92,92,92,92,92,92,92,5,5,92,105,92,92,92,92, +92,92,92,92,92,92,92,5,5,5,92,105,92,92,92,92,92,92,92,92, +92,92,5,5,5,5,92,105,92,92,92,92,92,92,92,92,92,5,92,5, +5,5,92,105,92,105,105,105,92,92,92,92,5,92,92,5,105,105,92,105, +92,105,0,0,92,92,92,5,92,92,92,5,0,0,105,105,0,0,92,92, +92,92,5,92,92,92,92,5,5,5,0,0,0,0,92,92,92,5,5,5, +5,5,5,5,5,5,0,0,0,0,92,92,5,92,92,92,92,92,92,5, +5,5,0,0,0,0,92,5,5,92,92,92,92,92,5,5,5,5,0,0, +0,0,5,5,5,5,105,105,105,5,5,5,5,5,0,0,}; + +static const unsigned char icon_4_data[] = { +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,69,69,69, +69,69,69,69,69,69,69,69,69,69,69,69,84,84,84,84,84,84,84,84, +84,84,84,84,84,84,84,85,69,69,69,69,69,69,69,69,69,69,69,69, +69,69,69,69,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,85, +69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,84,84,84,84, +84,84,84,84,84,84,84,84,84,84,84,85,69,69,69,69,69,69,69,69, +69,69,69,69,69,69,69,69,84,84,84,84,84,84,84,84,84,84,84,84, +84,84,84,85,69,69,69,69,69,69,69,69,69,69,69,69,69,21,69,69, +84,84,84,84,84,84,84,84,84,84,84,84,81,20,84,85,69,69,69,69, +69,69,69,69,69,69,69,69,17,21,69,69,84,84,84,84,84,84,84,84, +84,84,84,81,17,20,84,85,69,69,69,69,69,69,69,69,69,69,69,17, +17,21,69,69,84,84,84,84,84,84,84,84,84,84,81,17,17,20,84,85, +69,69,69,69,69,69,69,69,69,69,17,17,17,21,69,69,84,84,84,84, +84,84,84,84,84,81,17,17,17,20,84,85,69,69,69,69,69,69,69,69, +69,17,65,17,17,21,69,69,84,85,85,85,84,84,84,84,81,20,81,21, +85,85,84,85,69,69,0,0,69,69,69,69,17,69,65,21,0,0,69,69, +85,85,0,0,84,84,84,81,20,84,81,21,0,0,85,85,0,0,0,0, +69,69,69,17,69,69,65,21,0,0,0,0,0,0,0,0,84,84,81,20, +84,84,81,21,0,0,0,0,0,0,69,69,69,69,17,69,69,69,65,17, +17,30,0,0,0,0,84,84,84,81,17,17,17,17,17,17,17,21,0,0, +0,0,69,69,69,17,17,17,17,17,17,17,17,21,0,0,0,0,84,84, +81,20,84,84,84,84,81,17,17,21,0,0,0,0,69,69,17,69,69,69, +69,69,65,17,17,21,0,0,0,0,84,81,17,84,84,84,84,84,17,17, +17,21,0,0,0,0,69,17,17,21,69,69,69,65,17,17,17,21,0,0, +0,0,81,17,17,17,84,84,84,17,17,17,17,21,0,0,0,0,229,85, +85,85,85,85,85,85,85,85,85,85,0,0,}; + +static const unsigned char small_icon_4_data[] = { +84,84,84,84,84,84,84,85,69,69,69,69,69,69,69,69,84,84,84,84, +84,84,84,85,69,69,69,69,69,69,69,69,84,84,84,84,84,84,81,85, +69,69,69,69,69,69,17,69,84,84,84,84,84,81,17,85,69,69,69,69, +69,17,17,69,84,84,84,84,81,81,17,85,69,85,69,69,21,65,85,69, +85,0,84,81,84,81,0,85,0,69,69,21,69,65,17,0,0,84,81,17, +17,17,17,0,0,69,21,69,69,65,17,0,0,81,20,84,84,17,17,0, +0,17,17,85,81,17,17,0,}; + + +/* fseek with fatal_error */ + +static void +reposition(FILE *fi, int32_t absolute) +{ + if (fseek(fi, absolute, 0) == -1) + fatal_error("can't seek to position %d", absolute); +} + +/* Some functions to write one, two, three, and four byte integers in 68000 + byte order (most significant byte first). */ + +static void +write_one(int c, FILE *f) +{ + putc(c, f); +} + +static void +write_two(int c, FILE *f) +{ + putc((c >> 8) & 255, f); + putc(c & 255, f); +} + +static void +write_three(int32_t c, FILE *f) +{ + putc((c >> 16) & 255, f); + putc((c >> 8) & 255, f); + putc(c & 255, f); +} + +static void +write_four(int32_t c, FILE *f) +{ + putc((c >> 24) & 255, f); + putc((c >> 16) & 255, f); + putc((c >> 8) & 255, f); + putc(c & 255, f); +} + +/* Some functions to store one, two, three, and four byte integers in 68000 + byte order (most significant byte first). */ + +static void +store_one(int c, char *s) +{ + s[0] = (char)(c & 255); +} + +static void +store_two(int c, char *s) +{ + s[0] = (char)((c >> 8) & 255); + s[1] = (char)(c & 255); +} + +static void +store_four(int32_t c, char *s) +{ + s[0] = (char)((c >> 24) & 255); + s[1] = (char)((c >> 16) & 255); + s[2] = (char)((c >> 8) & 255); + s[3] = (char)(c & 255); +} + +static void +output_new_rsrc(const char *rtype, int rid, int attrs, + const char *data, uint32_t len) +{ + Rsrc *r; + if (nrsrc >= rsrc_cap) { + rsrc_cap = (rsrc_cap ? rsrc_cap * 2 : 256); + r = (Rsrc *)malloc(sizeof(Rsrc) * rsrc_cap); + if (!r) + fatal_error("out of memory"); + memcpy(r, rsrc, sizeof(Rsrc) * nrsrc); + free(rsrc); + rsrc = r; + } + r = &rsrc[nrsrc]; + nrsrc++; + + /* prepare resource record */ + { + const unsigned char *b = (const unsigned char *)rtype; + r->type = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]; + } + r->id = rid; + r->attrs = attrs; + if (nrsrc == 1) + r->data_offset = 0; + else + r->data_offset = rsrc[nrsrc-2].data_offset + rsrc[nrsrc-2].data_len + 4; + r->data_len = len; + r->next_in_type = r->next_type = -2; + + /* resource consists of length, then data */ + write_four(r->data_len, rfork_f); + fwrite(data, 1, len, rfork_f); +} + +static void +init_current_post(void) +{ + rbufpos = 2; + cur_post_id = 501; + blocktyp = POST_ASCII; +} + +static void +output_current_post(void) +{ + if (blocktyp != POST_END && rbufpos <= 2) + return; + rbuf[0] = blocktyp; + rbuf[1] = 0; + output_new_rsrc("POST", cur_post_id, 0, (char *)rbuf, rbufpos); + rbufpos = 2; + cur_post_id++; +} + +/* font_reader functions */ + +static void +t1mac_output_data(byte *s, int len) +{ + while (len > 0) { + int n; + /* In some Mac fonts, the ASCII sections terminate with a line-end */ + if (rbufpos >= MAX_RSRC_LEN + || (blocktyp == POST_ASCII && len + rbufpos > MAX_RSRC_LEN && rbufpos)) + output_current_post(); + n = (len + rbufpos <= MAX_RSRC_LEN ? len : MAX_RSRC_LEN - rbufpos); + memcpy(rbuf + rbufpos, s, n); + rbufpos += n; + s += n; + len -= n; + } +} + +static void +t1mac_output_ascii(char *s, int len) +{ + if (blocktyp == POST_BINARY) { + output_current_post(); + blocktyp = POST_ASCII; + } + /* Mac line endings */ + if (len > 0 && s[len-1] == '\n') + s[len-1] = '\r'; + t1mac_output_data((byte *)s, len); + if (strncmp(s, "/FontName", 9) == 0) { + for (s += 9; isspace((unsigned char) *s); s++) + /* skip */; + if (*s == '/') { + const char *t = ++s; + while (*t && !isspace((unsigned char) *t)) t++; + free(font_name); + font_name = (char *)malloc(t - s + 1); + memcpy(font_name, s, t - s); + font_name[t - s] = 0; + } + } +} + +static void +t1mac_output_binary(unsigned char *s, int len) +{ + if (blocktyp == POST_ASCII) { + output_current_post(); + blocktyp = POST_BINARY; + } + t1mac_output_data(s, len); +} + +static void +t1mac_output_end(void) +{ + output_current_post(); + blocktyp = POST_END; + output_current_post(); +} + + +/* finish off the resource fork */ + +static uint32_t +complete_rfork(void) +{ + uint32_t reflist_offset, total_data_len; + uint32_t typelist_len; + int i, j, ntypes; + + /* analyze resources */ + { + int last_type = -1; + ntypes = 0; + for (i = 0; i < nrsrc; i++) + if (rsrc[i].next_in_type == -2) { + int last = -1; + if (last_type >= 0) + rsrc[last_type].next_type = i; + for (j = i; j < nrsrc; j++) + if (rsrc[j].type == rsrc[i].type) { + if (last >= 0) + rsrc[last].next_in_type = j; + last = j; + } + rsrc[last].next_in_type = -1; + last_type = i; + ntypes++; + } + } + + /* have just finished writing data */ + /* now write resource map */ + for (i = 0; i < RFORK_MAP_RESERVEDLEN; i++) + putc(0, rfork_f); /* reserved */ + write_two(0, rfork_f); /* resource fork attributes */ + typelist_len = ntypes * RFORK_RTYPE_LEN + 2; + write_two(RFORK_MAP_HEADERLEN, rfork_f); /* offset from start of map to typelist */ + write_two(RFORK_MAP_HEADERLEN + typelist_len + nrsrc * RFORK_RSRC_LEN, rfork_f); /* offset from start of map to namelist */ + + /* output type map */ + write_two(ntypes - 1, rfork_f);/* number of types - 1 */ + reflist_offset = typelist_len; + for (i = 0; i >= 0; i = rsrc[i].next_type) { + int n_in_type = 0; + for (j = i; j >= 0; j = rsrc[j].next_in_type) + n_in_type++; + write_four(rsrc[i].type, rfork_f); /* resource type */ + write_two(n_in_type - 1, rfork_f); /* number in type - 1 */ + write_two(reflist_offset, rfork_f); /* offset to reflist from start of typelist */ + reflist_offset += n_in_type * RFORK_RSRC_LEN; + } + + /* output reference list */ + for (i = 0; i >= 0; i = rsrc[i].next_type) + for (j = i; j >= 0; j = rsrc[j].next_in_type) { + write_two(rsrc[j].id, rfork_f); /* ID */ + write_two(-1, rfork_f); /* offset to name */ + write_one(rsrc[j].attrs, rfork_f); /* attributes */ + write_three(rsrc[j].data_offset, rfork_f); /* offset to data from start of data */ + write_four(0, rfork_f); /* reserved */ + } + + /* finally, patch up resource fork header */ + { + total_data_len = rsrc[nrsrc-1].data_offset + rsrc[nrsrc-1].data_len + 4; + reposition(rfork_f, 0); + write_four(RFORK_HEADERLEN, rfork_f); /* offset from rfork to data */ + write_four(RFORK_HEADERLEN + total_data_len, rfork_f); /* offset from rfork to map */ + write_four(total_data_len, rfork_f); /* length of data */ + write_four(RFORK_MAP_HEADERLEN + reflist_offset, rfork_f); /* length of map */ + } + + return RFORK_HEADERLEN + total_data_len + RFORK_MAP_HEADERLEN + reflist_offset; +} + + +/* write a MacBinary II file */ + +static void +output_raw(FILE *rf, int32_t len, FILE *f) +{ + char buf[2048]; + reposition(rf, 0); + while (len > 0) { + int n = (len < 2048 ? len : 2048); + fread(buf, 1, n, rf); + fwrite(buf, 1, n, f); + len -= n; + } +} + +static void +output_macbinary(FILE *rf, int32_t rf_len, const char *filename, FILE *f) +{ + int i, len = strlen(filename); + char buf[128]; + if (len < 1 || len > 63) + fatal_error("filename length must be between 1 and 63"); + store_one(0, buf+0); /* old version number */ + store_one(len, buf+1); /* filename length */ + memset(buf+2, 0, 63); /* filename padding */ + memcpy(buf+2, filename, len); /* filename */ + store_four(T1_FILETYPE, buf+65); /* file type */ + store_four(T1_FILECREATOR, buf+69); /* file creator */ + store_one(T1_FINDERFLAGS, buf+73); /* finder flags */ + store_one(0, buf+74); /* zero byte */ + store_two(0, buf+75); /* vertical position in window */ + store_two(0, buf+77); /* horizontal position in window */ + store_two(0, buf+79); /* window or folder ID */ + store_one(0, buf+81); /* protected flag */ + store_one(0, buf+82); /* zero byte */ + store_four(0, buf+83); /* data fork length */ + store_four(rf_len, buf+87); /* resource fork length */ + { + time_t t = time(0) + MAC_TIME_DELTA; + store_four(t, buf+91); /* creation date */ + store_four(t, buf+95); /* modification date */ + } + store_two(0, buf+99); /* GetInfo comment length */ + store_one(0, buf+101); /* finder flags part 2 */ + memset(buf+102, 0, 116 - 102); /* padding */ + store_four(0, buf+116); /* total length when unpacked */ + store_two(0, buf+120); /* length of secondary header */ + store_one(129, buf+122); /* version number */ + store_one(129, buf+123); /* minimum acceptable version number */ + store_two(crcbuf(0, 124, buf), buf+124); /* CRC */ + store_two(0, buf+126); /* padding to 128 bytes */ + + /* write out the header */ + fwrite(buf, 1, 128, f); + + /* now write resource fork */ + output_raw(rf, rf_len, f); + for (i = rf_len % 128; i && i < 128; i++) + putc(0, f); +} + + +/* write an AppleSingle file */ + +#define APPLESINGLE_MAGIC 0x00051600 +#define APPLEDOUBLE_MAGIC 0x00051607 +#define APPLESINGLE_VERSION 0x00020000 +#define APPLESINGLE_TIME_DELTA 883612800 +#define APPLESINGLE_HEADERLEN 26 +#define APPLESINGLE_ENTRYLEN 12 +#define APPLESINGLE_DFORK_ENTRY 1 +#define APPLESINGLE_RFORK_ENTRY 2 +#define APPLESINGLE_DATES_ENTRY 8 +#define APPLESINGLE_DATES_LEN 16 +#define APPLESINGLE_FINDERINFO_ENTRY 9 +#define APPLESINGLE_FINDERINFO_LEN 32 +#define APPLESINGLE_REALNAME_ENTRY 3 + +static void +output_applesingle(FILE *rf, int32_t rf_len, const char *filename, FILE *f, + int appledouble) +{ + uint32_t offset; + int i, nentries, len = strlen(filename); + if (appledouble) /* magic number */ + write_four(APPLEDOUBLE_MAGIC, f); + else + write_four(APPLESINGLE_MAGIC, f); + write_four(APPLESINGLE_VERSION, f); /* version number */ + for (i = 0; i < 4; i++) + write_four(0, f); /* filler */ + nentries = (appledouble ? 4 : 5); + write_two(nentries, f); /* number of entries */ + + /* real name entry */ + offset = APPLESINGLE_HEADERLEN + nentries * APPLESINGLE_ENTRYLEN; + write_four(APPLESINGLE_REALNAME_ENTRY, f); + write_four(offset, f); + write_four(len, f); + offset += len; + + /* time entry */ + write_four(APPLESINGLE_DATES_ENTRY, f); + write_four(offset, f); + write_four(APPLESINGLE_DATES_LEN, f); + offset += APPLESINGLE_DATES_LEN; + + /* finder info entry */ + write_four(APPLESINGLE_FINDERINFO_ENTRY, f); + write_four(offset, f); + write_four(APPLESINGLE_FINDERINFO_LEN, f); + offset += APPLESINGLE_FINDERINFO_LEN; + + /* resource fork entry */ + write_four(APPLESINGLE_RFORK_ENTRY, f); + write_four(offset, f); + write_four(rf_len, f); + offset += rf_len; + + /* data fork entry */ + if (!appledouble) { + write_four(APPLESINGLE_DFORK_ENTRY, f); + write_four(offset, f); + write_four(0, f); + } + + /* real name data */ + fwrite(filename, 1, len, f); + + /* time data */ + i = time(0) - APPLESINGLE_TIME_DELTA; + write_four(i, f); /* creation date */ + write_four(i, f); /* modification date */ + write_four(0x80000000, f); /* backup date */ + write_four(0, f); /* access date */ + + /* finder info data */ + write_four(T1_FILETYPE, f); /* file type */ + write_four(T1_FILECREATOR, f); /* file creator */ + write_one(T1_FINDERFLAGS, f); /* finder flags */ + write_one(0, f); /* extended finder flags */ + write_two(0, f); /* vertical position in window */ + write_two(0, f); /* horizontal position in window */ + write_two(0, f); /* window or folder ID */ + write_four(0, f); /* icon ID and reserved */ + write_four(0, f); /* reserved */ + write_one(0, f); /* script flag */ + write_one(0, f); /* reserved */ + write_two(0, f); /* comment ID */ + write_four(0, f); /* put away */ + + /* resource fork data */ + output_raw(rf, rf_len, f); +} + + +/* write a BinHex file */ + +static void +binhex_buffer(const byte *s, int len, FILE *f) +{ + static int col = 1; + static int bits = 0; + static int bitspos = 2; + static const char *table = "!\"#$%&'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr"; + byte buf[5]; + int c, i, left; + + if (!s && bitspos > 2) { /* output the remaining bits */ + s = (const byte *)"\0"; + len = 1; + } + + for (left = len; left > 0; left--, s++) { + int pos; + if (s[0] == 0x90) { + buf[0] = 0x90; + buf[1] = 0x00; + pos = 2; + } else { + buf[0] = s[0]; + pos = 1; + } + + /* find a run */ + if (left > 2 && s[0] == s[1] && s[0] == s[2]) { + for (i = 3; i < left && i < 255; i++) + if (s[i] != s[0]) + break; + buf[pos] = 0x90; + buf[pos+1] = i; + pos += 2; + s += i - 1; + left -= i - 1; + } + + /* store those characters */ + for (i = 0; i < pos; i++) { + bits |= buf[i]; + while (bitspos >= 0) { + c = (bits >> bitspos) & 0x3F; + putc(table[c], f); + if (++col == 63) { + putc('\n', f); + col = 0; + } + bitspos -= 6; + } + bits <<= 8; + bitspos += 8; + } + } +} + +static void +output_binhex(FILE *rf, int32_t rf_len, const char *filename, FILE *f) +{ + int crc, len = strlen(filename); + char buf[2048]; + + if (len < 1 || len > 63) + fatal_error("filename length must be between 1 and 63"); + store_one(len, buf+0); /* filename length */ + memcpy(buf+1, filename, len); /* filename */ + store_one(0, buf+1+len); /* version */ + store_four(T1_FILETYPE, buf+2+len); /* file type */ + store_four(T1_FILECREATOR, buf+6+len); /* file creator */ + store_one(T1_FINDERFLAGS, buf+10+len); /* finder flags */ + store_one(0, buf+11+len); /* extended finder flags */ + store_four(0, buf+12+len); /* length of data fork */ + store_four(rf_len, buf+16+len); /* length of resource fork */ + store_two(crcbuf(0, 20+len, buf), buf+20+len); /* CRC */ + store_two(0, buf+22+len); /* data fork CRC */ + + /* output BinHex comment */ + fputs("(This file must be converted with BinHex 4.0)\n:", f); + + /* BinHex the header */ + binhex_buffer((const byte *)buf, 24+len, f); + + /* resource fork data */ + reposition(rf, 0); + crc = 0; + while (rf_len > 0) { + int n = (rf_len < 2048 ? rf_len : 2048); + fread(buf, 1, n, rf); + crc = crcbuf(crc, n, buf); /* update CRC */ + binhex_buffer((const byte *)buf, n, f); + rf_len -= n; + } + store_two(crc, buf); /* resource fork CRC */ + binhex_buffer((const byte *)buf, 2, f); + binhex_buffer(0, 0, f); /* get rid of any remaining bits */ + fputs(":\n", f); /* trailer */ +} + + +/***** + * command line + **/ + +#define OUTPUT_OPT 301 +#define VERSION_OPT 302 +#define HELP_OPT 303 +#define MACBINARY_OPT 304 +#define RAW_OPT 305 +#define APPLESINGLE_OPT 306 +#define APPLEDOUBLE_OPT 307 +#define BINHEX_OPT 308 +#define FILENAME_OPT 309 + +static Clp_Option options[] = { + { "appledouble", 0, APPLEDOUBLE_OPT, 0, 0 }, + { "applesingle", 0, APPLESINGLE_OPT, 0, 0 }, + { "binhex", 0, BINHEX_OPT, 0, 0 }, + { "help", 0, HELP_OPT, 0, 0 }, + { "macbinary", 0, MACBINARY_OPT, 0, 0 }, + { "filename", 'n', FILENAME_OPT, Clp_ValString, 0 }, + { "output", 'o', OUTPUT_OPT, Clp_ValString, 0 }, + { "raw", 'r', RAW_OPT, 0, 0 }, + { "version", 0, VERSION_OPT, 0, 0 }, +}; +static const char *program_name; + + +void +fatal_error(const char *message, ...) +{ + va_list val; + va_start(val, message); + fprintf(stderr, "%s: ", program_name); + vfprintf(stderr, message, val); + putc('\n', stderr); + va_end(val); + exit(1); +} + +void +error(const char *message, ...) +{ + va_list val; + va_start(val, message); + fprintf(stderr, "%s: ", program_name); + vfprintf(stderr, message, val); + putc('\n', stderr); + va_end(val); +} + + +static void +short_usage(void) +{ + fprintf(stderr, "Usage: %s [OPTION]... [INPUT [OUTPUT]]\n\ +Try `%s --help' for more information.\n", + program_name, program_name); +} + + +static void +usage(void) +{ + printf("\ +`T1mac' translates a PostScript Type 1 font from PFA or PFB format into\n\ +Macintosh Type 1 format. The result can be written in MacBinary II format (the\n\ +default), AppleSingle format, AppleDouble format, or BinHex format, or as a\n\ +raw resource fork. It is sent to the standard output unless an OUTPUT file is\n\ +given.\n\ +\n\ +Usage: %s [OPTION]... [INPUT [OUTPUT]]\n\ +\n\ +Options:\n\ + -r, --raw Output is a raw Macintosh resource fork.\n\ + --macbinary Output is in MacBinary format (default).\n\ + --applesingle Output is in AppleSingle format.\n\ + --appledouble Output is in AppleDouble format.\n\ + --binhex Output is in BinHex format.\n\ + -n, --filename NAME Macintosh font filename will be NAME.\n\ + -o, --output FILE Write output to FILE.\n\ + -h, --help Print this message and exit.\n\ + --version Print version number and warranty and exit.\n\ +\n\ +Report bugs to .\n", program_name); +} + +#ifdef __cplusplus +} +#endif + + +int +main(int argc, char *argv[]) +{ + int i, c; + FILE *ifp = 0, *ofp = 0; + const char *ifp_filename = ""; + const char *ofp_filename = ""; + const char *set_font_name = 0; + struct font_reader fr; + uint32_t rfork_len; + int raw = 0, macbinary = 1, applesingle = 0, appledouble = 0, binhex = 0; + + Clp_Parser *clp = + Clp_NewParser(argc, (const char * const *)argv, sizeof(options) / sizeof(options[0]), options); + program_name = Clp_ProgramName(clp); + + /* interpret command line arguments using CLP */ + while (1) { + int opt = Clp_Next(clp); + switch (opt) { + + case RAW_OPT: + raw = 1; + macbinary = applesingle = appledouble = binhex = 0; + break; + + case MACBINARY_OPT: + macbinary = 1; + raw = applesingle = appledouble = binhex = 0; + break; + + case APPLESINGLE_OPT: + applesingle = 1; + raw = macbinary = appledouble = binhex = 0; + break; + + case APPLEDOUBLE_OPT: + appledouble = 1; + raw = macbinary = applesingle = binhex = 0; + break; + + case BINHEX_OPT: + binhex = 1; + raw = macbinary = applesingle = appledouble = 0; + break; + + output_file: + case OUTPUT_OPT: + if (ofp) + fatal_error("output file already specified"); + if (strcmp(clp->vstr, "-") == 0) + ofp = stdout; + else { + ofp_filename = clp->vstr; + ofp = fopen(ofp_filename, "wb"); + if (!ofp) fatal_error("%s: %s", ofp_filename, strerror(errno)); + } + break; + + case FILENAME_OPT: + if (set_font_name) + fatal_error("Macintosh font filename already specified"); + set_font_name = clp->vstr; + break; + + case HELP_OPT: + usage(); + exit(0); + break; + + case VERSION_OPT: + printf("t1mac (LCDF t1utils) %s\n", VERSION); + printf("Copyright (C) 2000-2017 Eddie Kohler et al.\n\ +This is free software; see the source for copying conditions.\n\ +There is NO warranty, not even for merchantability or fitness for a\n\ +particular purpose.\n"); + exit(0); + break; + + case Clp_NotOption: + if (ifp && ofp) + fatal_error("too many arguments"); + else if (ifp) + goto output_file; + if (strcmp(clp->vstr, "-") == 0) + ifp = stdin; + else { + ifp_filename = clp->vstr; + ifp = fopen(clp->vstr, "r"); + if (!ifp) fatal_error("%s: %s", clp->vstr, strerror(errno)); + } + break; + + case Clp_Done: + goto done; + + case Clp_BadOption: + short_usage(); + exit(1); + break; + + } + } + + done: + if (!ifp) ifp = stdin; + if (!ofp) ofp = stdout; + +#if defined(_MSDOS) || defined(_WIN32) + /* As we are processing a PFB (binary) output */ + /* file, we must set its file mode to binary. */ + _setmode(_fileno(ofp), _O_BINARY); +#endif + + /* prepare font reader */ + fr.output_ascii = t1mac_output_ascii; + fr.output_binary = t1mac_output_binary; + fr.output_end = t1mac_output_end; + + /* prepare resource fork file */ + rfork_f = tmpfile(); + if (!rfork_f) + fatal_error("cannot open temporary file: %s", strerror(errno)); + for (i = 0; i < RFORK_HEADERLEN; i++) + putc(0, rfork_f); + init_current_post(); + + /* peek at first byte to see if it is the PFB marker 0x80 */ + c = getc(ifp); + ungetc(c, ifp); + + /* do the file */ + if (c == PFB_MARKER) + process_pfb(ifp, ifp_filename, &fr); + else if (c == '%') + process_pfa(ifp, ifp_filename, &fr); + else + fatal_error("%s does not start with font marker (`%%' or 0x80)", ifp_filename); + if (ifp != stdin) + fclose(ifp); + + /* check if anything was read */ + if (nrsrc == 0) + error("no POST resources written -- are you sure this was a font?"); + + /* output large B/W icon */ + output_new_rsrc("ICN#", 256, 32, (const char *)icon_bw_data, 256); + /* output FREF */ + output_new_rsrc("FREF", 256, 32, "LWFN\0\0\0", 7); + /* output BNDL */ + output_new_rsrc("BNDL", 256, 32, "T1UT\0\0\0\1FREF\0\0\0\0\1\0ICN#\0\0\0\0\1\0", 28); + /* output other icons */ + output_new_rsrc("icl8", 256, 32, (const char *)icon_8_data, 1024); + output_new_rsrc("icl4", 256, 32, (const char *)icon_4_data, 512); + output_new_rsrc("ics#", 256, 32, (const char *)small_icon_bw_data, 64); + output_new_rsrc("ics8", 256, 32, (const char *)small_icon_8_data, 256); + output_new_rsrc("ics4", 256, 32, (const char *)small_icon_4_data, 128); + /* output T1UT (signature) */ + output_new_rsrc("T1UT", 0, 0, "DConverted by t1mac (t1utils) \251Eddie Kohler http://www.lcdf.org/type/", 69); + + /* finish off resource file */ + rfork_len = complete_rfork(); + + /* prepare font name */ + if (!set_font_name && font_name) { + int part = 0, len = 0; + char *x, *s; + for (x = s = font_name; *s; s++) + if (isupper((unsigned char) *s) || isdigit((unsigned char) *s)) { + *x++ = *s; + part++; + len = 1; + } else if (islower((unsigned char) *s)) { + if (len < (part <= 1 ? 5 : 3)) + *x++ = *s; + len++; + } + *x++ = 0; + set_font_name = font_name; + } else if (!set_font_name) + set_font_name = "Unknown Font"; + + /* now, output the file */ + if (macbinary) + output_macbinary(rfork_f, rfork_len, set_font_name, ofp); + else if (raw) + output_raw(rfork_f, rfork_len, ofp); + else if (applesingle || appledouble) + output_applesingle(rfork_f, rfork_len, set_font_name, ofp, appledouble); + else if (binhex) + output_binhex(rfork_f, rfork_len, set_font_name, ofp); + else + fatal_error("strange output format"); + fclose(rfork_f); + + if (ofp != stdout) + fclose(ofp); + return 0; +} diff --git a/Build/source/utils/t1utils/t1utils-src/t1unmac.1 b/Build/source/utils/t1utils/t1utils-src/t1unmac.1 new file mode 100644 index 00000000000..2e121d10be8 --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1unmac.1 @@ -0,0 +1,79 @@ +.ds V 1.42 +.de M +.BR "\\$1" "(\\$2)\\$3" +.. +.TH T1UNMAC 1 "" "Version \*V" +.SH NAME +t1unmac \- translate a Mac PostScript Type 1 font into PFA or PFB format +.SH SYNOPSIS +.B t1unmac +\%[\fB\-a\fR|\fB\-b\fR] +\%[\fB\-r\fR] +\%[\fIinput\fR [\fIoutput\fR]] +.SH DESCRIPTION +.B t1unmac +extracts POST resources from a Macintosh PostScript font file and creates a +PFA (hexadecimal) or PFB (binary) font file. The file +.I input +should be in MacBinary I or II, AppleSingle, AppleDouble, or BinHex format, +or it can be a raw resource fork. If the file is a raw resource fork, you +need to give the `\-\-raw' option; otherwise +.B t1unmac +should automatically figure out what kind of file you have. If the file +.I output +is not specified output goes to the standard output. +.SH OPTIONS +.TP 5 +.BR \-\-pfa ", " \-a +Output in PFA (ASCII) format. +.TP 5 +.BR \-\-pfb ", " \-b +Output in PFB (binary) format. This is the default. +.TP 5 +.BR \-\-raw ", " \-r +Indicates that the input is a raw resource fork. +.TP 5 +.BR \-\-macbinary +Indicates that the input is in MacBinary I or II format. +.TP 5 +.BR \-\-applesingle +Indicates that the input is in AppleSingle format. +.TP 5 +.BR \-\-appledouble +Indicates that the input is in AppleDouble format. +.TP 5 +.BR \-\-binhex +Indicates that the input is in BinHex 4.0 format. +.TP +.BI \-\-block\-length= "num\fR, " \-l " num" +PFB only: Set the maximum output block length to +.I num. +The default length is as large as memory allows. +.TP +.BI \-\-line\-length= "num\fR, " \-l " num" +PFA only: Set the maximum length of encrypted lines in the output to +.I num. +(These are the lines consisting wholly of hexadecimal digits.) The default +is 64. +.SH EXAMPLES +.LP +On Mac OS X, you can use +.B t1unmac +to translate a font into PFA or PFB format as follows: +.nf +% \fBt1unmac\fR \-\-raw FONTFILENAME/..namedfork/rsrc > OUTPUT +.fi +.SH "SEE ALSO" +.LP +.M t1mac 1 , +.M t1ascii 1 , +.M t1binary 1 , +.M t1asm 1 , +.M t1disasm 1 +.SH AUTHORS +Lee Hetherington (ilh@lcs.mit.edu) +.br +Eddie Kohler (ekohler@gmail.com) +.PP +Ported to Microsoft C/C++ Compiler and MS-DOS operating system by +Kai-Uwe Herbing (herbing@netmbx.netmbx.de). diff --git a/Build/source/utils/t1utils/t1utils-src/t1unmac.c b/Build/source/utils/t1utils/t1utils-src/t1unmac.c new file mode 100644 index 00000000000..b4ffed3921b --- /dev/null +++ b/Build/source/utils/t1utils/t1utils-src/t1unmac.c @@ -0,0 +1,921 @@ +/* t1unmac/unpost + * + * This program converts Macintosh Type 1 fonts stored in MacBinary (I or II), + * AppleSingle, AppleDouble, BinHex, or raw resource fork format to PFA and + * PFB formats. + * + * Copyright (c) 1992 by I. Lee Hetherington, all rights reserved. + * Copyright (c) 1998-2017 Eddie Kohler + * + * 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, subject to the + * conditions listed in the Click LICENSE file, which is available in full at + * http://github.com/kohler/click/blob/master/LICENSE. The conditions + * include: you must preserve this copyright notice, and you cannot mention + * the copyright holders in advertising related to the Software without + * their permission. The Software is provided WITHOUT ANY WARRANTY, EXPRESS + * OR IMPLIED. This notice is a summary of the Click LICENSE file; the + * license in that file is binding. + * + * New change log in `NEWS'. Old change log: + * + * Revision 1.2 92/06/23 10:57:33 ilh + * MSDOS porting by Kai-Uwe Herbing (herbing@netmbx.netmbx.de) + * incoporated. + * + * Revision 1.1 92/05/22 12:07:49 ilh + * initial version + * + * Ported to Microsoft C/C++ Compiler and MS-DOS operating system by + * Kai-Uwe Herbing (herbing@netmbx.netmbx.de) on June 12, 1992. Code + * specific to the MS-DOS version is encapsulated with #ifdef _MSDOS + * ... #endif, where _MSDOS is an identifier, which is automatically + * defined, if you compile with the Microsoft C/C++ Compiler. + * */ + +/* Note: this is ANSI C. */ + +#ifdef HAVE_CONFIG_H +# include +#endif +#if defined(_MSDOS) || defined(_WIN32) +# include +# include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include "t1lib.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Some functions to read one, two, three, and four byte integers in 68000 + byte order (most significant byte first). */ + +static int +read_one(FILE *fi) +{ + return getc(fi); +} + +static int +read_two(FILE *fi) +{ + int val; + + val = getc(fi); + val = (val << 8) | getc(fi); + + return val; +} + +static int32_t +read_three(FILE *fi) +{ + int32_t val; + + val = getc(fi); + val = (val << 8) | getc(fi); + val = (val << 8) | getc(fi); + + return val; +} + +static int32_t +read_four(FILE *fi) +{ + int32_t val; + + val = getc(fi); + val = (val << 8) | getc(fi); + val = (val << 8) | getc(fi); + val = (val << 8) | getc(fi); + + return val; +} + +/* reposition a file with error messages */ + +static void +reposition(FILE *fi, int32_t absolute) +{ + if (fseek(fi, absolute, 0) == -1) + fatal_error("can't seek to position %d\n\ + (The Mac file may be corrupted, or you may need the `-r' option.)", + absolute); +} + +static int blocklen = -1; + +static int hex_column = 0; /* current column of hex ASCII output */ + +static void +output_hex_byte(FILE *fo, int b) +{ + static const char *hex = "0123456789abcdef"; + + if (hex_column >= blocklen) { + putc('\n', fo); + hex_column = 0; + } + putc(hex[b >> 4], fo); + putc(hex[b & 0xf], fo); + hex_column += 2; +} + +/* Function to extract a particular POST resource. Offset points to the four + byte length which is followed by the data. The first byte of the POST data + specifies resource type: 1 for ASCII, 2 for binary, and 5 for end. The + second byte is always zero. */ + + +/* Function to write four byte length to PFB file: least significant byte + first. */ + +static int +extract_data(FILE *fi, FILE *fo, struct pfb_writer *w, int32_t offset, int pfb) +{ + enum PS_type { PS_ascii = 1, PS_binary = 2, PS_end = 5 }; + static int last_type = -1; + static int skip_newline = 0; + int32_t len; + int more = 1; + int i, c; + + reposition(fi, offset); + len = read_four(fi) - 2; /* subtract type field */ + + switch ((enum PS_type)read_one(fi)) { + + case PS_ascii: { + (void) read_one(fi); + if (last_type != PFB_ASCII && pfb) { + pfb_writer_output_block(w); + w->blocktyp = PFB_ASCII; + } + for (i = 0; i < len; i++) { + c = read_one(fi); + if (c == '\n' && skip_newline) { + skip_newline = 0; + continue; + } + if (c == '\r') { + c = '\n'; + skip_newline = 1; + } else + skip_newline = 0; + if (pfb) + PFB_OUTPUT_BYTE(w, c); + else + putc(c, fo); + } + last_type = PFB_ASCII; + break; + } + + case PS_binary: { + (void) read_one(fi); + if (last_type != PFB_BINARY && pfb) { + pfb_writer_output_block(w); + w->blocktyp = PFB_BINARY; + } else if (last_type != PFB_BINARY) + hex_column = 0; + if (pfb) { + while (len--) + PFB_OUTPUT_BYTE(w, read_one(fi)); + } else { + while (len--) + output_hex_byte(fo, read_one(fi)); + } + last_type = PFB_BINARY; + break; + } + + case PS_end: + more = 0; + break; + + } + + return more; +} + + +/***** + * Command line + **/ + +#define OUTPUT_OPT 301 +#define VERSION_OPT 302 +#define HELP_OPT 303 +#define PFB_OPT 304 +#define PFA_OPT 305 +#define MACBINARY_OPT 306 +#define RAW_OPT 307 +#define LINE_LEN_OPT 308 +#define APPLEDOUBLE_OPT 309 +#define BINHEX_OPT 310 + +static Clp_Option options[] = { + { "applesingle", 0, APPLEDOUBLE_OPT, 0, 0 }, + { "appledouble", 0, APPLEDOUBLE_OPT, 0, 0 }, + { "binhex", 0, BINHEX_OPT, 0, 0 }, + { "block-length", 0, LINE_LEN_OPT, Clp_ValUnsigned, 0 }, + { "help", 0, HELP_OPT, 0, 0 }, + { "line-length", 'l', LINE_LEN_OPT, Clp_ValUnsigned, 0 }, + { "macbinary", 0, MACBINARY_OPT, 0, 0 }, + { "output", 'o', OUTPUT_OPT, Clp_ValString, 0 }, + { "pfa", 'a', PFA_OPT, 0, 0 }, + { "pfb", 'b', PFB_OPT, 0, 0 }, + { "raw", 'r', RAW_OPT, 0, 0 }, + { "version", 0, VERSION_OPT, 0, 0 }, +}; +static const char *program_name; + +void +fatal_error(const char *message, ...) +{ + va_list val; + va_start(val, message); + fprintf(stderr, "%s: ", program_name); + vfprintf(stderr, message, val); + putc('\n', stderr); + va_end(val); + exit(1); +} + +void +error(const char *message, ...) +{ + va_list val; + va_start(val, message); + fprintf(stderr, "%s: ", program_name); + vfprintf(stderr, message, val); + putc('\n', stderr); + va_end(val); +} + +static void +short_usage(void) +{ + fprintf(stderr, "Usage: %s [OPTION]... INPUT [OUTPUT]\n\ +Try `%s --help' for more information.\n", + program_name, program_name); +} + +static void +usage(void) +{ + printf("\ +`T1unmac' extracts a PostScript Type 1 font from a Macintosh font file. It can\n\ +read MacBinary, AppleSingle, AppleDouble, or BinHex files, or raw Macintosh\n\ +resource forks. The result is written to the standard output unless an OUTPUT\n\ +file is given.\n\ +\n\ +Usage: %s [OPTION]... INPUT [OUTPUT]\n\ +\n\ +Options:\n\ + -r, --raw Input is a raw Macintosh resource fork.\n\ + --macbinary Input is in MacBinary format.\n\ + --applesingle Input is in AppleSingle format.\n\ + --appledouble Input is in AppleDouble format.\n\ + --binhex Input is in BinHex format.\n\ + -a, --pfa Output font in ASCII (PFA) format.\n\ + -b, --pfb Output font in binary (PFB) format. This is\n\ + the default.\n\ + -l, --block-length NUM Set max block length for PFB output.\n\ + -l, --line-length NUM Set max encrypted line length for PFA output.\n\ + -o, --output FILE Write output to FILE.\n\ + -h, --help Print this message and exit.\n\ + --version Print version number and warranty and exit.\n\ +\n\ +Report bugs to .\n", program_name); +} + + +static const char * +check_macbinary(FILE *ifp) +{ + int i, j; + char buf[124]; + + /* check "version" bytes at offsets 0 and 74 */ + reposition(ifp, 0); + if (read_one(ifp) != 0) + return "bad version byte"; + reposition(ifp, 74); + if (read_one(ifp) != 0) + return "bad version byte"; + +#if 0 + /* write out bullshit */ + {int t; + reposition(ifp, 65); + t = read_four(ifp); + fprintf(stderr, "Type %c%c%c%c\n", (t>>24)&255, (t>>16)&255, (t>>8)&255, t&255); + t = read_four(ifp); + fprintf(stderr, "Creator %c%c%c%c\n", (t>>24)&255, (t>>16)&255, (t>>8)&255, t&255); + t = read_one(ifp); + fprintf(stderr, "Finder flags 1 %02x\n", t); + read_one(ifp); + t = read_two(ifp); + fprintf(stderr, "horizpos %04x\n", t); + t = read_two(ifp); + fprintf(stderr, "vertpos %04x\n", t); + t = read_two(ifp); + fprintf(stderr, "folder id %d\n", t); + t = read_one(ifp); + fprintf(stderr, "protected? %x\n", t); + t = read_one(ifp); + t = read_four(ifp); + fprintf(stderr, "data len %d\n", t); + t = read_four(ifp); + fprintf(stderr, "rsrc len %d\n", t); + t = read_four(ifp); + { + struct tm *crap; + fprintf(stderr, "creation date %x\n", t); + t -= 2082844800; + fprintf(stderr, " %s\n", ctime(&t)); + t = read_four(ifp); + fprintf(stderr, "modification date %x\n", t); + t -= 2082844800; + fprintf(stderr, " %s\n", ctime(&t)); + t = read_two(ifp); + } + fprintf(stderr, "getinfo len %d\n", t); + t = read_one(ifp); + fprintf(stderr, "finderflags 2 %02x\n", t); + reposition(ifp, 116); + t = read_four(ifp); + fprintf(stderr, "total len %d\n", t); + t = read_two(ifp); + fprintf(stderr, "secondary header len %d\n", t); + t = read_one(ifp); + fprintf(stderr, "version %d\n", t); + t = read_one(ifp); + fprintf(stderr, "version %d\n", t); + } +#endif + + /* check file length */ + reposition(ifp, 1); + i = read_one(ifp); + if (i > 63) + return "bad length"; + reposition(ifp, 83); + i = read_four(ifp); + j = read_four(ifp); + if (i < 0 || j < 0 || i >= 0x800000 || j >= 0x800000) + return "bad length"; + + /* check CRC */ + reposition(ifp, 0); + fread(buf, 1, 124, ifp); + if (crcbuf(0, 124, buf) != read_two(ifp)) { + reposition(ifp, 82); + if (read_one(ifp) != 0) + return "bad checksum"; + } + + return 0; +} + +#define APPLESINGLE_MAGIC 0x00051600 +#define APPLEDOUBLE_MAGIC 0x00051607 + +static const char * +check_appledouble(FILE *ifp) +{ + int i; + reposition(ifp, 0); + i = read_four(ifp); + if (i != APPLEDOUBLE_MAGIC && i != APPLESINGLE_MAGIC) + return "bad magic number"; + + return 0; +} + +static const char * +translate_binhex(FILE *f, FILE *tmpf) +{ + int i, c = 0, last_char, after_x90, bits, bitpos; + unsigned char value_table[256]; + + /* prepare value table */ + { + const char *table = "!\"#$%&'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr"; + for (i = 0; i < 256; i++) + value_table[i] = 255; + for (i = 0; *table; i++, table++) + value_table[(unsigned char)*table] = i; + } + + /* skip to comment */ + { + const char *comment = "(This file must be converted with BinHex"; + while (!feof(f)) { + const char *s; + for (s = comment; *s; s++) { + c = getc(f); + if (c != *s) + break; + } + /* skip to end of line */ + while (c >= 0 && c != '\n' && c != '\r') + c = getc(f); + /* stop if read comment */ + if (!*s) + goto found_comment; + } + /* failed */ + return "no comment"; + } + + found_comment: + /* skip spaces, look for ':' */ + for (c = ' '; isspace(c); c = getc(f)) ; + if (c != ':') + return "no file-start character"; + + /* found ':', process until you find another ':' */ + last_char = -1; + after_x90 = bits = 0; + bitpos = 10; + for (c = getc(f); c >= 0; c = getc(f)) + if (!isspace(c)) { + /* add 6 bits to bits */ + if (value_table[c] == 255) + break; + bits |= (value_table[c] << bitpos); + bitpos -= 6; + + /* output character(s) */ + if (bitpos <= 2) { + int d = bits >> 8; + bits = (bits << 8) & 0xFF00; + bitpos += 8; + if (after_x90) { + /* handle compression */ + if (d == 0) { + last_char = 0x90; + putc(0x90, tmpf); + } else + for (i = 1; i < d; i++) + putc(last_char, tmpf); + after_x90 = 0; + } else if (d == 0x90) + after_x90 = 1; + else { + last_char = d; + putc(d, tmpf); + } + } + } + + if (c < 0) + return "unexpected EOF"; + else if (c != ':') + return "bad character"; + + fflush(tmpf); + return 0; +} + +static int +check_binhex_crc(FILE *f, int offset, int length) +{ + int crc = 0; + char buf[2048]; + reposition(f, offset); + while (length > 0) { + int n = (length < 2048 ? length : 2048); + fread(buf, 1, n, f); + crc = crcbuf(crc, n, buf); + length -= n; + } + return crc == 0; +} + +static const char * +check_binhex(FILE *f) +{ + int fname_len, data_len, rsrc_len, off; + + /* check lengths */ + reposition(f, 0); + fname_len = read_one(f); + if (fname_len < 1 || fname_len > 63) + return "bad length"; + reposition(f, 1 + fname_len + 11); + data_len = read_four(f); + rsrc_len = read_four(f); + if (data_len < 0 || rsrc_len < 0 || data_len >= 0x800000 || rsrc_len >= 0x800000) + return "bad length"; + + /* check version */ + reposition(f, 1 + fname_len); + if (read_one(f) != 0) + return "bad version"; + + /* check CRC */ + off = 1 + fname_len + 21; + if (!check_binhex_crc(f, 0, off)) + return "bad header CRC"; + if (!check_binhex_crc(f, off, data_len + 2)) + return "bad data CRC"; + if (!check_binhex_crc(f, off + data_len + 2, rsrc_len + 2)) + return "bad resource fork CRC"; + + return 0; +} + +#ifdef __cplusplus +} +#endif + + +int +main(int argc, char *argv[]) +{ + FILE *ifp = 0; + FILE *ofp = 0; + struct pfb_writer w; + const char *ifp_name = ""; + int32_t res_offset, res_data_offset, res_map_offset, type_list_offset; + int32_t post_type; + int num_types, num_extracted = 0, pfb = 1; + int raw = 0, appledouble = 0, binhex = 0, macbinary = 0; + + Clp_Parser *clp = + Clp_NewParser(argc, (const char * const *)argv, sizeof(options) / sizeof(options[0]), options); + program_name = Clp_ProgramName(clp); + + /* interpret command line arguments using CLP */ + while (1) { + int opt = Clp_Next(clp); + switch (opt) { + + case RAW_OPT: + raw = 1; + appledouble = binhex = macbinary = 0; + break; + + case MACBINARY_OPT: + macbinary = 1; + raw = appledouble = binhex = 0; + break; + + case APPLEDOUBLE_OPT: + appledouble = 1; + raw = binhex = macbinary = 0; + break; + + case BINHEX_OPT: + binhex = 1; + raw = appledouble = macbinary = 0; + break; + + output_file: + case OUTPUT_OPT: + if (ofp) + fatal_error("output file already specified"); + if (strcmp(clp->vstr, "-") == 0) + ofp = stdout; + else { + ofp = fopen(clp->vstr, "w"); + if (!ofp) fatal_error("%s: %s", clp->vstr, strerror(errno)); + } + break; + + case PFB_OPT: + pfb = 1; + break; + + case PFA_OPT: + pfb = 0; + break; + + case LINE_LEN_OPT: + blocklen = clp->val.i; + break; + + case HELP_OPT: + usage(); + exit(0); + break; + + case VERSION_OPT: + printf("t1unmac (LCDF t1utils) %s\n", VERSION); + printf("Copyright (C) 1992-2017 I. Lee Hetherington, Eddie Kohler et al.\n\ +This is free software; see the source for copying conditions.\n\ +There is NO warranty, not even for merchantability or fitness for a\n\ +particular purpose.\n"); + exit(0); + break; + + case Clp_NotOption: + if (ifp && ofp) + fatal_error("too many arguments"); + else if (ifp) + goto output_file; + if (strcmp(clp->vstr, "-") == 0) + ifp = stdin; + else { + ifp_name = clp->vstr; + ifp = fopen(clp->vstr, "rb"); + if (!ifp) fatal_error("%s: %s", clp->vstr, strerror(errno)); + } + break; + + case Clp_Done: + goto done; + + case Clp_BadOption: + short_usage(); + exit(1); + break; + + } + } + + done: + if (!ifp) ifp = stdin; + if (!ofp) ofp = stdout; + +#if defined(_MSDOS) || defined(_WIN32) + _setmode(_fileno(ifp), _O_BINARY); + /* If we are processing a PFB (binary) output */ + /* file, we must set its file mode to binary. */ + _setmode(_fileno(ofp), _O_BINARY); +#endif + + if (pfb) + init_pfb_writer(&w, blocklen, ofp); + else { + if (blocklen == -1) + blocklen = 64; + else if (blocklen < 8) { + blocklen = 8; + error("warning: line length raised to %d", blocklen); + } else if (blocklen > 1024) { + blocklen = 1024; + error("warning: line length lowered to %d", blocklen); + } + } + + /* check for non-seekable input */ + if (fseek(ifp, 0, 0)) { + char buf[2048]; + FILE *tmp = tmpfile(); + if (!tmp) + fatal_error("cannot open temporary file: %s", strerror(errno)); + while (!feof(ifp)) { + int i = fread(buf, 1, 2048, ifp); + if (i > 0) + fwrite(buf, 1, i, tmp); + } + if (ferror(ifp)) + fatal_error("%s: %s", ifp_name, strerror(errno)); + reposition(tmp, 0); + fflush(tmp); + if (ifp != stdin) + fclose(ifp); + ifp = tmp; + } + + /* check for empty file */ + fseek(ifp, 0, 2); + if (ftell(ifp) == 0) + fatal_error("%s: empty file\n\ + (Try re-transferring the files using MacBinary format.)", + ifp_name); + + reposition(ifp, 0); + if (!raw && !appledouble && !binhex && !macbinary) { + /* check magic number, try to figure out what it is */ + int i, magic; + magic = read_four(ifp); + reposition(ifp, 0); + + if (magic == APPLESINGLE_MAGIC || magic == APPLEDOUBLE_MAGIC) + appledouble = 1; + else if ((magic & 0xFF000000) == 0) + macbinary = 1; + else { + binhex = 1; + for (i = 0; i < 4; i++, magic >>= 8) + if (!isprint(magic & 0xFF) && !isspace(magic & 0xFF)) + /* not an ASCII character, assume not BinHex */ + binhex = 0; + } + + if (!appledouble && !macbinary && !binhex) + fatal_error("%s: unknown file type", ifp_name); + } + + if (raw) { + /* raw resource file */ + res_offset = 0; + + } else if (macbinary) { /* MacBinary (I or II) file */ + const char *check; + int32_t data_fork_size; + + /* check integrity of file */ + check = check_macbinary(ifp); + if (check) + fatal_error("%s: not a MacBinary file (%s)", ifp_name, check); + + /* read data and resource fork sizes in MacBinary header */ + reposition(ifp, 83); + data_fork_size = read_four(ifp); + (void) read_four(ifp); + + /* round data_fork_size up to multiple of 128 */ + if (data_fork_size % 128) + data_fork_size += 128 - data_fork_size % 128; + + res_offset = 128 + data_fork_size; + + } else if (appledouble) { /* AppleDouble file */ + const char *check; + const char *applewhat; + int i, n; + + /* check integrity */ + check = check_appledouble(ifp); + if (check) + fatal_error("%s: not an AppleDouble file (%s)", ifp_name, check); + reposition(ifp, 0); + if (read_four(ifp) == APPLESINGLE_MAGIC) + applewhat = "AppleSingle"; + else + applewhat = "AppleDouble"; + + /* find offset to resource and/or data fork */ + reposition(ifp, 24); + n = read_two(ifp); + res_offset = -1; + for (i = 0; i < n; i++) { + int type = read_four(ifp); + if (type == 0) + fatal_error("%s: bad %s file (bad entry descriptor)", ifp_name, applewhat); + if (type == 2) /* resource fork entry */ + res_offset = read_four(ifp); + else + (void) read_four(ifp); + (void) read_four(ifp); + } + if (res_offset < 0) + fatal_error("%s: bad %s file (no resource fork)", ifp_name, applewhat); + + } else if (binhex) { /* BinHex file */ + const char *check; + FILE *tmpf = tmpfile(); + if (!tmpf) + fatal_error("cannot open temporary file: %s", strerror(errno)); + + /* check integrity */ + check = translate_binhex(ifp, tmpf); + if (check) + fatal_error("%s: not a BinHex file (%s)", ifp_name, check); + check = check_binhex(tmpf); + if (check) + fatal_error("%s: bad BinHex file (%s)", ifp_name, check); + + /* find resource offset */ + reposition(tmpf, 0); + res_offset = read_one(tmpf); + reposition(tmpf, 1 + res_offset + 11); + res_offset += 22 + read_four(tmpf) + 2; + if (ifp != stdin) + fclose(ifp); + ifp = tmpf; + + } else { + fatal_error("%s: strange format", ifp_name); + exit(1); + } + + /* read offsets from resource fork header */ + reposition(ifp, res_offset); + res_data_offset = res_offset + read_four(ifp); + res_map_offset = res_offset + read_four(ifp); + + /* read type list offset from resource map header */ + reposition(ifp, res_map_offset + 24); + type_list_offset = res_map_offset + read_two(ifp); + + /* read type list */ + reposition(ifp, type_list_offset); + num_types = read_two(ifp) + 1; + + /* find POST type */ + post_type = (int32_t)('P' & 0xff) << 24; + post_type |= (int32_t)('O' & 0xff) << 16; + post_type |= (int32_t)('S' & 0xff) << 8; + post_type |= (int32_t)('T' & 0xff); + + while (num_types--) { + if (read_four(ifp) == post_type) { + int nrsrc = 1 + read_two(ifp); + int list_offset = type_list_offset + read_two(ifp); + int rsrc_pos = 0; + int want_id = 501; + int second_time = 1; + reposition(ifp, list_offset); + /* read resources sequentially, starting with ID 501, until we encounter + an "end" resource or we can't find the next resource */ + while (rsrc_pos < nrsrc) { + int offset = ftell(ifp); + int id = read_two(ifp); + if (id == want_id) { + (void) read_two(ifp); + (void) read_one(ifp); + num_extracted++; + if (!extract_data(ifp, ofp, &w, res_data_offset + read_three(ifp), pfb)) + break; + second_time = 0; + want_id++; + } + reposition(ifp, offset + 12); + rsrc_pos++; + if (rsrc_pos >= nrsrc && !second_time) { + reposition(ifp, list_offset); + rsrc_pos = 0; + } + } + break; + } else { + (void) read_two(ifp); + (void) read_two(ifp); + } + } + +#if 0 + system("/bin/rm -f /tmp/x.*"); + { + FILE *f; + int i; + reposition(ifp, res_offset + 16); + if ((f = fopen("/tmp/x.systemarea", "wb"))) { + for (i = res_offset + 16; i < res_data_offset; i++) { + putc(getc(ifp), f); + } + fclose(f); + } + } + reposition(ifp, type_list_offset); + num_types = read_two(ifp) + 1; + while (num_types--) { + int t = read_four(ifp); + int num_of_type = 1 + read_two(ifp); + int32_t save_offset = ftell(ifp) + 2; + reposition(ifp, type_list_offset + read_two(ifp)); + while (num_of_type--) { + FILE *f; + char buf[2048]; + int x, i, attrs; + x = ftell(ifp); + i = read_two(ifp); /* ID */ + read_two(ifp); + attrs = read_one(ifp); + sprintf(buf, "/tmp/x.%c%c%c%c.%d", (t>>24)&255, (t>>16)&255, (t>>8)&255, t&255, i); + fprintf(stderr, "%c%c%c%c.%d %d", (t>>24)&255, (t>>16)&255, (t>>8)&255, t&255, i, attrs); + if ((f = fopen(buf, "wb"))) { + int l; + reposition(ifp, res_data_offset + read_three(ifp)); + l = read_four(ifp); + fprintf(stderr, " %d\n", l); + while (l > 0) { + int n = (l < 2048 ? l : 2048); + fread(buf, 1, n, ifp); + fwrite(buf, 1, n, f); + l -= n; + } + fclose(f); + } + reposition(ifp, x + 12); + } + reposition(ifp, save_offset); + } +#endif + + if (pfb) + pfb_writer_end(&w); + if (num_extracted == 0) + error("%s: not a Type 1 font (no POST resources)", ifp_name); + + fclose(ifp); + fclose(ofp); + return 0; +} diff --git a/Build/source/utils/t1utils/t1utils.test b/Build/source/utils/t1utils/t1utils.test new file mode 100755 index 00000000000..b9d62aba08d --- /dev/null +++ b/Build/source/utils/t1utils/t1utils.test @@ -0,0 +1,35 @@ +#! /bin/sh -vx +# Copyright 2017 Karl Berry +# Copyright 2011 Peter Breitenlohner +# You may freely use, modify and/or distribute this file. + +failed= + +rm -rf Symbol.* +./t1binary $srcdir/tests/Symbol.pfa Symbol.pfb \ + && ./t1ascii Symbol.pfb Symbol.pfa \ + && diff Symbol.pfa $srcdir/tests/Symbol.pfa \ + && echo "t1ascii/t1binary tests OK" \ + || failed="$failed t1ascii/t1binary" + +rm -rf Symbol.* +./t1disasm $srcdir/tests/Symbol.pfa Symbol.raw \ + && ./t1asm -a Symbol.raw Symbol.pfa \ + && diff Symbol.raw $srcdir/tests/Symbol.raw \ + && diff Symbol.pfa $srcdir/tests/Symbol.pfa \ + && echo "t1asm/t1disasm-ascii tests OK" \ + || failed="$failed t1asm/t1disasm-ascii" + +rm -rf Symbol.* +./t1disasm $srcdir/tests/Symbol.pfb Symbol.raw \ + && ./t1asm -b Symbol.raw Symbol.pfb \ + && ./t1ascii Symbol.pfb Symbol.pfa \ + && diff Symbol.raw $srcdir/tests/Symbol.raw \ + && diff Symbol.pfa $srcdir/tests/Symbol.pfa \ + && echo "t1asm/t1disasm-binary tests OK" \ + || failed="$failed t1asm/t1disasm-binary" + +test -z "$failed" && exit 0 +echo "failed tests:$failed" +exit 1 + diff --git a/Build/source/utils/t1utils/tests/Symbol.pfa b/Build/source/utils/t1utils/tests/Symbol.pfa new file mode 100644 index 00000000000..deb28490b15 --- /dev/null +++ b/Build/source/utils/t1utils/tests/Symbol.pfa @@ -0,0 +1,1044 @@ +%!PS-AdobeFont-1.0: Symbol 001.007 +%%CreationDate: Wed Jan 17 21:48:17 1990 +%%VMusage: 28489 37622 +11 dict begin +/FontInfo 10 dict dup begin +/version (001.007) readonly def +/Notice (Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved.) readonly def +/FullName (Symbol) readonly def +/FamilyName (Symbol) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -98 def +/UnderlineThickness 54 def +end readonly def +/FontName /Symbol def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 32 /space put +dup 33 /exclam put +dup 34 /universal put +dup 35 /numbersign put +dup 36 /existential put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /suchthat put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asteriskmath put +dup 43 /plus put +dup 44 /comma put +dup 45 /minus put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /congruent put +dup 65 /Alpha put +dup 66 /Beta put +dup 67 /Chi put +dup 68 /Delta put +dup 69 /Epsilon put +dup 70 /Phi put +dup 71 /Gamma put +dup 72 /Eta put +dup 73 /Iota put +dup 74 /theta1 put +dup 75 /Kappa put +dup 76 /Lambda put +dup 77 /Mu put +dup 78 /Nu put +dup 79 /Omicron put +dup 80 /Pi put +dup 81 /Theta put +dup 82 /Rho put +dup 83 /Sigma put +dup 84 /Tau put +dup 85 /Upsilon put +dup 86 /sigma1 put +dup 87 /Omega put +dup 88 /Xi put +dup 89 /Psi put +dup 90 /Zeta put +dup 91 /bracketleft put +dup 92 /therefore put +dup 93 /bracketright put +dup 94 /perpendicular put +dup 95 /underscore put +dup 96 /radicalex put +dup 97 /alpha put +dup 98 /beta put +dup 99 /chi put +dup 100 /delta put +dup 101 /epsilon put +dup 102 /phi put +dup 103 /gamma put +dup 104 /eta put +dup 105 /iota put +dup 106 /phi1 put +dup 107 /kappa put +dup 108 /lambda put +dup 109 /mu put +dup 110 /nu put +dup 111 /omicron put +dup 112 /pi put +dup 113 /theta put +dup 114 /rho put +dup 115 /sigma put +dup 116 /tau put +dup 117 /upsilon put +dup 118 /omega1 put +dup 119 /omega put +dup 120 /xi put +dup 121 /psi put +dup 122 /zeta put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /similar put +dup 161 /Upsilon1 put +dup 162 /minute put +dup 163 /lessequal put +dup 164 /fraction put +dup 165 /infinity put +dup 166 /florin put +dup 167 /club put +dup 168 /diamond put +dup 169 /heart put +dup 170 /spade put +dup 171 /arrowboth put +dup 172 /arrowleft put +dup 173 /arrowup put +dup 174 /arrowright put +dup 175 /arrowdown put +dup 176 /degree put +dup 177 /plusminus put +dup 178 /second put +dup 179 /greaterequal put +dup 180 /multiply put +dup 181 /proportional put +dup 182 /partialdiff put +dup 183 /bullet put +dup 184 /divide put +dup 185 /notequal put +dup 186 /equivalence put +dup 187 /approxequal put +dup 188 /ellipsis put +dup 189 /arrowvertex put +dup 190 /arrowhorizex put +dup 191 /carriagereturn put +dup 192 /aleph put +dup 193 /Ifraktur put +dup 194 /Rfraktur put +dup 195 /weierstrass put +dup 196 /circlemultiply put +dup 197 /circleplus put +dup 198 /emptyset put +dup 199 /intersection put +dup 200 /union put +dup 201 /propersuperset put +dup 202 /reflexsuperset put +dup 203 /notsubset put +dup 204 /propersubset put +dup 205 /reflexsubset put +dup 206 /element put +dup 207 /notelement put +dup 208 /angle put +dup 209 /gradient put +dup 210 /registerserif put +dup 211 /copyrightserif put +dup 212 /trademarkserif put +dup 213 /product put +dup 214 /radical put +dup 215 /dotmath put +dup 216 /logicalnot put +dup 217 /logicaland put +dup 218 /logicalor put +dup 219 /arrowdblboth put +dup 220 /arrowdblleft put +dup 221 /arrowdblup put +dup 222 /arrowdblright put +dup 223 /arrowdbldown put +dup 224 /lozenge put +dup 225 /angleleft put +dup 226 /registersans put +dup 227 /copyrightsans put +dup 228 /trademarksans put +dup 229 /summation put +dup 230 /parenlefttp put +dup 231 /parenleftex put +dup 232 /parenleftbt put +dup 233 /bracketlefttp put +dup 234 /bracketleftex put +dup 235 /bracketleftbt put +dup 236 /bracelefttp put +dup 237 /braceleftmid put +dup 238 /braceleftbt put +dup 239 /braceex put +dup 241 /angleright put +dup 242 /integral put +dup 243 /integraltp put +dup 244 /integralex put +dup 245 /integralbt put +dup 246 /parenrighttp put +dup 247 /parenrightex put +dup 248 /parenrightbt put +dup 249 /bracketrighttp put +dup 250 /bracketrightex put +dup 251 /bracketrightbt put +dup 252 /bracerighttp put +dup 253 /bracerightmid put +dup 254 /bracerightbt put +readonly def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/UniqueID 27004 def +/FontBBox{-180 -293 1090 1010}readonly def +currentdict end +currentfile eexec +d9d66f633b846a989b9974b0179fc6cc445bc45dd269e6abbcd967f64d2bf7e5 +66a857248b46d33099bca44f9258838bca3e54b1daf651f8b8ab64cde263f99f +b136cb4cd994b408d5c09c12aec2bf2684034bbeca83ff59aa138170727f0de9 +960d6098bc8547dba2d84365b678b67a709b60e70b3bc529a59fe33c1c8b4fde +d9b0bef3da9a2de7fc137edcced3b30a3c128a36449a89a89674813e9e668968 +7343fc54cd8d25e04e75ea3049f9be1f1c0dea4e5a5a1bbbcc8817a303a4a59d +e0627d697d00a701af2ec68ca1d08423cd5f6f0fe83eb1674c4078793a2defd9 +b2f377c963f556b43edb3a282bcdfea84efdc1f611550fc4baf1eee69625f0fd +c05696abcd03da2e37e4c751df7b5b1749e6ad1d64eb9d81af66218f846b6a0f +e4766c3da76197f3fd263dbcda8b800b451b2a76adc036837c2c279e0c50ed68 +1b9e57d2d461fcfabe5ad5282b579b3898f5c39b5ed116a248fc640e674dd7c0 +cafc1db729745224e9482c77e978d2c3f94c987e9770ac01ca751d99af4259da +653ffe49c944116a3304add9bd9528f3d8e510d9b8cd36c06e5c4bee140ccfce +492e726ad40d239f2a2a980ff121d99fa25fca160622c7dae960fa3901da1b28 +c8eb2f131f4f77b625834dc19a3a646489c00470e47f877e763e076695edece5 +a860c7608d33962c1d7290ee65003d2250dc7e87e1d8273192eb30e4d4ce5231 +08980baa513ea364c84cb4d05295ce4dc7ab78ccfbabdfe5695d589c1d6afd32 +52a06b2d08333e981607befb837d738431c37b9aa2cf899ff2a5a04e2a457920 +50537d4a503a766928557628c2257abd64fcba91ea0165b2c1aae2c32e12f8d2 +c9804b015dcfab37318596d80d261b55ddb3f08a84fa5b6daad517a13e685a27 +b6f8497bf5abdf0e0bbafb18db72f4079f430b3fc0f8d929be3bbe629dc383a1 +87c00e95820f40c60c09cb5fa0b49f79f936abe1a484af4f2e4129f5afb70808 +fafde3f3ba3b1d6e1d380dcfa993a67cbd0b555a29c1a4f5433714f90ca582da +a0ae14ca5b018222f2c49ffe0adabd3382cc3c07493467d81fc6efb9015a6817 +a5765a12be200f1d616cc0875beefedb8548e1be9f377be69917057aa72a6f6a +007ad617b27254c693723d66ae11070637f864f6543004acdcb3abb028ccaa91 +fea4e9935f4fdeabe6aca29adb69e7d90a582fa26fead49aef747afb35100bc4 +d4317ad81f8450770ba66d1daccc557e1b9ee6f33eba890a635833688a115ede +725db7723a49b384006f783a51d0ee9fff6cc7078948d992fce55c9b5ad924f8 +7f8cf0099b039558da33c6c18a737a223d60bff389cc77fb46836bacfb886155 +01db1133ed6e441bdc95a092ed646f369586f794af45f910c9f3049961382f7c +726f6deb68750e08f405afa64d6061950d1b9db3c1d1afc1ffe2f984a34c4d3c +7a7cc3be69c9afb8fb7cd62cc34586822376f47f44ddc635b5bec247df3e7e36 +31228391a01fcf298ec3cb70707f4f7ddff026b1d6c3a4741a68097b60e1b566 +4777c0b0be3d56d1d072173c9727d25074d36b89dbef53e9614c558a8efa9dfa +b0b1bdfec05cf95504c55b79c2ea1f26c8eb2ffa87ce806475c91e5d83a58ade +c1ebc91d6b2cee1f9a2301871427156206c4c2316aeda07cc237aa7dad2dc345 +7961340e3905bf77a9a27a0fadfac8d2c0732a013ed4c11b2163eec280bb4a46 +413d9d7fa20b6a8f305717c3647ff4fea9d490254d08663a410892ea0ca12895 +b658807f988544196b00f0bcfcb72fae9a94801481cdf494c2b0f588c9f25b5d +c57cf9024f394f73702ed9cae49430a103e3c82a8bb7d5ed559ec533265d335f +a53819c87812cab867d73de757e5eac2cbda950d485f880314ec95bd2ac10d84 +fc2a86c70cc82b42c1d212bf7ba02c839ab44cdbd63f4a1401adb37828c6a967 +db480914b681cfc5d66550da172834f9569c883103bd3930ce5eb379a72abc27 +7896399cc2a56b6a105bbc886d3423b445abc63c268f14842d160624e1a8844a +56ad3bca093b867023409678e33525c8db5ce6eaa480f411aa4b897fecfc504f +f0ae7d565be5180052177e51819e067c07146a45621e1298a8094764a75e140a +c1c7ca426c3c6bd7709a05bc52805b43e6201dec8136302b627f5bc99aaf49b0 +5e8ada83bd4f0f81061d0e0981c671d7605f9d205a16ff097d9f32321d1bdeb7 +19d0cbf9b018b86354f21b4228292a422264b5f7bf6e838552a1ddf11dc57af4 +ca7eb974856705294fa43c426cb8f854729e34a4578e432ef6ec7952dd5f1381 +fb9d22e87f44368d806bdbce2dd08fa2e522bd079923b1ef0142e86ec2d57278 +42b430f3c21d3fcd93fcbc24c0033ae84d5b6459de06bb23b32617fefaa54146 +4f1befae96e72fd4653f41fcc00c0f744e6eeff59ed005ae852e0e580d44d3d0 +8642fa598f92f6d95553e22c121885aa8f5bc0210ead6b2caf4eeb0dcb9bf4f4 +24354dbe184e2b3eb75f1a1228afb450baaf7ce1d9a30d33a7a48349bfe8467b +0c8e92e1812a806438b333ef11ad61393844c330b781fe42db18e734ca311bd0 +4055e4a76d16591a363ace298c012a4233ae9217cff8988e7555b34912830059 +b91f02042060e1f47f0b760818a97514d8e04e5b2c56a6ada17195d5a65d5210 +8cb54eb6d9bd1d20bc9850c0e5b007b5e74c2e4b5bc226a5c2c59d887b808503 +4e31fe6ac5d2f55e5e0e069804971a03327f1fe3e23dbd11d2f3fb138ab7a052 +d65f10b5ff1ae2bc754b5cbfbf6275bec8f6ddacb6a2f4a472c593adfce88948 +56d69d69d341bbe8e5ad20dc5af8a1ff55db8cebd587106aa3cfcdef9bdd1727 +2c52ab892db3015076b09b4a387e259c3ba73a8a776fd4b7b8a7cbb496643a18 +3ddfffc288a3880e78453e7ea1a96a67e7c04cc414cbb1a8b97726953e4153c5 +a340c84feaf0e0622b7c21f5f8bca8559c75c56f859236b6cd719d95ceffdcaa +f3087b4ef52147208d9edf090d6bf565a5cdfc2f1e54f2ca05028112a9540734 +1d1ab898d099228a3075f2a4c5a3974a727de41a1500e4b31f5f160530d18df0 +8eec560fba38680ca399b83d84972d06c65a47a53b46226ba6ac65defbcbc78f +3f0025846007094bc15e9cfc449f9f3cc52db8585d701e7994b671f1cac02e6e +28e9a4656d474f2dcf39f81d41a147004d807f7de678cdcbc5c675a965ab01a1 +10e1b9d0956b7a37edc521e7f3e66e25bc597417d8056d2a4217d08d25560c89 +aeb4331c7fdcbb5ff6a84b4db3c6d0ee5b2d4002e06f11ed1fbd89bfec1ede83 +41ef2d86b71d1b804615bc475166c03300455db6610b00ba5a3f493eedb80140 +1e1d2d8fde328c611e78fe5f9262b4621a876f7c7656e6c1ee34f30e8b0decba +7ab9df4443098a2c223d737832cd79e49e9e9747c110b8df4f978b7850e08218 +d95ab24798078e1c61bc88cfbd6fe74eeb86b6ebb033bb8e284ebc1bca5c14d2 +e242e887772b8ef445b34e8b825f59875605cc9db849cb9eb615b9b7424e75d6 +6d17f25a1c427d2a1e970dbb81a704546a63a15496e42772ae324f42b1c14695 +1d3fb6800d5d97af5ceb3e799bb1451521a57755555b0fd2c414b033a411a379 +8a46e6f4dcb97770505e00ee5e6c32a713ecdd642c9d3a0a42350492352f6689 +65a371dce22c1378b73290cc59cf47f6f6ab66fc801e85135d6878c08f66b0dc +b91f972643d80f8651e3c41e52e728d9798a83e2d2b2476a88a88388719fed37 +0d6e5e219dc8ee7c88c5d649278222b6f45fe06ddeecdd43f909ca6d611704bc +0aa1d0a5d5c914b0df591a174bd260d2c589f0fa335bcd5a25e0281035242608 +be24fdbf0c96b9f1604d6c345a705bdaaffd83652167adf0d194a3a44d6c7640 +c26f0a5df57cef0af74c4c1f8efc7b1f9e2579678b7fd187a64e50ea9c5a8dba +3e3acbe92a5f1eb0abcc4408c85a76fedc952c1a80c013d5f8aa2481cd3468aa +ca89b74f5233cc25dd8168bd5f27c1aeb5192267a93ab4de76caafa6c83ff602 +670fa7a7a7849ab04ecc661fd65edc16b35ecff76060e385e527b758bae3a344 +bcc92b0f925b3a02b4062b5c0a94003a75e26cc89e88f3b4eb5fcaf690e2fc62 +8b5ceb275df9f31233b576d22e16d2623a2d819b5d6d7891908cd32164062b62 +20eb1cadc9c6524d9749854d4372137c2a878e5fb7aca4c9e44ddc667683ddfd +251119c4edb7590fe3487c9041b26f0a7400c9a2ea4f990890cabbbfa9487616 +505cb9bbf818224c295b27e7b86e10af35ba9aa1317f148b6c6dc015c459ad9e +ca35be60975b5ad4c46cf2ebf610b81e8edb34e681d67d69eb26a85d1fa942ca +3bd0486058ed1f8229907d6b7e56fd2558a5ab178cec1c66bc690900696b7e92 +554c96acf24fa650b1ad5308084317fdccd21680be2eab1591de9df8fbc05d85 +b21de6f7cf4a01f9be8b86c51e2e7cb1467b867b4da3ce8ea22542d5f9882c8b +a74f80702adb06d3a22adf87b5abd1b9c06a2bd7ff0cf4fea74a85add4f18fbe +7f27851edee5e23c2b9096b9e8882db0b80bd07f6036d98508fe36189e3504c8 +dd3dedcb7aa65c8141edf3fa815413173f2af32e49229523482c4b5b02badcab +74c11882b5d0966c5450b53745892c0bfef3c54bc4cd4699fb39da26e691cd66 +67680ac9baef5dc6d608f4a3e4cf2591612ac744263eb593e91221ba7391ec15 +895b314d3d39a344bb9f6afedc4b77f3b680defc04c648f18931d178333a4a53 +07268566873ddfab45cb06bc1006a4edba8beefe8d419068843a44c4daa9a6b2 +40df5e4121ea3641a02f557b277af89b5b12e7700cfa177fe3cfe6aff222d51a +9d1f06b46e517490a6617b8fc33ced47e7ec14ead23e11d939f74e971b6bcfb7 +09eab9985d0006254f75162d04386cc5843edd11362b7dd0eca2c15d404305ca +d67ec6af91a59bc575f972dfea458836946ef65a09211dfc2f5e2b2a8192b3c4 +76cb981249642034b2aba3088186ed0f2fc0129b0c5e8ff37cabecccf62a4258 +7c645972c0e8d075703974d424ca490c5e4786828706213421799dbedcfcea9a +40f5fe83062a7e58a7933ed521c78887a7387c74e03ad97dfce88cc13527cbd0 +964a76cc7891f67f194c0ff47b8bdd7333f724a5cef4b67f6c5acdc294f2f876 +8ab9001a4f3aaf146dca64f9c1e9f15db44fe4c344fa8fb138af69eb5f35b271 +41eef19286928fcefef6e2fd1c3a790983ff7ab52b21ba5a7c3533004eed62ec +db7c8ccc9a825b0f943acac8c8fcdf219f058a195ce2b31a1f22ab5c255580ee +74e7f26dd60ad9d6d118462fef7e2ce6a1c5c6d87d0e5d48429dd15368d0abee +e82d3dd7d6c0ae2e3a85f9842a5c87b30f8bea32eeb41ca283b5de6b5e0fbdfe +e79df38c95ddfe2531ff04b0835e1e532d1e73b551bbf7a50d891153edfd67f4 +73d5819f81ac6354e8ebb8be6c429cea90e78ccd679431a07d20cc6902f21793 +4b478605633d9aa41ccb2b4e94476d47959d2f8538b94c0a776afbce4b100d1f +1e7253208109b83ffc894adcb2501bffbd07256811ea22afcdf09ccecd79a6e6 +000ffe40d6eaa52213058e2b8b86a325e655a6cd9ceed54d8a6367039b689e69 +f6134c8128aaf6d7a5e239ad5f1cb59143072ebd3fee80768be998ae1cff7f1f +404173dc1c5f7875ce6436935229a89e16de5bb329cfd80c1055fb29f5acbbae +81eb67472a3d7c338643acb41dd6660074428573590c7f5d4d7973347f44a8af +14295b95a97c770326389535ec138b0badc1e0e27b4f373dd15d7a7a53864c5f +af26988682c9e6cfbe7ce93354a5faa09aa2e20d7474b0be90bb6ca204753b70 +b1a41224e9420adae4535ba901ec41690e6ce67e8b694d9438eb791e4d4e68b2 +558064ed91042d960f47363846e5c43f20ef5dd68023284b0365b8d1eba042b3 +feaff13a77bee8b7414ced092ccb2ba7109db8f4bc9800b67ba3a8a1c61b9068 +3254f904296873b9a94cd27f65b91e5aba024c39187161892a1b7a004aa2544a +5dafd763da82aee07e43a3da1b367856472ec988b41817d066b4f643ac202f34 +230cbf28e5ba8697372a33c82670cddfb7dd0a762945d63a2ab3b0c982c627f9 +c8cf861c401f093fcf2d596875d81722fa3001083ae8dce7c8258155a80aa387 +d8fd0f042aeedf015c4ea4d55f11a32c3fc704fd8332587051078a754569018a +537020c63db4029661dec368e9d402a268bab2b1b4099b59a7118fad8bea8957 +a31389441e55cda47f0d846e8ff7e30154bec80d687d7ebd368d1a9b4e514e70 +2d4facb416876c126b5333b4473f20344530e9f8d9b96f95739fd3f697eebf96 +9200fda7d1c54f7c1e63c2b03df12ea69dc1587cb74c66b49dd54353f90dc015 +293fbf8b186005e9d5d2c5fdf969b9f672bdf105cb0aa61dc22b516d3710f0fb +7c33e81bdc633fcf231300cffdd49b782cbbe9b79eea278021ab6fe4f4fa343c +695e5c621b1d077df71fc58f7328ee520d937311e76d9f80f45eaa7790c285cf +3c996ba2131993d98dd3102c67a395ee4b7e6bbbe5859caa44ece83a0c33cf02 +ef01e4f23b00dfd63e09796172a75be36bcf9fa6bd0c93e5bc322e18a06c9c35 +1b99b5d7f290388c57c76cd63355d6395ea2cc176300fb8ff146cb63f5e63ebe +d44e7a3e0fc91d9b6fe3734960ad59668aa1e84a3e01f9b9c79f711b13e7f784 +4bb563d09631454bddee0dec931b83a4541784a462716798e48657c6e9b7d40f +3c49b7108b443e6544cb1c56980d54a422b07af394c1f235cfa52a627bb6dadc +21d7cdc394277515d3d3061c044f93a9345c54680285b3e905a71839ac03c8df +4d6da861605ba94196aa470fc85a395dbaa69ad2724ac7a9c7bb99702c908030 +155307c18b8bbd5806df1018707f3d33dd181eb8a9f4b1100ab0983f86dbc832 +d7949e6e023bbb1d129ebc920d22450101cb78fc8707f5cdffdf48d7389820b2 +c38c0ff5317bf63abfa37e906ab27639a385c420ee43e426afe8982244663812 +a113a2c8d96338db0c75647162efafdd1ac7d7ac039044e9e4f6f548c0a57a15 +c364ccff818863b504ef53f08d4c76fed3a6113a03d21e978db16c619306c9d0 +708fb479239eb8adee34933b6325cf96a80f50e77a5492036ea66e7bf5845c3a +867031e5b8cc105f862ddcb931fbd7e3502db45607f020fe8f2ff41cf3adc6a6 +9a8e87e1c50491a0cc5600a4f4625e30e6abf307e7bd63455356aadd7bc3e81c +1546281f36918f59b88d4c6d0585f35cbf76e99e548c99afc1b93f9372792328 +658b280d5356eb8d1df2fa2129f4a7f319872ea4a2359517adfb9cd18f36dab2 +74519f18deec1fa06699fb62091042aa2aa0e0ca0efe9feb95ffebe594b82296 +c5cf578e91e3da6ebfa6f73a32b2ca33e0a6fee3c7f1e4d153bf0c07f94a3cf6 +d9897449d9a644961c26612ea5ff7f45098c619beebd99843ec09d34847adcc5 +188f0b9e252b69c4d4301209c716c6a5965357dd99d5ccebce79373161e80824 +fb05a2573bb809649219d69d8d5972167ffcb337b479527e94085d06e1d35015 +f173381047cae7ea8b5dc7b7eda2639da14b3138ef646665fa7c386db825b5f2 +d3f48927d98a7c96b7e10be4f4821a1c65816f3b8cd8feb3830de1c5a7bf54c1 +a37b9514e7bc6cefa7d1dd5c353e3226e1d23fd79179fdee95a51fd2923d1449 +2280a6b99aee29e89f57c60bd30a19f2b9784cb665a46e4f2c5c14353a2dac04 +c15f858bdce218c4e84401056dbab167d36cec62c88245f27bc29676c2b41cbe +04d87ffc83b728daecc20f861ad2a53f4644d69c2b03146db4240da002bc02fa +5651f3570272f31d5f2f91e9729a4bc78fc7200a617695109e08abad2a176bb7 +70687440b77cdb356b54ca9eeeee7f8c64f7a0240844d31444af92c90ab2884f +6ec02314cb9f77d7629e510a3963cb97766bc1dff389cab79bfae09022107373 +51d7b3ee987887d78bc5ec8c18f6bdf1b521b1b69430ba0766492a694138a500 +ccb536a6d0a7936fbc2c5d6824f0515d45ddfc11925edf2287bd862ea8cfc437 +063cd38862cc9dbd815c55c221e4b567d2d80e870bf343e573105617d5c879be +f98c2491e9758bd84390ff3bd8aaa6428715d6b45ed1c3dedd06f1ddb996ad06 +36739bf74ae0310ebb1a593dc6d76bbaf852e4d9228bcdee83517d18a89ee59a +9761c6a7af6cbf477c7634b451e4e25d80b48662551d6e1d48995b88b77b1320 +752be9fe33211e264f8bd0625cd1b53e075110b0b55c802c68c119252012cce1 +4d20a798e1aaf0ede1987d27a1eb805e645bb249935107885907b603ae3ec4dc +06b39d130f667db07523189e5efc00dfb52419848a1ffbe1cedb11ab17056639 +c3686d856ef20182830ef3d5d27be752a7d87a9735e5df22d0d4db1299437689 +202f85d3649ef7b4cb2fbd88df9be2eb8a38920c2cb9020136d701238c479e73 +1b17c23ab400380e28fa12f6be35e12a9aaf540551064af639c8fcb78b3c73a6 +b72aac7f952ea2978a2c632284e5ffde69886643ba86f5e6684efd176c960f90 +750c0f8506fbc1eb151309ca6c5cce1fc0dae1fe55d7bf9cc8c154492f23c01d +6aac7853914d5cd4a3e3b2435c59d8c6feb13bb18a010b01bc7ab19a80e659c0 +9f17bdcc509fc9fd5c01c56a3fbcdbfa6a8a39bb4f6e0d1fde1b8eb5d6edcbaa +03e65a521812a5ab61c5f0cbbe6d241ce0e0f05aa31f9c7776558542e140ffe0 +a713c7b4787e45e875ab46f69cdd3fc6bb2ca99c5f079a1dff058951cda04fd2 +5f285081072ffd798639db5df757417910af02a974ad193885712db36e5ee373 +ab840582bc47c69b57fda15a8f874df6273c33dbd8ce5cd5a65a446a503b5c8f +fe788ce0cfaed99e27d0c393677139e07f32b9b27d6ef7cc02a69c01bedc7607 +f80cb48fb1f897838f840924195286281e186bb0ff11854317032c7d264e48e6 +388ea407e9ea52847c0eac9b8caa09de2e1f04df3ca31a4a60177e6ce7254ae9 +26b65edbe30b1d6f2d1a250a482b1bffaba7523ef088a3ca327a7595235a8846 +7d18e5eb7757d9b7e6f9a3ea260b5cbfd824b5f813a37eb8ec9d9cf7c91e1266 +18891433ead4c3cbe9a6820a7c7f7371bbb9f0ac8af1b320e4a38e5778803281 +1164d81f3d471978d7a2a850d06cc69bc010bdbb4e975d4e8ee9be1d1b8981f5 +41f648066dd946b4be16c549d0007db7e221cf80b65810548171f3889b328c03 +304d114354bc114488d4c24b1c48665f00c2cf1ea5cd709572b5ddfeea4453d2 +4a6fda06b72e3194d6888a7db8c5c923d681b2b954a1b45065c70938056e89f8 +a9fd9d42922e1fc40afaf61a5fda2fc4fc8437b99551b1f9086dbc5310891c6a +d9295e9d8f2164eb4a79c2d5e39a40553c01b34007548fbfc68bff2c8610ae94 +de0114836fafbf164433fdaf39d5e8d18a56d809828480da5b5a15321c66ef73 +d2cbc0810523901d5c7429e50fadbd415d23fb81d1a51f9b837fea7cf33db1f1 +851e449bc550bc2cc0a2d064ee67dc7de3a4b41cec2b9555119af85fc412b0e5 +e3c20efc41a18b11f5a87e51b0714ad353c47fa77f11e87e81b1c7030a9600b9 +cd64bde0bff05a514ed956d1f7de59c38cb8c3d007e0eb323e0040153423ac2f +25b46b4eb23d5625519d6cf4d0a42262dfb98a8fa2554fa680b88baa4dacd035 +f619b5b1c2f1165be60e3cacba08156eb8cc31cbbb87d317609459191d38b21d +eaac8d4f2b6ce16e59b3581fc183abb50369c20f6300aca0b400896f0f6a67c0 +5a1a30d619af7715d9847af95b3c90e10a62e18cb518cb63753a139fb138b1f5 +d4db5d1fda32bf3ba11cdd5e1730a59682e5926c2e8a264c880b23e7a01f11ba +c3168a658327e5f56c764feef6b5f637d47c6428bce481917f371ec6121f9376 +47cd9ccd6885b5a296b954f1c40da578e3584a10a3b6a58d86f8c15229e38341 +faee17d7eb1ebdc5179d4bbcc14a5bfcab36fe63afc7a44e77d9de914cf47c58 +070fd7a35002c0e254f20b2a06a900c0a8e90d5af0d30f09d94c0a0d4818e338 +c5f1caf8a80d5b72ef4e9dea9a5516c7f9a992884a2e332a4a458cbb9ea8d501 +303c5e64df97551f5d3380c83c7606e65d56b59450eb3ee550cf1930dfe8a53b +c9ea2672e3dca10a918c8a68dcac7950a20d501d89ef60b2577529f9e42ece5c +e15702d5bf0133b88cf7d62f9edfa8d593b8df3c9b3f0defae746237411848f8 +f71e8722a2b90f43be264e5d546f6e78c6a4253a5bf89ba1451fb0c0a23dd589 +221e6a3f4f8246f80bfdc28f4b3b12b417f135a9dd86a482be194b33946eb066 +d64234ed6ace979d4de2cf98842121d25a1a4bf456d628d2f04d0e1b271889b5 +b8a155cdeaafc514ffdeb89e0b7c639a76ed360c9cbc628990f5889be78f3e2b +b915107f2d17553cc47dbbc40a81d49aeccb178e273f224318e8a0fe81253200 +28b78e77397dbc001c1c565a154375b5edbf4ca71b79f606a59a72b8176e5a74 +5b53e1d2f3856d1e1e69306b909ea46ddb902941ec786ba8238dd6b3e603a6b6 +ca8c707bc4fab9d3e0538446cbda498a7faeb35d91421bf330e87ee17f2640f7 +8aaeee8ea16e596cb02ece05a79ab5ad5e3bbafd9fe9704bbbd14dfc2d423000 +35a3d3ce39d6973b0b8536ba4e8dcf43167b08c555a746b167a50006fb3794a2 +0e159b9302e68257a60c3058dfcd42e902910d37558827244f09d102e389fb58 +90e8b1a3e4510e15cb15cde1354a0cf31fa57f505db5a15b70602f8b40138117 +c87619a5c7309d5d7589ac5b4361edbe4367aa5d5928aa0fa4f4dbea824687e8 +0372e091fb9015ee31c548705adc14f914ed7afc449934101b4f18c58bcc8104 +db06a6ee446802adc6f99ea6dd57d5b61f48c61767e00d1d511cb8c79f273c31 +f997d4472613275c6403fa5775e4f177552f71bfc587f4bdd8c5481fc5e530fb +cb3e8ec4c1ddf7fca02e305423b970cb0c7540c3814ee0553bb9ed45c8cc27f7 +e189deffeadc562559c61d1456055253e306cd6bead71e367eb49706dccbb001 +45502163d67f89e41c99d3d7d57fc343bab5cfc552c582a339766306b835d3f1 +c1f9d01ca1b9b03249c6dc18df9b3e91134f31ca34ef9185f6c60832904f7fb0 +d3cd243e539c4d5f4920d6332e3670872795081b4019e2abbb8e8283871999b6 +eb81652b1ec6321be256eb25a983e45e68c1b772fbd98b0058ed98082dd403a0 +a1314a6bfb12e9a24591c847b874197602c7a3c0163ca9502bc88debc0f5ee1b +b01c60a8e3abbce021eb7b3a4a9f9f19d23ec118dab982bd4ef2229ccca033a3 +ece9e4b210de56c6ae7b0db359127031101e4de1aa6275470603defa2d970cbd +cb0719dd3c44d1c524b2c30a14374a4c93418d39140b6338730bb43eda03fe8e +f16d102bb81360246e02367bb0fcd4af097ff13521dafe95b03772ed86a99d91 +b6b62216dbe0b78a0bd8b943a0d811adb9e9195aad1485208c2d5685913b5231 +2d6fbfa0d2ec2682898a5e9abec40719237d17f9ada33077cd33eb931e2b5334 +e4c82de4160901377e8312ae4e18a7b91f83c9528bffb5c3c49d1b5d440f90ce +bc816533304f88f614ef1f144fd153e21a327e7977b60d7c32b732e4e0324af1 +f75e6afba2c314d4141cd2fdb5a1c3185a7db7178f91d11291813be07ad37c0b +b7400147ac20fd56722ff319569e897f5696c18264aa5d1e8c4e18ae51780ddf +b4b9c5c01436db2c06c10e52fd92899afbeca1837b86ffebea7ce87fac980fa9 +78acb93bc4f77310db0a6c8221fb8f6fc82333b0905df69ce33fb41639ec1850 +1c1c35b68ed041e7856f1763e2a10697a6a5f2c87d7d33aacf151ee197828b16 +9fc8b9e84b6ebd1f3dcf11570db6b7cc2d1f76347d2adaf3bef6592b471203c6 +55dc4a4fc19325ec7b57b14c06c972a5aa4d85633fb32afc5ceb9d4bfdfb8f72 +c0930c55db62c6734f2082b018258b9ecb8741344c0d3038012986164dda9ad3 +50f69e62abecd129d73ecd2064bab9279434b37e5e6d1659f00a4a742a1950dd +09d41c240e5ffe0163fbe3efceffa150e1d4f66d7be02e23dc95270145b2eaca +e1b0a472437da1a3f861310f86dddcbac7af9a34df20b0289466a49fb665d57c +daedfdf4554de234aa8174a370b6d2784b3423b6f6a2913ca28098c15e907c11 +b97baf4642ec278aff9f17f68813fa2921cdf13d89cd1471d8151c7dd75b8839 +20b0a6ba9deb10a03b3a743776714d468e3f11ff8dfd35a98a6c5e849a1dde0b +3aac197d72840b5b1fca3044b22c373f7f5bd2ce981716a5be9a05b49aac8675 +262722451427e747c0cc92d786aa74b4a83fe0c5f6776e0ef8245dd67c583af2 +db46070160b3943776dc9b40dd5eef6a3b883a8ceecfb6fb59c2741bd73de3fe +01b5c3c114db29924ef1c3361ae713f897a6ee9ceb1d204277748e7746228b2a +91e1d7bf9285b5b42e6cb6e277115498c514d8deded33f8c1de9f60f64dce47b +31ba11a63e7f8baa90374122f0f1306aaf6f75127bbe9b6bb92f8bfaa58a4822 +5fef896850f08a94ee9f59a1302e8f792d50fed07651610a1b3067d9844eeaf6 +f2ca028f61cd7b000e664afa8c83f7e33a6055a6755f6f47ca93ff20639d8f0e +a4a57443c9477aefb9c278dfa4f04c74072f31def188a7da71d7497c749ac1aa +38934d94f83bbf8654d732dba6dbfcaca2e91d57114160f150aa8476f3b17372 +fbdde0714fb916aef77cb37ebd2c8b5efb4a4864159d80ce9ff80d1578eee4f4 +07e94a8bce4c081a7005c82bf173172bf47c2c7c70f1c4d289a11ed423edbefe +c541a2d8a01129af5e5e089412f0dfc9c0dd3f4d5c5a0c911a06364ce2854c4b +a9ce5c5f01b8fba24963a074c8ffedc18e7770243baef724b4eebf82805f032c +1487ccf451085198fbfa337ea0bbe2ba042f55f413af08e4216358d2a4de5910 +ce05b8512506259c0c031baa0087cdf2737bdb90ab7c9a134c89910bf4ed05d3 +6cfb68d36467034e75337cd5d84e9a18412f3712c0de5fb36ee0cfeb83360a3c +3657f81cdc3d62548d030990d40075a2df490df3649abe14504726356150acf0 +1eb3d9d1ff8b811e2e9e9bc757c95aedad4da44b8b422cbfd0a0dd75cd270c78 +8a6a85d8767a1383b6a1dc328054bfa0de744e171d5b3c19ce03c434b1ab280a +04635bd29c8844bfd6a01da06bae673e03e3f4324d29061a807616c8770b932a +894a905efe8deccc8a7d7e126ff0e86bc392968f8acaf52322a07c7b31e9b2f6 +532956a8643ecfa478e2530c93b7060030ff489392ada0c503a446e14c70d904 +80c4a81621aea7501191202aad1a7dc7cad048ecc6b7cd11baf9d2eb33390392 +9f516d36b44c6f6ab1d3a4eb2a8b9a555ada99d349febdc11ab4b6c06c1ca661 +f1b18bf86489198307e874572ca550c121af5085bc666eb0a79afa818a05dcb1 +ee42a97957da579b52b178461a94e1bf6b07cb6e237702b81a8e61e486ee8eb3 +c66240e76d9f4ad7519b890b04d3afb376ecf751b51bcb3c57180facd5859ad9 +afad6d4f417f24f58b50e5b3e7833c5dc77149eba469946f20b47540f9a41cd6 +ff2b329c5a36ad21d995b0687e5fad852999c29547a16ad439ce0857448aebbc +28aa525dfcaef48e490d2288cd79c59fcc4c9f8911c981a04b2b2e70214d87b5 +fdf661891aaf5dd7de5f92c7825297407367467c93a2fcd9f5e0e3d1c5cb5af2 +c347163ae2dc40762b7e153b993f06ab451d8c0400706543ca133b40e51cf011 +8e3aeca7431f598dcb585704ec889bbebe4c89341efbab9bdb245ff59173f54b +b7d53dbe4ac4f80c7ade06505406491835ee87f8203aa7e4ba81ae22c89bad5b +360d6251849baad6b4423892754182d2e408de689f0f2d104650f12a54c1dd0c +c366f3cbfd3e3861b799bc804af26182cf9c61fd62df4ec30ab83c8303977349 +d28e7995565bdfb0f2fdc11ceabc7bf34057b1720dbf90f6e3943f11957c001e +6382b5a46d266b43c607616f3cf30860c702402425b7ac20907064dba5ca4884 +8e6a91ddd900eb9521849098b1ecdf649a4b3a11b15813d4d1ff8319c12f81c6 +350069ff4aac5db21646469e7ebba691ef7f3b27f169744a372216c648e74e56 +d322a75805323fa29099004bb61fb6b9f3703e9758facc7c4cb51bf38c3b6845 +289ff14d89605c368077c2db73867557a33dc0fddcdd14318633354fad19789d +d1612c9352e1d2f084a267ee29887ddb7c5fd07338a3411672972e0a18764aed +41841edcc107cc604c85bfd90f90ac71a08bc82247af360d6e334288e13b918f +e58a5c04c3cf34fb2d0823340ce9e92d612707dffbf2201df73dfb28173ab82f +29f46e66245d4ee43589eb251aab265a1b3a540f2551ad3a6073df6c8e7d336e +359b063996c9d09e5eb6f64ecb02111ba7b229f0ac721b46fa91c41f282f465a +c64e7caa32deb935e1cc04e187beef1900b703fe62da30df84a2871ac15a2ec9 +a8fb8a11da219a8563a7e592b0225e87a2dd33f56fec53b8d30487e06b844ff5 +72e6b6034c4c5496080797691bcd085c69b3828d6f9c64f3bcb04a25d1b95af4 +57bbdcb4f424ceaa3766bb9417f33b7b4146f2ba58e13c1fb8339fa930d50f4d +6a0a38e338b01aa27c91ac9d2e34a6c68c56798d81abf2575cbec52c461b4281 +2b2b767f1421340672abd11b63a8649db90d455ea4fe8af31a2596fbd7d076c9 +2667520348bd36b28f645271b443259196c5fb1484078520630650448e21a970 +d4d3acbeaddaf5eeae7cf8c92919022575baee01e6693989d81ed26c073c5529 +3a4b09e2af3e486859eaf4b1402315bcb5e06505d1ee6ed2b7dbbedb283acab8 +d61a475b38aa32a820921bf4e91cc23981643d3f8639de985cc485ef1b8f774a +b99501bd81cd4524e53ba6d917f9ce80713ff1368e57408a707547a79cf6f515 +f989869e405ce0e0af852daa071c01a852ff35ecc49647eff23ab395f7e3f539 +ff3de18d5cc2178c0d7855762c4cb72cf6ea77ecebcad26958b0c8ea22d91953 +8bc9cdae4fad67dbb80d6f220f2208e020713fa07fa402665afad0d95045fcb0 +5e1785a6c9cca087f32cb3f0b543133b6f6cef08abd8c194a42fed4460d51d5a +db262bc6f186715c5e15226d34ee1a34d67ac9a75a84baea8afedb13021101c5 +79a9565321f9d27f9dce9d89d38b7591318a2b29bc2baab67809877f6f2f648b +0cbeb450840c3c3f82b470fba4c3e9f4f036b57571d2dc32979b7d448478d25d +62fa543fb39f274edf53d80e18894527a150f5cecaf40a5325cd3fb97c8ddd13 +f8257fbd938e17ef5d4e84fcaf8b8d77208e70f1429c5e347964d55f2905695a +5e94b0bdd5cd249609356b9373e0eab02414b3453aac2396f3ad877c70f080af +7a505a692f67f62404ab763705b49d30f038677754510ef8b85255dc2848ff79 +71c11667ec71895fba2c1198be6bdec57d1af1d419d41cf9fda9301af2e337bc +dff19a824024c04aa6c643db903a1f93f6365e23056a88d88d4488f819727233 +9be16604572fa56f55392d28e94aa1a2bc9c7bb6ff0a65ba107f358a7d383d9c +67e047434c84145f6fe5cb34a7ae26d774d4faedbcb93f0526616eb929b3dab7 +97b489d2d6d01fa66da61df17fdceedd53ba16f07590af1a11dab5244a7e4a11 +4a5797b078fd79b9596df5c37e11c73689bec9710ea9847d58b2dbd7d738e7c6 +fc61437ccd4780cb3238e6c9ef0501242f7ef89ddc695ad6001b47a05c0339b8 +9af3e009a90b363d8f0333d76d48f72c422f32d1b996de83e844f4f3e6e5f6ce +2e873075c9d30fc06f75bab0b81a826ae224ca9ba26126f3ad2d430f66abdfcd +4fe1d43529292667558c0ac825bbb30ebdaab1bebed8b48bc1a555e7f9e76217 +03e147e65ab6e15763fae829720b1a771d737173d67134b74d26de99e586b977 +fb4ecfc8ec71d230898e3f96c5001325906ffc40c7bbb3e3b24238cd7750d223 +1688a8ca46a6b4542ded971efbd9ee0760d80b27d71a72150b298d3e2f976295 +314a210a55e5c8528cb57ab33c17d7aa850a53b313cdf0608de2618f77a6c586 +53606bea02326b018f59c162d9143383703d73beca079c6cf0c1e0b489d60ba9 +b5a29fed22c88f5eca57f033bb1fe46c9a9b3ba3477e3444d5765ac6ad805260 +a740d2214f69fbe1696e8683777a22d2d4fbfc2e563f7566aa6e44b3aa5cbbdc +19d9784f2d908f44fc7526dc6f2c977df445449d99a52483f7bf6dc05163a270 +8ca8b7fc924cb6b274673b12748abd23d7cd84577f383e93a51f14ca7e668b98 +9ac0802201c405b860e686dfa661f81b0e1b1760118bc8555d0dae5aa24eed2c +db7388d9be4185e041240c13ac9cf13d4f807c1de678e131e567b7971c33c6db +22606754d22de8218345a8df1d714375dad284ebca340f93e2a79fa8e3a0d505 +81de3f0c42f8e48bd0ebb208ba9e38230c220adde628f4e07504312780a79906 +3301664ec06d6e9cff3cbab6d0e2a1069542042421254bdb0b25fdf28a079138 +773e9e289b77cf0d9f903ad776a3f15e6053e4bdeab8f3d0dc614c2fe9574369 +a9d591a730877ad1b81be14e55dec2fbc4a41ab11b4ac3b3ba2d3ad34581bb36 +db22b8355ccf1a0e4524fa22cfcdb93d64daed8c1d9d7c189a2d6419c88a8e8a +d8259dbf44e00d3eabaf6cd9e2b6262002c4f7ba28626fadd6a3e00d0403a54f +e0f7f493c250eb31949051ada182d688a7b68dc8159175b2605ab71436540bb2 +de3c7b87fba0eb0f7a114929fe95c7d62d93791192fef2c26f49e6521339dbf5 +2b0d95563dcf7044597e1174d666975afa07c8550661f6f6c5973b1ef134e284 +96a41b15f27461c594291e2e1c644f3cb0665bdeff027582127ffee44785b819 +2271b4e369c3101c42690d5e64b9e8839b262c548bc4a22e0c627c68ba7881ee +715f3477798a61a93a7f2f696ef74e31982c5463c0d67adeed2481a36d49207f +0a96b3df51f9c7cbcd2f5861454c6a65e243fdd857f91db826d0b7cf464d7438 +2670c6c3cb308263d141a76f14d80883fb9ffed8d2d8e8a438b396e713623b23 +ea01a46ae0c11a48298d310c444dbd130f41d2e26a8740481bc87e4e9e509282 +4d331bf414817f0e504d01473eef73ad464445ec748aaa8ce5eb64b3792f2d89 +fa00056a956e17c0baa4d20e62e796c748b0fb35b2e4cd137dccd4b02ca57341 +4cfc347adc4d6f8ad39e8cc1d59dea6bccd3a12b54b94d70c94de290bc310930 +3e6d3573c2c3bf01389c9a7d187af64bc2847cf2c82ce9588249891e651f15ae +330f72a8aef6b801d030ab5ce6a90dafd1d894b4cfe79694e6d294bac3ea12e5 +7dcc9fed7c478da8ae3a5e2f35c2fb3670f04954abbb288970b29ea454375c81 +a8eee1e742e51da5ed703e54360fe40ed0254af97748b86ffaf5e6ca4a43db1f +05c5987edfa3632f59ace83312a121f01f02aa57f2ae8f7a1fd5b72e00d2bae4 +4dc50aa27fd34f6a37e8dc036145eb8602373c00deb74b10b2a47b6c078a886e +13f6668b76265d67918178ffc3b50e6adc3253b0d9bdefeeee2d02275d6febb0 +9282624e91c78e1d035464d2668ac1f409879174776322f5be55cd0f452fd922 +48b471007a20ad09f10b2bf8d534701c214d0cd2b7fc1e62a8ffcb91ec07dce3 +cd89a1c2e611d775e83c93aabf255891fe76172dffb2af46630af9c03269779e +4c5a824ed8d0b706b13999d08ab25b8d686e126afcd46aa48e12d3bd4d1f5f88 +2976f2866e447b992200879bc4afcd8c03a95dfee45be88af0774c14db90980a +ca10717e784d91f8f6c85fce1fd19c1aed11c60332fa43bb1ff64da30742b4d7 +1210bd71eb163d89a91d586b2835e8f335542588c2b2d30ca852f95f969b066f +51c123b7e90de962d921d007e37eaff2a6d25a9041228de658d6046475190291 +6ed6d32fa07990193e7e72f10d3b334dd61040ec1f0f608a848c2e8ecc20314f +f0f4476dd6b63d2e4302900c8eed8d4a8e816e44f5489c9478d9b1a50a956459 +69dfa959be277a9c64264fe14aaf13a221126c48974b1b1e0f7f88dcb41ed292 +2b8931e700629a3cc09dfcefd16ad645c2abd0a183ff0a8c98c9ec5d457d0b69 +a0b5ceca47623df27275279b41e2ceb81ac9d9d94ef4d4fbd76f9fad8b1c4c5a +e92eacd6a378887a12b8683d6fddb479e67876b38025df95c2f19d11a9d18afe +03ded9039d577bd4b2556aff0c85b9e826975f8bd559a977a213b05baba374d8 +4a2e60df300d73ec3238c17efc0cd1247eabf627dabcaa3c013e4a5287c05a3f +2e469af9797ead51a0c49efd48ec7b70d282cefe7aaa713c3a7f607eef6f97e9 +e51947f78526c8e96ac76e9e6ba0ef98e2a5f4156aa69cd0ee8db1fc22e125f0 +546df10630c63e5831767cb736e92af17a65979626a7eb76a4ac47284b067a9a +75304be1d3441d0dbed2fc87da5b32667b6e191936c445790030358f081122a8 +7c214d90991162441334c21411e82d090c4c0756da00d7fff1d81d05965e26a9 +9bb50d0f5a4746cb1f819ab2c5d1146580034c72a3b1a3d78fcd315ee88794e0 +b1c0e133f65bbf0435dbce6dcb7c8e5acf26257c8080d289f5472790475ec2c6 +0b56705f723b64c48a704e5b8467b320b9784bfd6bd7395b1305d0dfd9104c40 +a567a61c5b2bc986ac202ac0c79c3cee4ad15f2a71213bdc1178d728319e871a +78e5223ad095b3782c211efdd0c39c6d8c40083dd410ade20e6cc945e737c8ed +d5d3ab06d9de6896fa4fe46c8c7775b941d6a4b521d22204e249e7a364765ebf +15e7ffdf23ff843c95b7e5b31b529f18f102783359a5b501cde3cfd865e33f24 +065cecf2f920da94c1113203cee798edef434d08f5b24e3d006fd30be01a7c73 +9daefc022bd993301675f024382c725bd1d61b6a77c2f80c36e4a75e50a454a8 +f92bf684ee8bbd01c5f761eb72c7c7cbf1f68417249a7db14294c25c7c1177ad +5fcd98d2906f0d7b7c91f2c25f0f316612dcbe1e03575ddd172f543402998d64 +bb977670b7d354c5d63843a31b4816d59610adc4dc27eb87f1200b8525e3fb8d +ea314a3bc2b2784740917ea2b4d7d7039bb4f74eb82121dda2a5c61b3e527f96 +31e4e1f7019d762ce4110b55472c20f5ee41b5cb14907395b0f71d301c792190 +991c2275364943a8f268541080568ecacaf086f11460ef46f2eb356e3ee4f6eb +8008003f555c8e43f14caf3de78378cff995f5a503b2c632b1284fc3d5acfef6 +b56523cd5a762598b2185277b914ed5ae45061f269401a204603a2d758dde355 +0e5f8adec0f814123b053a0266adcd87e004e6560371688b821a3e32f6e74257 +673978b8b941eb7703ed8c425e9d7c3c37ad3b76c983e3d7d35c72421568f420 +42e4c8dd657cf32a8467ef7fed72022f2b39b0ad0bc574c262f389fc778191db +587327a710016e295085a2c28c0dd7c05eb223e707f5d68b5c73d3a17afdc138 +39d191b5da94c765e7fbead349cec8cf24b8525f387e74346ee00691c64a469e +9ab10dc4ce31047b599b1b7c370a3dee4b63b430d9f287808c43d20d6cd6809e +3ab6833250425f61783a76e6fd970bec3efda02721fb5e56f08f0b3bf5bd9d06 +6eb1845fb5f03acce0958ff8d46e11e545502f75a3c67ced41d74f2aa0d2faf5 +83c12c117ecc0b3b347659749c5f1981951038a2b2987a07a2f0346d59e398ac +f7377d25257b06a5edca57e7bc4cdc36037f5ec19b2af0aac9ffaa5528bba285 +515bc7a6037664031ef4efb59f872149d4b0c3576430edbda67f58188a050220 +f02ce6236400903c112f0b0298fd47765502479b2300e4c86ff9c370ce2d40b8 +e3aba1848b8f0a69d2c6c526a4eb7b6ab0cdda2f5307413ee620f75dbe6ec442 +caca3c0d64a2d4da170554acf238ff9a7323ef8e034207342f76f49cae6b5818 +24776973045c1453848cf7ff6eeecadc4875fff0076c973497a463b82080ebec +d714eaa7ffb5edaecebc609bc2f9abd90a4f0fe7407c2fe0f4d1db1efc11d93a +5bada84d851bbef9011e7b650de011fe8dcf235e8e236aa9732f0071136d72a8 +e3a602c897fdb990144acd1378a245b3835a705a51ea6909a8cd6af86ae3e54f +eff8a5f2b9ba2f507fc50d909cb3d45c8f72f9c242e47df12e984d63cf7eae3d +7ee318a2bb2258fb3d811002f0c34b14fb3ee30b52dd212d8b9c949c965f23bc +9e8a1d55d10906262c1f931392ad50f7c27b5eeb88babedb6e81367f5f09f5d6 +72a506843a10c929d47d34156d533039a8be3db70c143fcb931c7f5890bd9d14 +b7ef03994024a3bdc4bd44977f755b6d3e343d84d266b7c5a8424ebf483bffed +b8da2f859b1c13a5fcf39fb695cbe63f4bd17d1f90430765b01a2a0717af6459 +07431922d25f690e16ef1c1743ae6616d2975f6b862f97cc40c1406af17d296b +eba57373b8c49032da69607fa6b14a2945d3e0b63a946e5a4bf0b25768cd99bc +065e42f253e637555c4559e13442f5fed1384b9ebfab40a5c3be4247ea6c3d48 +22eaafb9f74311594b4079d7d548896a10835c4e3d7c421ec27c39ab5ec2d243 +2d6f69efafd1218fe62e7036c74315292afda0b9b6e447ab8c31c8bef38d12aa +2766faf8c92937e5d9e8b47df27dda96f68531acae48b9e0a37136fb4fdd4c97 +af792e5641efc03f6ffce2725229a7d0c468e1346613b1622b25dfedc3740891 +ef213a5c36722a740b75248a1632064f41be911079b88bc671a690079f48ba01 +8ed5b44767f7c62136e6965787c32f0062f68ffc2e8f7aec73135b8f019199ae +4cb708e92f728c685b2d844fd98799b45ce6348de45c0fcbc7c72f262ed75bd8 +7cc11b16e93e8a4be86aedd838d293974e857c8d39f27d416f44d37b9c5ce79f +ca761d57bf096d76a02db689572167172895eaffbf1cfbb452f71deb9be693fb +6d4c532a677b86c24669e1e2d7a9172e65ce155bd904d8c26a5d45edfcf0aa1d +b78cdbf079ad9a0fd994d2731467d804a372aff5dd062307b17a4b7a41a035c9 +d7d9439f166bc4b3d45fb214e7700afd7d714d2507c3a9240542c548115d7e77 +ba978519850f44a9f3e32c84d79738c704dce6415b6700b327f696acc3c2b8c1 +748aed786f7da1d9eb93289c0820559e04bf376a06b0ddb82e92036d69928408 +7d3d459e1629d7ae2b5fcb1ad554e06ea76d4992dab1c896e0da7faae47df529 +4da8caf3d7e68582d40b72b125bcda66db017eb0e7b5796c6d6cf00fb6270225 +9e06b8c3f174c2e3fc0c1393d1f57f629a48aa072532ce915cfa08d03396eb34 +109878188cac93147278c72f3450bcb6f2adc6fedb7a9cc11d3da8214f2afa14 +343f7139cefb9501cb05a0358644f16b66c05f8423232d334a61cddc5d739332 +0137c554d2a6e00345569a61d47578666248a918cdcde1840f45324f03fa9563 +6839e6a9b62c339fdcf43e40a7f057c723df17f0c15a1d4b4e7d40468c10ee82 +331605987a145e5a0b161b6b6f2a73837db193754f29364c8d6d3a1e4f1b654d +a41089b0df52112b4d06a4d6dcf70943b8d2303eda3dc8a29071d5e8919ae9da +b7098e963a08c25412d065b9276fe542c13c82d0eb6b72e5ecf08ee0f38ce7b3 +4879fe21e35e533849f4171cfc9c0b5cf96e72e73067882bfa0739a56a548756 +c59be8d6d9589726dfa37d6a5799dcbe6e5cff5024a446fc62f10d416e185620 +a00eda0d24aaf2b08f2daa044dca8b77f60a57938ab7641fb1b9e1b65f7e9d1c +b957899b37c8f27b16ce15f389217220b534286cd9c8629c4a69d242b303fb7f +2ca64a9c8cbf8cb44abe7c89cce4b68192b77be74403317bab2f3d2f641d1967 +6ab84bc9e090147aaf533eff30a37ad15078b98b396aa1b194907a15d99f724a +5d66949c65b84c132f4a78e0102e0d5bdf0daf015bb2eabcab998c9969423846 +ab9acb2b3186d1ca328b82f91e603d7dd77bb81f3a9be62aa1778044f890afa0 +ded3a08116c00604eb1f7fc82a0ebf7c95dd13795f95db04ef42641b524958ec +6e90788e053ef00f079658461506d38e983fe75b74afaad6ccdbee43919c4c8c +7bd3f86281364d22028bfd18ce88e3d951a3b1c7ff5d81aff0614999800d69ed +06c3df4be77b09ef25c1d66a3f350184006af354ef07816718007e4d6e574138 +4e33ac7c3f0cc69ff211e7ad9e472501e4b3d580d8185866b90c84bd6f578bce +5a45d1db0c39448dc459cdf31542fa1dd8520da2b184752d6b3282b7150cbdbe +6fd66ccf59ce42109d6793b389e5f5964415754e6607b4b8714cacb17463c101 +59f27924b5a5e00ef449d37fbd119e266e767751a230119bab27ecfe6b41e0bc +9152d5f04a8840ebc3c2984d41a156528aa42c0ae08bb44b277c7e8848cf01f8 +daa894c345085a724d44bdb02eb234d8538e49793012963db5e538a130205ac3 +741ee88eaf6899c460a00a46b75606238caa001bf80f39ef8327d058a826c7c2 +c99edcec1246bd999acb0bb538d3d22bc0deecf439f0e1dc74fbee93f2fa2d22 +982efda39b5fbbb98fc247370adcc2b60f7a7e3f1e2d0ccff2342e5a30549c99 +957739500c33ede9b9147a7caa89d2c38d3fa9af0ca24985a7ce98a14e44e214 +b7622815700b08dcf6670eb49d55f58dc8493b0cce6f6aa3835cdeeb90a2449a +159c571050c71b28a006eb7b260ddea1b0c14fef241f482375843273833060de +ea6d6d215f5ff50bea6d4f186cc091f3f444c3edb462ce477a610f4975872391 +dc047d1b7cf054e5b7ae75121cd33be7a986d745c57be3a30d86073e3af91419 +443ffd81c0187afe2ac435f38f63ce6cbb9c040fcadb51cf85ad209b2f7cf049 +0839e80327bfbeff0dd8429e489e66aa8335cc1832f3ea1fbc925848163da145 +ebfdfbda9a35dfc3b8183cd5cbf2dc46dd4cdbf2899e5c95871935fdce5ba61f +0d0ef8f83ef4cd041940a945f92e4a66cc026edc4d4389313685e040fdbe1990 +0ed56c442c5fb9b73222dc19f332548068ab6cc584b2117833c26d77cc0a5c70 +06612b5cf42944821b7bdd8e07719410562e2af1a88a9abf13b9bb3c315a4a20 +df1315c0c9fe9938988b54e3fc37f2583b669e020138ffd44d5af4126c395e42 +1425e271a7f502ef95ba039deab474c734a9f024412087e3f56e6cba3fb3a67d +26586670223b17ee23de92dea6b6a1c807d6357071683054d95fd192099fa694 +6d3559156e70f5a763dd9d2bbe00a604f6a0ea956dc9a3fd3d664f185cbc54be +ba04baeceacce7521ac21c1d6ad2cefae02660d53493389620b0e296447378d2 +a6904df66f2778bff30e4b8068a26cb447141cd7fa74f2ef667b05c429e3ba35 +3e36276ded0089e4d00c8b555577458f3200af28bc334a50c9a4c88834d7a255 +b8fa41cd6b59470735ee72b7e801956e94e197432f012a8aa1a0833d554bd215 +ef2ed46a7e76b206767007dac1aa1c380e00b86bb7fc887a835c8fd56604b1ac +cd47e141c8316aa58eb7f80292258df02ad3c65758f125cc2601c4c757e7158a +ef0b85212840b695bd8185d638cf2bbc807fa3cb00259ebc7c0436080c97032a +c10e9ad516666ec7367750ed90ac0ef810616ead22a4d16f64ff606e11fb5726 +76383bf8bfa25f5dc30d857db690245e8144b969228b5750b87dc62ee0a0773f +24ad15d80cbdc44e739dac12fa00b63f4b7d0eff26f322b08061dc588ce026b5 +a72bc9dd063ed2b0c6408936fcfb90e7f9cde743f96858b540c0a912c2efde01 +6efaa28cfca2a3dc5e429f46c398e475a75907bf6dcead586c2cacb6aac6ec79 +54c1069d1aea8803f8f3d64e5b50ee821c0f3830e78b7b934e2f7873fe2e8fd7 +2bc52a723f53a1a2ac5799c161d383667a50040525138b92d4100909041f7f92 +779b69e66eaeec0e5a4723f4b3d38bd801659e989818e7112d3e4ebd6254c9b8 +2709a0a461ca682d0faf4610ded59737f3fb02c4bf01b2ca262862ffbdb39bef +e27a8c65e5a1eb8b012bd612e72f189f1d05f1bb66b88682992c46d0f8001965 +23f5b2edaf1d0a567970ce339efbcff5db5cd4ec83f3a9ab555d650ab9b9b234 +fa2813c1afe32867a13c99f144f7542ae51c77b0576896cd0cd76266b6003017 +42f38e7d5604747db541004ca2599a3e5562e1e6abf18354065f02e55ef5721c +66f5d1b07a6c48bac2ed98d0e6f27ab962c10a87e6c407394db1891e6196abc5 +5ec07230e7aae9b59fd78439fe1f3761558fe17a306f842f274f3245b9739636 +1030597d935700af1596610fe57d0931886101792368caef80582cca031b6d6f +bf80ea630c694edebed8775e34b8b9fb9ecb40fcd92e049e8549803cf44b0159 +5d7603961c0c9b480e40b43fd1146e83c35c2f2cbbfb729b44d90f5ece712084 +2fbfcd723b98cfaf70702c5a203a56158a189cde34788189e1310a8c08020059 +e12b1323caa0820bd6c249dfd1b9e6e984cf49e6fb2748e207e1b60b4536f9da +288ce7ffb7eb945bc1b998883674b2f2755ec595befe40d607bc89cd224ce669 +544865bd6f569dc6d0237d61c946cd96d0feaa83486777b82bd90539bde6188c +416673ff0858adc73ab92dee296f30a1ea38ca1d1e99373036f7804860a2349d +281a1fa5a5fd50fd3b67a0ba901f10381fb21727d0dd430f26918c022897536a +3cd9021db007c5002b06259f6956ba8c647fa700e243602694f511c56c164e08 +1c145de5360a3b2c8a479fedbd70e86b64a22ae0041471c0e04eaca3b6bbb970 +d5c4215b45866a6f9f22614d6f9f9e51bddfad16a2cd3272dc4827c14e609662 +48218ac447840237ca81a065dc469247372a6479dad14cdfdb9982eefb3791ba +0882c9f77be7fb7acdcff7eb05add3f8496711d762a3e4d318c980635762df0f +49d81d444d30eccd9a4cb7868a8a129f32feb304def7d787833f47b77ef5509e +dac517516a367598bf6e5fc0e6e0d24bad496bad2aca0799d24fdad822178a4f +93075f8302eacbc8b1b097c5268da0b079912cf8adf8f501e9d7f4ac4d7c312e +ac7f6ea7a617db10d68ae06b2c23aa05d46f062bd1f32284fb679e8c4593799e +0f639d8eb2315b1b8b9ecf8f707944a78504bb510040866250c0f22ac9e0205b +591c86f988bdd421caf2c0435ea13dad0236939eddc6d18d2e681b8a45ad4fee +a95103d55a074043506548d48075f04c21565624c99dc8a731f4b2b240de5069 +1f287f41acd1ed2aebb1f0c1f0519dab3b818380c17e320fb934351a61ba7bdf +0f0c9a53231862462946ae7e2131e97464931df4fb1bdf8d49e22ca6f161d1f3 +db678067bf81fca275f2a01e470038c7edee1c31543a59aedd146f21c6119b4a +01ba20a026418bbfd490fdffefd7d1d53e617ca86a0d731b01d4bf2435292b64 +674cf946ac88ea7b1344919da132dcb2e3d91ed8bb4988eab32f407a4d14dad6 +e0964217259e2135ed844e93be0b4ebb66ebf3947ee652572707224052f30144 +6379d9adf661c6de4f34e5157d8d9660c91fe31b6b83714761db563b68f1d4c3 +26497d910f28160aad4e5df0686042347ddb52e6115551ec5036aae849013f51 +e4fc34766639880ddf501d95e2d2bf75843eb31567f9c89a58ed6971f039d782 +960778d951d4c8b063fa2fdbc3b7aac88dfad65d7deca73b0aee8eaacadb7035 +4a68ae45c6713714c8e28ada8f15effc91855443a94628d3310418f29fa1234b +0b225a6067f67f1b248979e4149de4aba6e6749d44a3192be18a36d430da78aa +f4b60243f7510e6a7000d82e1dce7aa535c1fb7b589c8b7a8fe36282cba88750 +0b3f59c9579c8be9365471f0b0870544de4431ffff59cbd9e196ac0f496f6788 +608e868a6245ce12edad7e4aa310a217722c415bea7bf0786d5cddbfa7c8facc +de47618957d683230fecf01ff816dfd2a0a8f669f6cc9d2373d8529421613484 +11e897895100fea2f6529a5d7321aa3d507b02ff5211cf33ce923ae96539889c +93464d4c08d4ea9c7a815ff8a783c05bca3149ab74b30c4a5841a548069db837 +f688068d6beaa86a7766179c98c8afe6a122ae08a28889d4bc2ac271f116feb4 +1f9e28652922734875ed2ea337faa7a3392aaecded3e77e63c1fc3484e6217cb +f768e76e8c736c8fa77052f2667372eae9a7235415e4c6b51b64d9ad1b581c9d +c9772272ef4bf9dc0230f57fe49e528a9094a83744b20004aaeb8a97a20b56dc +73d1a9bb3650a3d269d790917a42433cddc8de89bab9d6b21ca1ce857e17377d +3340c9e6bf1c54dc9054368928fa93f6bcdfb36c460171323b8bf41eada20780 +99836abd96a05fba57b7368582cfacb3cfca6bd89727c4a2df1648551d3c96e0 +75d67efcad19cb52b732394a9e1dd2c682e00db530ac5a5cc730158ec663c6ef +a364fd11520941aeda329164f095e51f87d9fb333b1473be63519a333da7de0f +41aa79fd7cc747aaf7eaf4b2be3f2f7a01dbc9f2bf45f30cc1b77cdaa0479dc3 +c6440d56ab2b9b74ee4e459d767535b15854bf660d34e0a3c0a06a482e731a2e +80e528278185559d0ebfdad35065350fae3de7b9ec8281238cc0888fd780efca +cead6222189e8d018480c6d9f62d8f8de6b4f9091da703b39b8203dd16a851a2 +a8877b9e5a86f86371ab8b366ea236fab85b27a784de104484213a97ccec1fa4 +102dc75b2047da36bf7f264f9cd0554d3399721dc786066c36744ad2b71cef0e +680df82b56af032b5905760b7329964741d0482c19c92a7a8f193cb066618a75 +243a15efaf66f0a875cde26be844897871c6aeb26f1a945db5b0abf3f0d570a9 +cc67dffb4780eb52c9421b278eb4ab13dc33bcf38a6ab00d448d4cc4c04be75c +b4348ca82bbdd36fd1f83025fc8f1a864ee12da415f1481082cf8caa612b4f28 +d87cac6740ae038bb3ec7427ab3bc64d0e5e8b6e9119ec4cbfab772535aeafb5 +c7786f72e22b9e95f161cb536df2a496f5fb408fcc915ee187bb3bd789924736 +913303aafd425f2a04fccd408c883795db846bc4b151594cd67a0fe63a8fa087 +31ffb2bef5c38324f9421e3869edc01c58d576bb1f85a5b0e35c35438443d29d +684ff4774a27d6d471ccf0741a10d1c6bf9f2f46f9224dbb5ddde2a6917b2ceb +f6cbf266e15d07ae5c0563fa665fbb06aa663232cf0837df815ddae3c9be9771 +4a09d14bc2692ba434fe8c88c10a241067a894f7f06e9b9fa55d2413604d91bf +023121aa332a17410b1a6099d277e0f2cefb698fca8f0e3669eaf0f9c8db409d +07cfe149ee098628d1cc4788e2a22cbc55484100bff52b0477dda33e7add14df +8bfd5d36f68d31f85e4c6813668c737da569350b88544b2990203ed5d48e9ea6 +5a9cf249a812f8a305157254cb126f9db2db65fb7f5c0ebf03484f9995e83b4e +2252ee6082a7f9d974314ad3da73384826c98def9596babbeee8a80790215307 +bcc439eec0e586f3ec9dbf3b53884caaf1eeda2c88b295b61b686aa4ca48e445 +e91584672049a73151a6d06b77f7503d5f55301a9769e2095d501cd61cd6fd72 +47be7df4ce8a0957e5d170b94a0e719d7a355b4bd867ae9e8353cde0d348e5f2 +d63b08a1d3a2781ecf8de4a470a50c3a9d48b9c52d04eac25a48436d39b438e5 +e7988046c308419b7463764645d764df8cf4a73157f081281d766a6ee4f78da5 +eaca62e67a70615df906e3adfde5546db2353fe2b4b0a535057e0114482e2bbe +02e053da7b161c39509ff148de8cf9fd11e08c7d8a1e54dd94d754184599f61c +4bb16e360120b187aaa63b751a75ff35cb123a461f982bb4de1790623098c10b +dd0382c1b1b0a52dff23fff42e16b5feabe741fe252eab8458933762297e4c53 +530ce3542846091aceb6416fada3cb874ec8d5505e11d46e5633ec2613b41c6b +3c23344400dd552175cb7c3d65e7433829b6f482060915387e2799dc4ded6cbb +eb64f31d18a5c2286a3e07b464aa9897286c565cd44134a51154714f0f630cd9 +d4e7bab71bedd24c1c6bb26d72bc30fb0573a503b6a40396183beaac0a0240bb +4a4c9b2c40b22e69f704ffa5480a41549560cabe4de2d3535d55e81c396cf021 +96ba01b989c9e8872b32dc460ad302656a235e9f57066ac4ddd15d291a8a77bc +a103670c603e88922535f7b36d21793d9f2be1b2b3a4310de4148ded7f293848 +3ee7894e007b39d3bfc3dbb138dbb625b5069c70fcfc0f3204a0691ca6978359 +9492e04aff4333b1eea08c86935da3b339cb29b3c3718b2a561d8914de911dc0 +ecb604da05d18a741a11c3615cf95b3dda84843c22f03685cba3ca96ad3c5eca +9a2c7455b78b4c787d3e27dd3d674b8eee4796be01abf6b285405f4e4f127e3e +20e709dfa2305ab7eac79ce0a40627ac794153a4a5700786fba3d61de18475c0 +16f22c258aa736134d42047f94e8153711aa5a7671026ce99414581aab3ed21a +b305e74fcc1fbcb1bea7e93d189293f3f71c0cf78fdfa3cdbc1ed9dae2a2e4dc +019dd699e76e1742e0b31703d16b758167ba17be2e69eb40c1552af4310f89e6 +b75911c7e81be535510857ded2b3d1b8723d5a76257503d0a44385e576481433 +593dcf7397a8e8d7ea663510ea608449ab70a2edc57a27bac85c249fcbfddf8e +db5a26775b037b2fde07016d15af6e7dcc9b5d57263cf49dadc2ccd1d81d5a58 +afc2e06cdea20a0feb5094b4228fc4bec558d9c30265f105f9cf81242480a23d +e6f5785f1889e2d707072f8747a74b4f5b889a823e113ab6b148e8c1e979b90b +7ed5633f77504566371e1410f3cb34ec1c90b6cce0aec0b318a2b0a4aeed76df +27c1dd022fa87cac3b44496d32f4eb2921fd3ee4c81d34fa704f9c425478bceb +71c01147630d7d995ed50fe125ce3abd44ca041fb9616342f0d346add746f148 +20e8c77204c7731539c9e3f2c480faf8e8b9466a406dd2eaae7065bc1ae37d95 +2af58b6bbd2e3011124efa256638dddceafdff99ff6db928c208e8a4fa78c8e1 +2399becaf4bc8a1b250efceabe8b66d4f056f245b9bc2aeea5d077555a01c8d6 +e1d992a02df6390440c679e6f95fa6e63beeef7b0d3f0013072e8edd7028074f +013e2f0771c39637dac1bbf8949740c54775732a33eb11a2027a2a55b3a1bca6 +1b054fd25c4193dc08a7541ec73d6ba10b7607a5cc43e1e59030a09e30647be2 +3cb6ed59535f16dd90be00e3ffc9d6f5bee869daa73ece32458d23453f791c4f +9fbd9b8c56240c49e824afd7c034c6a2604f73170deebb0fcf5313555380b265 +5b29f243dec9553786259020f0a6bd5cb38070a904fed4d69a61a9b2cc3588b7 +7618d89244f01d40c11f90faa3595b46ef454913352858ce591dd96e5c41468a +242bad4a7437d53b1fbf28be2dd51a7fc1b771eaed9295a100faaa4b17ed60eb +347ee26e3a1dde1e649dad696dc42c3d7b44a39ba4dbabdea63fac72c49cbae5 +86f74c53268e8e9da276d242164ecc9db3a62fb5f291c439a7e1fbef339bd880 +98d27fc81522917ffb189b357ad1f30e08956c9523893f7230b5ba1c1ae3d8d2 +08210f0580cc31572a6e2f0bb87bec50ff36d3e2555acda87a108a5b9add5095 +f0b5b16b627d5bd55de3d28393c4885b9398acaf4ac008bf9a3228da5a838d3a +13b94798184b3a6f8db2b8886e8b8055a0839d155404af1fbb46b2bc75171e84 +8fd3569ba613ec01c99a22a5b6d00519ed7e67839aa462dcefac23be2a858eaf +1726ab01231b64d39bc4a6e985ec00e4818f0bda3a078de3a4b9079ca3b73d3b +bf023fd7f6094a248fed7a10bac4af945d70ed60dbd6522965836a1d82c662ce +e5f8034fcb824199582a79e54d5bbad488050288f34aa1d387230338df4f9467 +c34e498372543875e5aec2512ac1a2b0941467fd58f8583ff5915af471d447a1 +bacbeb778a863e285116531b018d2fd14c86820b408f3d73325c992300fe6414 +1fec6da4e178fa6a04849d256c14fdec4a29f3b100f7b8a19e7b9abf1fb763c0 +4d9492c03e223c2c3ae52fe73fa03a0f6c2487dfc97af92a58377486bc512a96 +51914904d3038a4a2abbc79c4885101b6ed7377c7af7f466a5d337065f71a6f9 +22c21d4ea223cce7f0b59528f4f56e56e799797a0bc00ae1d02c091c27f7e3b6 +1fb869e762cc8e87fa50c398529dad4e6b6944b6164d01608bfa97401e0d04f4 +f94a70e7c66d5a3d7ca061008588254bc40a48d95e740c341651199b866fb247 +e9487819b0017ebe7175910d89527a64fea38566202b98497a928799c4adf1b5 +ad76e601f3ecd1b7486b20c201474d4acc7e43cd05eadff17f24dad29d9f2957 +c1d7ee6ea44606de611dd691bd82434fbae427d21e7525b4f24d73c8ddefd73d +f00cb1a0011abbc84d4af727d7ad6b263b526649abf598e335a94e912b5bb248 +0e6764635f2176f68e5a8f9c20334cb6949655075da5f29a2b98248aa0f069f0 +ee881289472dcc496fa1df6524e3fe5c45471f1f4a4a0cb3c811948867b36e47 +f6757d1361e1e1061898449ce4d7300f9962fbf07f1126be882acbd6bf05dcbc +86136bad3d07a59a35dbfd77bfb3381c8bc33222c9ae643bedf1dc6197567404 +e90b0214aaeaf0b7627277edc89b5e0da0e7985b87f70acb5b59ec67d24e3617 +8dcb579df16c85c492b08dd94f73912474cff9ee36fdf22e7ecca43b0fecdb67 +6e8e12a0dd082463a5bfc08b099b0882f28858947ebcfa4c32a7add602978867 +7b094d7889340f038ceee3187501c2085fee3472d2552a9416fcda0cb1180844 +4d360d95eb0a04d75736bbceba09d021c59936f85d0e63b61e69647c9b713b6a +30d6ab97ff24e27d96cb43bb3e106179be85ef592c36b4c9217109e1810732de +bd6a58bd1df93f6fb1e7f8781026f6e3b59f210dfe53357fc7b8de761bfe62dd +1dd4f3aaab63357c96a81f51d97aaa60ebd01feb9ef8487bf8adf1f31ed55900 +51b0fe8a13b8e876e633f9e12a6cad6da03d27e10b84f8f0627c5c98435f890d +55c585af9e44e6ba99020742844794445d34d7b1d778b0cf1723487867fcd245 +0d38182523531f6a6278943006d3685d0d3b625f49bf4413ce66ce3626d7ce36 +70449e3e26973141646f459352f82904a60d5d717960089eccf295280ad7d3e3 +37bdcec5afa9282a162b6bed1d27b029de2ff39533978adfb2393bb86f807497 +a06233a007481a3f899307c901ce0131cc3fd5ab9fa262470bbc930472a460a0 +3d5b91702e64674d74f0c59839091e2aa7ab20648936521c1b5dcedc69e4af23 +1382e23faebeb6906a6ad6c53b276738dca235cb2439d2c7ff2e8926f4c88235 +36a4e3123ddff3e8a2d0f9ccea387edc7105fd79bc888a3aa4b4dcd7a17eb0a5 +639eb2b2abd8c3f4c8e6be3050398b58233eb86a1eb6bc11b66cac8330662676 +f565155879b72bcd6dbb5c8ef4691eff123936b022bcc9c36f308d9155f36d2d +2020126d5217269871746f08fb6a66590c51e07f8af5b95f2f5ca7de7319247d +de0712b8d6133e02e32914db9f6769b4728cd8376f407aabb498225d9f970829 +098273a97800f13823f115cc0b82aa89c02ef80d256822a8371b5da3079f5706 +d10b303a2ea333aeef17647a6dd53527d3aac60abf2a111d96e6964ad3dbb6ee +1f1f5d41010bbebaa1b3cf0bd7fadb63961651022400c8d73db11d5c45ae851a +db59273e70091f498ec3b5ede06449ba2e6a1a27a989d026be0520e7bd8332fb +b7ce6fb2f337de7e804671a0de95957847f07b1336dd3629a74ce92bc3899a07 +f88bb9c6ee33b64b1ba0eb71c3c2fc437339f8fc387ee32386cc63b4fd182fd7 +fde16ca3d548ea36ef289d3824ffa0be8be2d1b0efaec38fea22d5e988a961dc +8d584be2d882ecc90d719e1c711b72262787faf911535b0d7572689b981bfa7b +aef83db450c1a1e005c61316b1f08e5c92276773025f496fe824d4c616f895a9 +835dfe0ef4d759dfb7d8b9434b74dc50816401fca78fd122ca46fc00da5e9d97 +e458346f142480245c7fab3abfd491eebc0b4c95ea46bfc5ba1a2ee6f584e8de +602bcb34838dc029244331ded06c208c7fb88ac86b67f737805d7bac29e655b3 +236b803fdfe0acef2f3b6985654eb5fbc0fde1e8208d9bfa83b7181c9ed658c1 +d0d4da547e977d48aa85f91ae593242e8d44d81d3d05a56cc640dcdd7c46ebed +546b658fcd05a9a35717bfb31383439bf8e3def09b260a2cab5536c21030710b +506ee5d77c4e9ce51f245ed65b2d2cc59a95602748d31194a589c231836fa6cd +9f40c7c03d967c2ddc7f8599000077320d43accdd7fa5b81cf7bb41e2209e289 +b50c61f793e35ab4d234f6087fcba08119a5e1a05065ef018081be4ceae57767 +b526df1933aba9d9ebdc2677fdca4f18308490c8fdb4fee88ad8ffd3a30ca6f1 +c31d99987f642e7d9e5c8de76a43376fa46bfd8ae035dd6058b2e09c96a09eac +b4a4da9b141175794fdaa23af16c47194827a1e10a0264738e6050ccbbdc7b04 +7f350e27130aa40612add8e0af3b096ac54d5ddcdb70ee48700e13d1ffa2565e +b6fe3ee4c773ae599fcf76d4f93195eb127da013a9bbe5a7605a045f5b51837b +f81de26b96662cfcb332918786e84dd557db6e387597d09e45b4d6997c6f556d +46d5c9bbee9882ef263551ab0c0388787690afd736ca4d003778f401373d45d0 +98da278a8710984041c8d7fb734da99d85baf4a682059960b773eec180398079 +750fe9a346553c6e137c82a13a864a26dc4f9811361fb84e0fb1c7e0d91b14a4 +19d5d1a66eb0e88ae3da3f865cde6c2b0f839cba767e2580f2a7ad0d6c63d0a2 +52ee8dbb26559a9991a2e3ee758885bc30333396754d9b9322282bd2f2b0f202 +8cff0c855678106a29cb8fe7dabcfdb7fc4a6be57aa7a117b079c88c811fb225 +b5bfe9fa31e844a6d7bc19b69d9e9d7103f2a8c73403aaf96f1fe94052896016 +48ae68e8b9ec48bcb8e0f20d0c6039987f35740ad8ba729d828cc17c65ac2f52 +cecf7fffd7884701e533f4c5e9fb3dabc5feb8cf716435805b7926982fdf2d47 +116e64037f428dcf87ec9ed16c1d82509ed7e422fca4f8458917f6f2ae510492 +2175a814b567c5beaf9b51d0ef5d0041b80c146be466d835a39294ba3daa1419 +821c3d296705550a705c90ae36da69945b9397437ceaec7eabf70262c945f283 +996bb53cf05ed72e93122e7aa03cb9af824178fdc1112529e614618e24971f89 +7304d0770175df196b5b611f65b5fb39b5c94e1e8d673f1930be8d02984e5699 +b19c2311c2112a1426f444d44eb37b4e62bb472e64ddeeac1f4b22bfc74d82d3 +48495ad2fc908f18733b51b8ee821dcc3414a95fdb33150064ffc1ce09c0a858 +ae8a3d2b4fd82b51069963737547f1775ffab856134914844f8082b67b633cfe +296e327074561c7fda4158c34707064afb8d7649ac3ce149d334336ca4829c1f +cba4490675532c4a54bf0b86bea1ffd2efbef2077cad2f4b6fdd242826bb049a +d01dade8d89f39dd31a06341b444bae0a350e9a09d28cd83fc5fff1f42ef9d06 +2a761cb6d522b2851f73dac12b0c8fc970acf7d2093f8c92c7a1219936bd681e +e908834287fc3f695072258ffca99c921d720df5594b43e4a37664970f3db116 +512492ab7fd2296ebce326ff5d81b7135d57f1c7b483b628b27e254a5da167e6 +16e33ea26f68321bc5b3c92a95b024cef37e61aef32e59ff0ca292323c271211 +257d143dd15524ed1694d8ff56ddf660236c428838a45f2a11745cd49cde0d8e +ae98f0269ea2034c5f658e9131f5deb5780e93ae407824a2f399a49ef3e45d51 +f9d52784f82fff27c7b99633bada6eb3918e8deb3e817892530253651c5d6928 +f14e34647d21dbfd7aabe718c20c99e30594b8a10b34c75f57cb50d3d540970c +38da0d925914ca4b36670c28f8697cce31fb4f853f8f2a0996114118893da926 +1618d2509262297ea437928e7c1eb558f8be09ce107f66416337025e67ddf589 +165d55bd64321244272d125f50b2b5518921689c9969ac0997005c3abcc066d4 +874bb962b26480787f44f9ee88e24f3b55477a91ec1ed7c0468d1e4a57c42a62 +332b4e23d9f4a1a44dcc34f9ef7324091c6f922b1ebc2abbdbd5806400d6083a +8a92c09c8aec5f6af297567f1bfb1b8342c32a4b39b98b026e4262af6c7f7b68 +7d1c15e4cd25b30a75cde9b162f4c7b53322170b66741f11171449b2c1f61cbb +a31dd50efb6f2c1cba49f3a6211fbbf65032ca4cb1992cf7ddc9fc39a7e9a205 +a5e9c2f267c253d597c757d790916c45f757943720a4e186cfc27dd34f795be4 +943b6f4684d6fe8e7fb799b44a14175789e191bab63d12fbc669b70251cdd034 +5a12715ad1719e350bd95460e6b852387386cb370f75f11aaea3a67fde9a475a +a9c2456f6ab748f0135979d80968b8185db436f6b24968a6c9c736b84ac1847e +7f12319be7ade1648c393e64ce6ca22c5ee02252ee965ba47ed2ed6673078d7c +65fcf20f2a5f4e43d88efb20691f329039854e39b7cfab80160258cf0b6370bd +492931bae2bdc3014aa7a86d43b1a52326610c553ac88a9477bb289078ee386d +68ecef9c9f5e2f11754d7d335cc0eed566c8b9be50c0abb3283e207c544b94f5 +1764e482659ae0931b318e11e2f09d8915708a017c451baded6d26b5f70fce6c +9894f02c65be8477ec75a0ad33c3350ba1c7f37fa310a286632276d487eab725 +52660411ac8ae4b7c7c138ff0df96e58076de68a1a0a4f7508362decebadaa80 +37765264ba615721a74e7f14863a1f6b376842883fce96537ca6d51df70612c2 +474e5830bcc39423be0111d0f24d8a6b1bfd9d89b91ad018c4f38b3d5e5e0b04 +9f88bbb9ba6e2c1d6f491ba2b36f4fb4f3953b5f42a1279a31d3e226953b9531 +4d4d8f834bc7e3ef7586fa222935336363a8ae5f1b466f06addd1b015503d035 +577ba91812e77dd879d00073b53654d5c8a6eb58e60009a6acbf12ea00862037 +0bfc8ebb44afd3e12a57eeaa2c53fce77d5fed8170c48c7b0fb0576a5fce31c5 +f19db0e0b9bb67d3a6d1cae6da08dd4d62eb598d8284658a5707128b603811ab +67c6ba96c4b765fc8f8963e12c907187f09b1df9c5e60c2c295eb96748acd963 +206be3766d266e7c45ae72ca3edd711cc0ff6cfce1e6893afbbfb981fbfb3c59 +7e8b62cfbac29d1edbf30dc0a6169955f7a8c858bccba006c52334acba317d5f +33d73ce2777b75ed244554db6c8ff4e669d30c1acff3d798c0c3730dbd4a8107 +c765ad360f12eaf52171260032afcc211b6e7ae9edd16e8c4629955701778b3c +7b6a82eead10d1ebbba5b16cbe109c0520f7a12b4f3f47d6994fd6c02103f379 +240357c05357b5599f0a63825b11fa2d2b48a6297ebaf4fccbc3208fbf9f55ff +2f65273a49141b44169acd6ce2f8658a052413df3994ceaa47bb9c5f49e5ec54 +1d196bb3d218b0ee89222d6822b4d6dc498f540c34a32aab7c7955cb876599d8 +ccdb8e61d669259e106f4eea1215ca25131f9a625f524a15c9767c407cf12a8f +a9fe8372e87d5c268d61cbb5a5e96f6fbab5bf8a3b83a486459a826f5602912f +bf2ac3492597ac6a910a6bacace1f562e369ddaef27b50a499a80bf8a1b89e41 +f9ded0b86e232e87d0a0fed8668a534f225bd5b6fcb7793dd9d25d0f171edd39 +5efd501bffdd291f7bf6412db1048b92499b033c1aebe7df9020b731cbd81a5e +0e74f545ec08b2e6af410e6ebe575c843bd947496dd0158805952909ab9c3788 +d28b275adb2894ac26292ca917b5eaf431826844ceb5e1926a27cd185edc78c7 +10a7241abff5bf56c064e4e9551789527fab82285d869208a9a3872ca6c896a3 +1173a8b3f2815ea2352aab35147a257e6738a11a58ea7cde8e4aab794f7e1731 +8d5f0954706c43ccb330a619398ad86677d5caf13528b6ac744c55cbb464ced4 +746875293850e2c10f3f0ddc3b52a9b522b7bf6174c705c67e3062895ebabc7a +c516c1eb2b9e93628bd20a531f728c548d87df09c583dd0554c929d0ce4d165c +4d0b685c021238870824b9434f9adb1c658da708c6d725e00bf578526632c123 +937516961f9f3f4808f1fe102907743d382d194269109c495f535d72c53e80e1 +88784d836000af59464710ff5d6c5f5ffd53e415b47ff027ad8bc00d8929a7cd +9e375a0d4b045ebd156fddf49461722cbe82007174e3b1b621061ec3a29d83ce +e9a71b98c35aa06bb7c5083a5fa02c3130a7d4a7eb3eab48df763e30a3e029b5 +6165e7c6be9fa317c24cf8764130c2ef0781993aba227e07f5174c98dc368961 +8267d73eeed5704a5d48a225121ef19dd6601ddbd68b7a9fd8c7ee25f9fe8692 +6606e892b273b5aa1b0049840dddb53bd4b931234c96dfd2c1c72b543a628430 +1a0164414001f4126d422cb8f086667fe9edc57f6219acff65dfdbe38ec963d9 +7da7c4b6f6f6c2bc5c7e5717980a3be6cab23c267eff030e089982a909bb450f +2fef22f8966086c481544e9e4bd2811e82b7c68c56cbacd9fe0bb36a7316c5cf +50502b068353c3f3cbfbd40f62c6fc9aaa981f16293a32b2a37d2a6e536602d4 +3ef1bffc143cd510a9b77deeb63026b12fe3cf42de77953070a94594375e47e8 +613bfd925a3a4b662a1a83577023fd439b8c0a6d318a1671a37db89879f31590 +4af5c167bd9fe3400efb92fb67a4dd2a99c796482c32fea9f34ec42972d525d1 +235373f7c59680ee773ddd419f7e8c93543686ce922494c2fae131d0c922ea25 +f064f5567d30f56c7ea9cc501d6d67e4df89dfb476ea341e9dba602f4423fbcd +89eb8bf38923de5ab6ad6e22a9933e10816705bc69fb68c850c4a4f8ec71e4fb +952053b58ff37bc94f3b6f89715787505527e312852c66a54a66c425cc0e4418 +8fc0b01e4ba144851ba0e78c9b07704f4fcce0b253b11bb87128c4d005c26724 +1fd1bf9286b24d40dc214e6437b8c0c494e4f92b1c701e9d0d96f25a320e65b4 +23b0af988168719e02eac87f0aa2f473a52a466eeae66b5ff76c6519947783ec +7c5330fca60163576981897ef7fd2e81bff556d8a10dc19fa3a6ec7bd099dfaa +0b2ae3846f469af41241893b06caa235808b5203b2909ed700fa82065b48392d +d0bb4763a379495bc87b37069036b10a34ef613abf03c40f43ef6cbe0e62f68c +6599b1c6b3732afde34e06a28ec016f53b05cddb1d5d2b794b56ddafc652e628 +1ec16c2d862df6e94d8737840506624affd34233 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark diff --git a/Build/source/utils/t1utils/tests/Symbol.pfb b/Build/source/utils/t1utils/tests/Symbol.pfb new file mode 100644 index 00000000000..ff00dde4481 Binary files /dev/null and b/Build/source/utils/t1utils/tests/Symbol.pfb differ diff --git a/Build/source/utils/t1utils/tests/Symbol.raw b/Build/source/utils/t1utils/tests/Symbol.raw new file mode 100644 index 00000000000..ef9805ff656 --- /dev/null +++ b/Build/source/utils/t1utils/tests/Symbol.raw @@ -0,0 +1,5226 @@ +%!PS-AdobeFont-1.0: Symbol 001.007 +%%CreationDate: Wed Jan 17 21:48:17 1990 +%%VMusage: 28489 37622 +11 dict begin +/FontInfo 10 dict dup begin +/version (001.007) readonly def +/Notice (Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved.) readonly def +/FullName (Symbol) readonly def +/FamilyName (Symbol) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -98 def +/UnderlineThickness 54 def +end readonly def +/FontName /Symbol def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 32 /space put +dup 33 /exclam put +dup 34 /universal put +dup 35 /numbersign put +dup 36 /existential put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /suchthat put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asteriskmath put +dup 43 /plus put +dup 44 /comma put +dup 45 /minus put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /congruent put +dup 65 /Alpha put +dup 66 /Beta put +dup 67 /Chi put +dup 68 /Delta put +dup 69 /Epsilon put +dup 70 /Phi put +dup 71 /Gamma put +dup 72 /Eta put +dup 73 /Iota put +dup 74 /theta1 put +dup 75 /Kappa put +dup 76 /Lambda put +dup 77 /Mu put +dup 78 /Nu put +dup 79 /Omicron put +dup 80 /Pi put +dup 81 /Theta put +dup 82 /Rho put +dup 83 /Sigma put +dup 84 /Tau put +dup 85 /Upsilon put +dup 86 /sigma1 put +dup 87 /Omega put +dup 88 /Xi put +dup 89 /Psi put +dup 90 /Zeta put +dup 91 /bracketleft put +dup 92 /therefore put +dup 93 /bracketright put +dup 94 /perpendicular put +dup 95 /underscore put +dup 96 /radicalex put +dup 97 /alpha put +dup 98 /beta put +dup 99 /chi put +dup 100 /delta put +dup 101 /epsilon put +dup 102 /phi put +dup 103 /gamma put +dup 104 /eta put +dup 105 /iota put +dup 106 /phi1 put +dup 107 /kappa put +dup 108 /lambda put +dup 109 /mu put +dup 110 /nu put +dup 111 /omicron put +dup 112 /pi put +dup 113 /theta put +dup 114 /rho put +dup 115 /sigma put +dup 116 /tau put +dup 117 /upsilon put +dup 118 /omega1 put +dup 119 /omega put +dup 120 /xi put +dup 121 /psi put +dup 122 /zeta put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /similar put +dup 161 /Upsilon1 put +dup 162 /minute put +dup 163 /lessequal put +dup 164 /fraction put +dup 165 /infinity put +dup 166 /florin put +dup 167 /club put +dup 168 /diamond put +dup 169 /heart put +dup 170 /spade put +dup 171 /arrowboth put +dup 172 /arrowleft put +dup 173 /arrowup put +dup 174 /arrowright put +dup 175 /arrowdown put +dup 176 /degree put +dup 177 /plusminus put +dup 178 /second put +dup 179 /greaterequal put +dup 180 /multiply put +dup 181 /proportional put +dup 182 /partialdiff put +dup 183 /bullet put +dup 184 /divide put +dup 185 /notequal put +dup 186 /equivalence put +dup 187 /approxequal put +dup 188 /ellipsis put +dup 189 /arrowvertex put +dup 190 /arrowhorizex put +dup 191 /carriagereturn put +dup 192 /aleph put +dup 193 /Ifraktur put +dup 194 /Rfraktur put +dup 195 /weierstrass put +dup 196 /circlemultiply put +dup 197 /circleplus put +dup 198 /emptyset put +dup 199 /intersection put +dup 200 /union put +dup 201 /propersuperset put +dup 202 /reflexsuperset put +dup 203 /notsubset put +dup 204 /propersubset put +dup 205 /reflexsubset put +dup 206 /element put +dup 207 /notelement put +dup 208 /angle put +dup 209 /gradient put +dup 210 /registerserif put +dup 211 /copyrightserif put +dup 212 /trademarkserif put +dup 213 /product put +dup 214 /radical put +dup 215 /dotmath put +dup 216 /logicalnot put +dup 217 /logicaland put +dup 218 /logicalor put +dup 219 /arrowdblboth put +dup 220 /arrowdblleft put +dup 221 /arrowdblup put +dup 222 /arrowdblright put +dup 223 /arrowdbldown put +dup 224 /lozenge put +dup 225 /angleleft put +dup 226 /registersans put +dup 227 /copyrightsans put +dup 228 /trademarksans put +dup 229 /summation put +dup 230 /parenlefttp put +dup 231 /parenleftex put +dup 232 /parenleftbt put +dup 233 /bracketlefttp put +dup 234 /bracketleftex put +dup 235 /bracketleftbt put +dup 236 /bracelefttp put +dup 237 /braceleftmid put +dup 238 /braceleftbt put +dup 239 /braceex put +dup 241 /angleright put +dup 242 /integral put +dup 243 /integraltp put +dup 244 /integralex put +dup 245 /integralbt put +dup 246 /parenrighttp put +dup 247 /parenrightex put +dup 248 /parenrightbt put +dup 249 /bracketrighttp put +dup 250 /bracketrightex put +dup 251 /bracketrightbt put +dup 252 /bracerighttp put +dup 253 /bracerightmid put +dup 254 /bracerightbt put +readonly def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/UniqueID 27004 def +/FontBBox{-180 -293 1090 1010}readonly def +currentdict end +currentfile eexec +dup /Private 13 dict dup begin +/-|{string currentfile exch readstring pop}executeonly def +/|-{noaccess def}executeonly def +/|{noaccess put}executeonly def +/BlueValues [ -17 0 673 685 487 500 ] |- +/MinFeature{16 16} |- +/StdHW [ 92 ] |- +/StdVW [ 95 ] |- +/ForceBold false def +/password 5839 def +/Erode{ +5.5 dup 3 -1 roll 0.1 mul exch 0.5 sub mul cvi sub dup mul +85 0 dtransform dup mul exch dup mul add +le{pop pop 1.0 1.0}{pop pop 0.0 1.5}ifelse}def +/UniqueID 27004 def +/OtherSubrs +[ {} {} {} +{ +systemdict /internaldict known not +{pop 3} +{1183615869 systemdict /internaldict get exec +dup /startlock known +{/startlock get exec} +{dup /strtlck known +{/strtlck get exec} +{pop 3} +ifelse} +ifelse} +ifelse +} executeonly +]|- +/Subrs 66 array +dup 0 { + 3 0 callothersubr + pop + pop + setcurrentpoint + return + } | +dup 1 { + 0 1 callothersubr + return + } | +dup 2 { + 0 2 callothersubr + return + } | +dup 3 { + return + } | +dup 4 { + 402 18 hstem + 454 211 vstem + return + } | +dup 5 { + -18 55 hstem + 402 18 hstem + 625 36 hstem + 0 92 vstem + 158 80 vstem + 392 58 vstem + return + } | +dup 6 { + -18 77 hstem + 402 18 hstem + 454 211 vstem + return + } | +dup 7 { + -18 55 hstem + 625 36 hstem + 0 92 vstem + 158 80 vstem + 392 58 vstem + return + } | +dup 8 { + 624 61 hstem + 273 81 vstem + return + } | +dup 9 { + -17 42 hstem + 320 76 vstem + return + } | +dup 10 { + -17 98 hstem + 320 76 vstem + return + } | +dup 11 { + -18 37 hstem + 308 78 vstem + return + } | +dup 12 { + 648 37 hstem + 13 70 vstem + 298 73 vstem + return + } | +dup 13 { + -18 37 hstem + 0 76 vstem + 308 78 vstem + return + } | +dup 14 { + 0 18 hstem + 90 104 vstem + return + } | +dup 15 { + 0 42 hstem + 449 114 vstem + return + } | +dup 16 { + 655 18 hstem + 90 104 vstem + 431 103 vstem + return + } | +dup 17 { + 328 42 hstem + 633 40 hstem + 90 104 vstem + 431 103 vstem + return + } | +dup 18 { + 0 42 hstem + 328 42 hstem + 90 104 vstem + 449 114 vstem + return + } | +dup 19 { + 632 41 hstem + 90 104 vstem + return + } | +dup 20 { + 57 callsubr + 90 104 vstem + return + } | +dup 21 { + 0 18 hstem + 632 41 hstem + 90 104 vstem + 526 103 vstem + return + } | +dup 22 { + 297 45 hstem + 633 40 hstem + 90 104 vstem + 426 109 vstem + return + } | +dup 23 { + 461 26 hstem + 563 17 vstem + return + } | +dup 24 { + -18 34 hstem + 461 37 hstem + 0 104 vstem + return + } | +dup 25 { + -15 71 hstem + 461 26 hstem + 563 17 vstem + return + } | +dup 26 { + 420 595 10 div + hstem + return + } | +dup 27 { + -231 89 hstem + 420 80 hstem + return + } | +dup 28 { + 494 -20 hstem + 174 119 vstem + return + } | +dup 29 { + 421 78 hstem + 0 16 vstem + 174 119 vstem + return + } | +dup 30 { + 444 70 hstem + 121 85 vstem + 65 callsubr + return + } | +dup 31 { + 452 54 hstem + 438 89 vstem + return + } | +dup 32 { + 444 70 hstem + 65 callsubr + return + } | +dup 33 { + 21 -21 hstem + 452 54 hstem + 0 18 vstem + 121 85 vstem + return + } | +dup 34 { + 21 -21 hstem + 265 3763 100 div + vstem + return + } | +dup 35 { + 64 callsubr + 505 19 vstem + return + } | +dup 36 { + -17 68 hstem + 500 -20 hstem + 28 86 vstem + 321 86 vstem + return + } | +dup 37 { + 470 17 hstem + 313 63 vstem + return + } | +dup 38 { + 488 12 hstem + 313 63 vstem + return + } | +dup 39 { + 470 17 hstem + 80 133 vstem + 313 63 vstem + return + } | +dup 40 { + 488 12 hstem + 80 133 vstem + return + } | +dup 41 { + 4 -21 hstem + 470 17 hstem + 80 133 vstem + 313 63 vstem + return + } | +dup 42 { + 696 55 hstem + 97 113 vstem + return + } | +dup 43 { + -101 23 hstem + 728 23 hstem + 97 113 vstem + return + } | +dup 44 { + -101 23 hstem + 696 55 hstem + 97 113 vstem + 568 113 vstem + return + } | +dup 45 { + -55 -35 -9 -55 vhcurveto + -18 vlineto + 284 hlineto + 18 vlineto + -55 -35 9 55 hvcurveto + return + } | +dup 46 { + dotsection + -31 25 -25 31 vhcurveto + 31 25 25 31 hvcurveto + 31 -25 25 -31 vhcurveto + -31 -25 -25 -31 hvcurveto + closepath + dotsection + return + } | +dup 47 { + -191 154 -154 191 vhcurveto + 191 154 154 191 hvcurveto + 191 -154 154 -191 vhcurveto + -191 -154 -154 -191 hvcurveto + closepath + return + } | +dup 48 { + 337 -17 rmoveto + 82 0 74 26 58 48 rrcurveto + 97 80 26 113 0 86 rrcurveto + 0 82 -25 114 -98 79 rrcurveto + -58 47 -76 27 -80 0 rrcurveto + -80 0 -76 -27 -58 -47 rrcurveto + -98 -79 -25 -114 0 -82 rrcurveto + 0 -86 26 -113 97 -80 rrcurveto + 58 -48 74 -26 82 0 rrcurveto + closepath + -168 571 rmoveto + 36 60 66 32 66 0 rrcurveto + 66 0 66 -32 36 -60 rrcurveto + 22 -34 8 -26 10 -42 rrcurveto + 20 -90 -4 -92 -16 -66 rrcurveto + return + } | +dup 49 { + 190 -155 155 -190 vhcurveto + -191 0 -155 -155 1 -190 rrcurveto + -191 154 -154 191 vhcurveto + 190 1 155 153 0 191 rrcurveto + closepath + -40 hmoveto + -169 -137 -136 -168 vhcurveto + -169 -1 -136 137 0 168 rrcurveto + -1 169 137 137 168 0 rrcurveto + 169 137 -137 -168 hvcurveto + closepath + return + } | +dup 50 { + 55 35 9 55 vhcurveto + 18 vlineto + -284 hlineto + 63 callsubr + return + } | +dup 51 { + 134 51 rmoveto + -14 37 -56 39 -46 -38 rrcurveto + -27 -22 -2 -71 61 -2 rrcurveto + 21 -1 30 24 -7 -44 rrcurveto + -11 -69 -75 -26 -6 -13 rrcurveto + -6 -15 6 -5 18 4 rrcurveto + 10 2 44 32 26 31 rrcurveto + 38 46 6 64 -10 27 rrcurveto + closepath + return + } | +dup 52 { + dotsection + 30 1 26 24 0 31 rrcurveto + 30 -26 26 -30 vhcurveto + -31 -25 -26 -31 hvcurveto + -30 25 -25 31 vhcurveto + closepath + dotsection + return + } | +dup 53 { + dotsection + -36 29 -29 36 vhcurveto + 36 29 29 36 hvcurveto + 36 -29 29 -36 vhcurveto + -36 -29 -29 -36 hvcurveto + closepath + dotsection + return + } | +dup 54 { + -12 -18 -23 -17 -16 -7 rrcurveto + -34 -14 -25 -1 -20 6 rrcurveto + -151 42 rlineto + -73 20 -69 -22 -53 -70 rrcurveto + 43 -27 rlineto + 13 16 34 64 95 -27 rrcurveto + 150 -43 rlineto + 58 -17 81 25 39 66 rrcurveto + closepath + return + } | +dup 55 { + 47 callsubr + 40 hmoveto + 168 137 137 168 vhcurveto + 168 137 -137 -168 hvcurveto + -168 -137 -137 -168 vhcurveto + -168 -137 137 168 hvcurveto + closepath + endchar + return + } | +dup 56 { + 161 131 131 161 vhcurveto + 161 131 -131 -161 hvcurveto + -161 -131 -131 -161 vhcurveto + -161 -131 131 161 hvcurveto + closepath + return + } | +dup 57 { + 0 18 hstem + 655 18 hstem + return + } | +dup 58 { + 497 -230 rlineto + 62 vlineto + -433 199 rlineto + 433 199 rlineto + 62 vlineto + -497 -230 rlineto + closepath + endchar + return + } | +dup 59 { + -497 230 rlineto + -62 vlineto + 433 -199 rlineto + -433 -199 rlineto + -62 vlineto + 497 230 rlineto + closepath + endchar + return + } | +dup 60 { + 524 hlineto + 55 vlineto + -524 hlineto + closepath + return + } | +dup 61 { + -526 hlineto + -55 vlineto + 526 hlineto + closepath + return + } | +dup 62 { + -19 -21 -35 -58 -121 38 rrcurveto + -47 15 -57 30 -61 -5 rrcurveto + -91 -7 -26 -49 -18 -22 rrcurveto + return + } | +dup 63 { + -18 vlineto + 55 35 -9 -55 hvcurveto + return + } | +dup 64 { + -17 88 hstem + 663 76 hstem + 25 19 vstem + 265 3763 100 div + vstem + return + } | +dup 65 { + 4175 10 div + 88 vstem + return + } | +|- +2 index /CharStrings 190 dict dup begin +/space { + 0 250 hsbw + endchar + } |- +/exclam { + 128 333 hsbw + 654 18 hstem + 0 112 vstem + -17 112 hstem + 99 475 rmoveto + 3 25 18 73 -13 53 rrcurveto + -8 33 -18 13 -25 0 rrcurveto + -25 0 -18 -13 -8 -33 rrcurveto + -13 -53 18 -73 3 -25 rrcurveto + 33 -267 rlineto + 3 -24 14 0 3 24 rrcurveto + closepath + -66 -169 rmoveto + 46 callsubr + endchar + } |- +/universal { + 31 713 hsbw + 296 63 vstem + 0 72 hstem + 447 55 hstem + 687 18 hstem + 705 vmoveto + 298 -705 rlineto + 59 hlineto + 293 705 rlineto + -57 hlineto + -84 -203 rlineto + -365 hlineto + -87 203 rlineto + closepath + 111 -258 rmoveto + 318 hlineto + -156 -377 rlineto + closepath + endchar + } |- +/numbersign { + 20 500 hsbw + 655 18 hstem + -16 18 hstem + 293 47 vstem + 121 47 vstem + 192 46 hstem + 420 46 hstem + 187 466 rmoveto + 29 207 rlineto + -47 hlineto + -29 -207 rlineto + -100 hlineto + -6 -46 rlineto + 100 hlineto + -25 -182 rlineto + -103 hlineto + -6 -46 rlineto + 103 hlineto + -29 -208 rlineto + 47 hlineto + 29 208 rlineto + 124 hlineto + -28 -208 rlineto + 47 hlineto + 28 208 rlineto + 104 hlineto + 6 46 rlineto + -103 hlineto + 24 182 rlineto + 103 hlineto + 6 46 rlineto + -102 hlineto + 28 207 rlineto + -47 hlineto + -28 -207 rlineto + closepath + -7 -46 rmoveto + -24 -182 rlineto + -125 hlineto + 25 182 rlineto + closepath + endchar + } |- +/existential { + 25 549 hsbw + 342 55 hstem + 398 55 vstem + 0 55 hstem + 652 55 hstem + 707 vmoveto + -55 vlineto + 398 hlineto + -255 vlineto + -354 hlineto + -55 vlineto + 354 hlineto + -287 vlineto + -398 hlineto + -55 vlineto + 453 hlineto + 707 vlineto + closepath + endchar + } |- +/percent { + 63 833 hsbw + 675 33 vstem + 372 81 vstem + 300 31 vstem + 0 84 vstem + -36 38 hstem + 298 40 hstem + 277 44 hstem + 614 37 hstem + 539 655 rmoveto + -9 -25 -39 -25 -47 -12 rrcurveto + -87 -22 -37 38 -10 5 rrcurveto + -26 23 -3 9 -36 5 rrcurveto + -40 6 -35 -6 -36 -25 rrcurveto + -87 -60 -27 -62 -11 -36 rrcurveto + -6 -20 -19 -75 47 -57 rrcurveto + 41 -49 58 3 56 19 rrcurveto + 70 24 60 113 9 41 rrcurveto + 11 49 -7 32 -2 25 rrcurveto + 15 -5 15 -14 48 4 rrcurveto + 42 3 7 6 46 16 rrcurveto + -389 -611 rlineto + 55 hlineto + 428 683 rlineto + closepath + -300 -174 rmoveto + -12 -56 -51 -81 -54 -22 rrcurveto + -20 -9 -50 -10 -20 38 rrcurveto + -10 19 0 44 14 36 rrcurveto + 24 62 10 25 41 51 rrcurveto + 34 42 17 -4 16 -1 rrcurveto + 16 -13 26 -14 22 -9 rrcurveto + 3 -29 7 -10 -13 -59 rrcurveto + closepath + 228 -161 rmoveto + -62 -35 -68 -55 -18 -101 rrcurveto + -6 -35 0 -46 26 -34 rrcurveto + 43 -56 58 2 44 9 rrcurveto + 47 10 35 38 25 36 rrcurveto + 38 55 21 62 3 47 rrcurveto + 1 22 0 70 -64 22 rrcurveto + -21 7 -56 8 -46 -26 rrcurveto + closepath + 156 -110 rmoveto + 0 -11 -20 -77 -44 -58 rrcurveto + -24 -32 -26 -25 -31 -5 rrcurveto + -16 -3 -44 -7 -16 47 rrcurveto + -11 34 7 27 11 31 rrcurveto + 24 65 60 132 81 -33 rrcurveto + 47 -19 2 -54 0 -12 rrcurveto + closepath + endchar + } |- +/ampersand { + 41 778 hsbw + 5 callsubr + 4 1 3 callothersubr + pop + callsubr + 454 420 rmoveto + -18 vlineto + 49 0 16 -18 -8 -50 rrcurveto + -10 -64 -66 -74 -14 -14 rrcurveto + -62 72 -34 64 -34 62 rrcurveto + 5 1 3 callothersubr + pop + callsubr + 75 34 43 16 30 75 rrcurveto + 37 92 -68 38 -15 9 rrcurveto + -29 17 -130 33 -59 -117 rrcurveto + -15 -29 -9 -57 13 -39 rrcurveto + 27 -78 rlineto + -106 -63 -28 -34 -21 -29 rrcurveto + -16 -22 -34 -56 21 -79 rrcurveto + 20 -76 56 -17 35 -9 rrcurveto + 123 -32 111 90 29 31 rrcurveto + 21 -21 52 -54 62 -17 rrcurveto + 47 -13 68 21 28 34 rrcurveto + 6 1 3 callothersubr + pop + callsubr + 27 33 17 21 6 18 rrcurveto + -16 14 rlineto + -71 -62 -33 -12 -74 47 rrcurveto + -34 25 -12 8 -23 24 rrcurveto + 65 76 27 67 39 61 rrcurveto + 23 36 15 18 50 0 rrcurveto + 18 vlineto + closepath + 7 1 3 callothersubr + pop + callsubr + -389 -9 rmoveto + -15 29 -10 26 -7 23 rrcurveto + -9 29 -3 58 29 28 rrcurveto + 39 38 96 -8 -4 -89 rrcurveto + -4 -81 -60 -23 -52 -30 rrcurveto + closepath + 81 -305 rmoveto + -12 -14 -137 -132 -94 143 rrcurveto + -39 60 23 66 11 21 rrcurveto + 21 42 55 38 20 10 rrcurveto + 47 -80 23 -48 83 -103 rrcurveto + closepath + endchar + } |- +/suchthat { + 48 439 hsbw + -17 48 hstem + 213 55 hstem + 449 51 hstem + 272 94 vstem + 62 213 rmoveto + 208 hlineto + -6 -74 -33 -60 -78 -32 rrcurveto + -41 -17 -54 -7 -58 20 rrcurveto + -40 vlineto + 25 -8 40 -26 102 23 rrcurveto + 108 25 93 107 -2 137 rrcurveto + -2 104 -79 184 -257 -61 rrcurveto + -43 vlineto + 56 8 52 -1 52 -38 rrcurveto + 41 -30 39 -49 4 -67 rrcurveto + -210 hlineto + closepath + endchar + } |- +/parenleft { + 53 333 hsbw + 0 84 vstem + -191 26 hstem + 647 26 hstem + 247 -174 rmoveto + -117 94 -10 79 -13 44 rrcurveto + -17 55 -6 67 0 76 rrcurveto + 0 76 6 67 17 55 rrcurveto + 13 44 10 79 117 94 rrcurveto + -10 17 rlineto + -21 2 -112 -95 -49 -94 rrcurveto + -36 -69 -19 -85 0 -91 rrcurveto + 0 -91 19 -85 36 -69 rrcurveto + 49 -94 112 -95 21 2 rrcurveto + closepath + endchar + } |- +/parenright { + 30 333 hsbw + 163 84 vstem + -188 21 hstem + 645 27 hstem + 10 -191 rmoveto + 21 -2 112 95 49 94 rrcurveto + 36 69 19 85 0 91 rrcurveto + 0 91 -19 85 -36 69 rrcurveto + -49 94 -112 95 -21 -2 rrcurveto + -10 -17 rlineto + 117 -94 10 -79 13 -44 rrcurveto + 17 -55 6 -67 0 -76 rrcurveto + 0 -76 -6 -67 -17 -55 rrcurveto + -13 -44 -10 -79 -117 -94 rrcurveto + closepath + endchar + } |- +/asteriskmath { + 65 500 hsbw + 134 417 hstem + 158 46 vstem + 181 134 rmoveto + 24 4 16 20 -3 28 rrcurveto + -4 42 -25 11 0 66 rrcurveto + 0 6 -2 20 17 -10 rrcurveto + 62 -36 18 -39 16 -14 rrcurveto + 18 -16 32 6 9 16 rrcurveto + 8 16 -6 32 -26 8 rrcurveto + -32 9 -32 10 -32 9 rrcurveto + -37 11 -10 12 23 11 rrcurveto + 66 31 4 -9 40 10 rrcurveto + 15 4 35 25 -20 34 rrcurveto + -9 15 -32 2 -25 -19 rrcurveto + -22 -17 0 -29 -58 -30 rrcurveto + -15 -8 -6 -2 1 22 rrcurveto + 3 58 5 -2 13 40 rrcurveto + 3 10 22 61 -54 -1 rrcurveto + -54 1 22 -61 3 -10 rrcurveto + 13 -40 5 2 3 -58 rrcurveto + 1 -22 -6 2 -15 8 rrcurveto + -58 30 0 29 -22 17 rrcurveto + -25 19 -32 -2 -9 -15 rrcurveto + -20 -34 35 -25 15 -4 rrcurveto + 40 -10 4 9 66 -31 rrcurveto + 23 -11 -10 -12 -37 -11 rrcurveto + -32 -9 -32 -10 -32 -9 rrcurveto + -26 -8 -6 -32 8 -16 rrcurveto + 9 -16 32 -6 18 16 rrcurveto + 16 14 18 39 62 36 rrcurveto + 17 10 -2 -20 0 -6 rrcurveto + 0 -66 -25 -11 -4 -42 rrcurveto + -3 -28 16 -20 24 -4 rrcurveto + closepath + endchar + } |- +/plus { + 10 549 hsbw + 237 55 vstem + 243 55 hstem + 237 533 rmoveto + -235 vlineto + -237 hlineto + -55 vlineto + 237 hlineto + -243 vlineto + 55 hlineto + 243 vlineto + 237 hlineto + 55 vlineto + -237 hlineto + 235 vlineto + closepath + endchar + } |- +/comma { + 56 250 hsbw + -5 109 hstem + 1 136 vstem + 51 callsubr + endchar + } |- +/minus { + 11 549 hsbw + 233 55 hstem + 233 vmoveto + 60 callsubr + endchar + } |- +/period { + 69 250 hsbw + 0 112 vstem + -17 112 hstem + 56 -17 rmoveto + 31 25 25 31 hvcurveto + 31 -25 25 -31 vhcurveto + -31 -25 -25 -31 hvcurveto + -31 25 -25 31 vhcurveto + closepath + endchar + } |- +/slash { + 0 278 hsbw + 628 18 hstem + -18 18 hstem + 108 44 vstem + 44 -18 rmoveto + 210 664 rlineto + -44 hlineto + -210 -664 rlineto + closepath + endchar + } |- +/zero { + 23 500 hsbw + -17 37 hstem + 648 37 hstem + 0 94 vstem + 354 94 vstem + 85 625 rmoveto + -99 -123 -24 -272 114 -168 rrcurveto + 38 -56 56 -23 54 0 rrcurveto + 54 0 56 23 38 56 rrcurveto + 114 168 -24 272 -98 122 rrcurveto + -32 38 -52 23 -56 0 rrcurveto + -56 0 -52 -23 -31 -37 rrcurveto + closepath + 45 -37 rmoveto + 28 44 36 16 30 0 rrcurveto + 30 0 36 -16 28 -44 rrcurveto + 36 -60 24 -302 -60 -134 rrcurveto + -20 -44 -40 -28 -34 0 rrcurveto + -34 0 -40 28 -20 45 rrcurveto + -60 133 24 302 36 60 rrcurveto + closepath + endchar + } |- +/one { + 117 500 hsbw + 96 84 vstem + 57 callsubr + 180 673 rmoveto + -18 hlineto + -162 -89 rlineto + -18 vlineto + 57 21 rlineto + 28 10 11 -13 0 -20 rrcurveto + -474 vlineto + -71 -80 -1 -13 vhcurveto + -18 vlineto + 270 hlineto + 18 vlineto + -13 -80 1 71 hvcurveto + closepath + endchar + } |- +/two { + 25 500 hsbw + 0 73 hstem + 604 82 hstem + 308 89 vstem + 391 hmoveto + 59 136 rlineto + -21 hlineto + -27 -37 -5 -26 -73 0 rrcurveto + -225 hlineto + 140 148 rlineto + 48 50 61 70 31 75 rrcurveto + 13 31 17 40 -24 86 rrcurveto + -28 99 -141 51 -106 -68 rrcurveto + -81 -52 -19 -83 -3 -41 rrcurveto + 21 hlineto + 5 14 31 131 132 -20 rrcurveto + 43 -7 61 -23 8 -109 rrcurveto + 4 -48 -25 -50 -6 -14 rrcurveto + -18 -45 -53 -72 -14 -15 rrcurveto + -194 -206 rlineto + -2 -15 rlineto + closepath + endchar + } |- +/three { + 39 500 hsbw + -17 98 hstem + 624 61 hstem + 320 76 vstem + 19 524 rmoveto + 8 1 3 callothersubr + pop + callsubr + 32 49 42 62 85 -11 rrcurveto + 114 -15 -4 -114 -40 -47 rrcurveto + -55 -64 -60 -5 -15 -11 rrcurveto + -10 -7 -2 -8 15 -6 rrcurveto + 9 1 3 callothersubr + pop + callsubr + 22 -9 111 24 48 -119 rrcurveto + 25 -62 -2 -48 -23 -44 rrcurveto + -26 -49 -58 -26 -59 11 rrcurveto + -37 7 -6 24 -34 18 rrcurveto + 10 1 3 callothersubr + pop + callsubr + -31 16 -31 -15 -4 -13 rrcurveto + -12 -36 29 -43 66 0 rrcurveto + 151 0 89 56 40 86 rrcurveto + 36 78 -27 83 -24 43 rrcurveto + 8 1 3 callothersubr + pop + callsubr + -37 68 -38 6 -26 15 rrcurveto + 66 46 25 48 0 50 rrcurveto + 38 -29 85 -122 vhcurveto + -130 0 -54 -83 -19 -78 rrcurveto + closepath + endchar + } |- +/four { + 16 500 hsbw + 282 84 vstem + 159 70 hstem + 0 18 hstem + 667 18 hstem + 453 229 rmoveto + -87 hlineto + 456 vlineto + -50 hlineto + -316 -455 rlineto + -71 vlineto + 282 hlineto + -159 vlineto + 84 hlineto + 159 vlineto + 87 hlineto + closepath + -171 70 rmoveto + -238 hlineto + 238 333 rlineto + closepath + endchar + } |- +/five { + 29 500 hsbw + 321 75 vstem + -17 69 hstem + 583 90 hstem + 372 583 rmoveto + 42 97 rlineto + -12 5 rlineto + -12 -5 -8 -13 -35 6 rrcurveto + -196 hlineto + -121 -260 rlineto + 45 -5 110 -7 70 -62 rrcurveto + 87 -70 9 -161 -98 -65 rrcurveto + -38 -25 -36 -4 -52 32 rrcurveto + -16 10 -51 40 -36 -14 rrcurveto + -31 -12 4 -33 8 -15 rrcurveto + 15 -27 48 -13 57 1 rrcurveto + 207 3 56 150 6 37 rrcurveto + 3 16 3 58 -12 54 rrcurveto + -25 115 -106 58 -70 13 rrcurveto + -73 14 rlineto + 40 82 rlineto + closepath + endchar + } |- +/six { + 36 500 hsbw + -17 36 hstem + 381 49 hstem + 668 17 hstem + 0 96 vstem + 339 92 vstem + 411 685 rmoveto + -190 4 -136 -126 -58 -135 rrcurveto + -24 -56 -24 -149 49 -108 rrcurveto + 91 -200 245 46 53 159 rrcurveto + 22 66 12 160 -120 62 rrcurveto + -81 49 -83 -43 -57 -22 rrcurveto + 16 75 70 162 214 39 rrcurveto + closepath + -307 -326 rmoveto + 19 18 32 13 27 5 rrcurveto + 57 10 33 -18 15 -13 rrcurveto + 68 -59 -3 -180 -37 -54 rrcurveto + -52 -77 -89 36 -32 42 rrcurveto + -68 89 29 173 1 15 rrcurveto + closepath + endchar + } |- +/seven { + 24 500 hsbw + 290 59 vstem + -16 18 hstem + 583 90 hstem + 210 -16 rmoveto + 214 657 rlineto + 32 vlineto + -363 hlineto + -61 -160 rlineto + 22 -9 rlineto + 24 40 17 39 56 0 rrcurveto + 227 hlineto + -195 -599 rlineto + closepath + endchar + } |- +/eight { + 54 500 hsbw + -18 37 hstem + 648 37 hstem + 0 76 vstem + 298 73 vstem + 126 340 rmoveto + -42 -30 -29 -20 -33 -62 rrcurveto + -20 -36 -23 -79 58 -64 rrcurveto + 11 1 3 callothersubr + pop + callsubr + 96 -107 177 34 52 86 rrcurveto + 34 57 10 98 -85 83 rrcurveto + -32 31 -29 25 -24 14 rrcurveto + 12 1 3 callothersubr + pop + callsubr + 60 34 25 26 28 39 rrcurveto + 14 20 25 68 -36 59 rrcurveto + -50 82 -180 15 -74 -85 rrcurveto + -75 -87 60 -113 44 -37 rrcurveto + closepath + 81 36 rmoveto + -42 28 -27 48 -6 27 rrcurveto + -10 44 21 38 33 21 rrcurveto + 29 19 61 2 34 -21 rrcurveto + 81 -50 -42 -103 -28 -32 rrcurveto + -16 -18 -22 -22 -21 -11 rrcurveto + closepath + 13 1 3 callothersubr + pop + callsubr + 38 -141 rmoveto + 18 -12 41 -32 8 -61 rrcurveto + 18 -128 -114 -16 -51 17 rrcurveto + -69 22 -22 89 6 48 rrcurveto + 5 40 31 65 50 24 rrcurveto + closepath + endchar + } |- +/nine { + 31 500 hsbw + 330 99 vstem + 2 95 vstem + -18 21 hstem + 240 47 hstem + 649 36 hstem + 33 -18 rmoveto + 337 15 139 344 -126 238 rrcurveto + -52 99 -163 58 -102 -114 rrcurveto + -79 -88 -10 -150 72 -84 rrcurveto + 108 -126 152 109 14 8 rrcurveto + -3 -49 -54 -108 -68 -56 rrcurveto + -61 -50 -78 -20 -28 -7 rrcurveto + closepath + 78 593 rmoveto + 39 70 80 5 54 -66 rrcurveto + 35 -43 7 -78 3 -37 rrcurveto + 3 -37 2 -46 -4 -28 rrcurveto + -36 -34 -21 -6 -29 -7 rrcurveto + -46 -11 -34 10 -30 36 rrcurveto + -52 63 5 167 24 42 rrcurveto + closepath + endchar + } |- +/colon { + 81 278 hsbw + 0 112 vstem + -17 112 hstem + 349 110 hstem + 39 vmoveto + 46 callsubr + 365 vmoveto + 46 callsubr + endchar + } |- +/semicolon { + 83 278 hsbw + -151 25 hstem + -5 109 hstem + 9 112 vstem + 348 112 hstem + 51 callsubr + -125 353 rmoveto + 46 callsubr + endchar + } |- +/less { + 26 549 hsbw + 229 64 hstem + 0 66 vstem + 230 vmoveto + 58 callsubr + } |- +/equal { + 11 549 hsbw + 141 55 hstem + 335 55 hstem + 526 390 rmoveto + 61 callsubr + -139 vmoveto + 61 callsubr + endchar + } |- +/greater { + 26 549 hsbw + 431 66 vstem + 228 66 hstem + 497 292 rmoveto + 59 callsubr + } |- +/question { + 70 444 hsbw + 104 112 vstem + -17 112 hstem + 245 96 vstem + 652 34 hstem + 175 167 rmoveto + 13 92 19 35 53 61 rrcurveto + 21 23 28 38 21 45 rrcurveto + 40 88 -59 145 -166 -8 rrcurveto + -146 -7 -23 -159 43 -37 rrcurveto + 10 -8 13 -5 15 5 rrcurveto + 26 9 9 32 -7 15 rrcurveto + -10 22 -34 12 7 30 rrcurveto + 12 53 129 54 49 -123 rrcurveto + 15 -38 -4 -63 -33 -83 rrcurveto + -24 -61 -30 -88 -8 -79 rrcurveto + closepath + -50 -128 rmoveto + 46 callsubr + endchar + } |- +/congruent { + 11 549 hsbw + 474 -48 hstem + 56 -56 hstem + 250 -56 hstem + 526 249 rmoveto + 61 callsubr + -139 vmoveto + 61 callsubr + -479 370 rmoveto + 44 49 31 31 134 -47 rrcurveto + 88 -31 55 -9 57 27 rrcurveto + 44 21 11 25 8 15 rrcurveto + -37 24 rlineto + 62 callsubr + closepath + endchar + } |- +/Alpha { + 4 722 hsbw + 323 32 vstem + 0 18 hstem + 218 42 hstem + 655 18 hstem + 326 673 rmoveto + -249 -591 rlineto + -12 -28 -6 -36 -59 0 rrcurveto + -18 vlineto + 192 hlineto + 18 vlineto + -18 0 -67 -3 26 71 rrcurveto + 48 132 rlineto + 259 hlineto + 49 -132 rlineto + 26 -71 -67 3 -18 0 rrcurveto + -18 vlineto + 250 hlineto + 18 vlineto + -59 0 -6 36 -12 28 rrcurveto + -251 591 rlineto + closepath + -39 -145 rmoveto + 113 -268 rlineto + -226 hlineto + closepath + endchar + } |- +/Beta { + 29 667 hsbw + 0 42 hstem + 328 42 hstem + 16 callsubr + 14 1 3 callothersubr + pop + callsubr + 90 82 rmoveto + -55 -35 -9 -55 vhcurveto + 15 1 3 callothersubr + pop + callsubr + -18 vlineto + 339 hlineto + 55 0 50 18 10 4 rrcurveto + 71 30 38 78 0 54 rrcurveto + 0 75 -46 69 -110 24 rrcurveto + 2 vlineto + 16 1 3 callothersubr + pop + callsubr + 88 26 39 48 0 72 rrcurveto + 0 112 -83 33 -36 11 rrcurveto + -40 12 -55 5 -43 0 rrcurveto + -277 hlineto + 63 callsubr + closepath + 17 1 3 callothersubr + pop + callsubr + 104 33 rmoveto + 0 14 71 -7 12 -1 rrcurveto + 120 -10 34 -63 0 -61 rrcurveto + -121 -118 -5 -40 vhcurveto + -79 hlineto + closepath + -42 vmoveto + 83 hlineto + 18 1 3 callothersubr + pop + callsubr + 64 0 25 -16 21 -13 rrcurveto + 29 -18 33 -27 0 -78 rrcurveto + -62 -40 -72 -112 vhcurveto + -60 hlineto + -42 -1 22 24 hvcurveto + closepath + endchar + } |- +/Chi { + -9 722 hsbw + 298 120 vstem + 57 callsubr + 591 607 rmoveto + 37 46 33 2 35 0 rrcurveto + 18 vlineto + -232 hlineto + -18 vlineto + 95 1 -21 -36 -20 -26 rrcurveto + -140 -181 rlineto + -123 189 rlineto + -22 34 14 20 77 -1 rrcurveto + 18 vlineto + -300 hlineto + -18 vlineto + 61 1 20 -31 12 -16 rrcurveto + 197 -276 rlineto + -211 -267 rlineto + -37 -46 -33 -2 -33 0 rrcurveto + -18 vlineto + 230 hlineto + 18 vlineto + -75 0 1 35 20 26 rrcurveto + 165 213 rlineto + 141 -221 rlineto + 22 -34 -17 -19 -74 0 rrcurveto + -18 vlineto + 300 hlineto + 18 vlineto + -62 0 -19 30 -12 16 rrcurveto + -215 311 rlineto + closepath + endchar + } |- +/Delta { + 6 612 hsbw + 373 105 vstem + 665 18 hstem + 0 49 hstem + 320 688 rmoveto + -320 -688 rlineto + 602 hlineto + closepath + -318 517 rmoveto + 194 -468 rlineto + -412 hlineto + closepath + endchar + } |- +/Epsilon { + 32 611 hsbw + 0 44 hstem + 333 42 hstem + 625 48 hstem + 90 104 vstem + 452 23 vstem + 585 170 rmoveto + -31 hlineto + -24 -51 -27 -70 -106 -3 rrcurveto + -163 -4 rlineto + -21 -1 -19 9 0 35 rrcurveto + 248 vlineto + 156 hlineto + 80 22 -34 -60 hvcurveto + 23 hlineto + 230 vlineto + -23 hlineto + -60 -22 -34 -80 vhcurveto + -156 hlineto + 250 vlineto + 215 hlineto + 86 0 -4 -54 13 -46 rrcurveto + 27 hlineto + 148 vlineto + -531 hlineto + 63 callsubr + -509 vlineto + -55 -35 -9 -55 vhcurveto + -18 vlineto + 539 hlineto + closepath + endchar + } |- +/Phi { + 26 763 hsbw + 596 118 vstem + 308 102 vstem + 0 120 vstem + 18 -18 hstem + 144 -36 hstem + 566 -32 hstem + 674 -18 hstem + 511 673 rmoveto + -304 hlineto + -18 vlineto + 89 12 -44 -46 hvcurveto + -86 0 -64 -4 -69 -50 rrcurveto + -68 -49 -21 -72 0 -59 rrcurveto + 0 -75 35 -63 68 -39 rrcurveto + 71 -41 62 -5 72 0 rrcurveto + -46 -13 -44 -89 vhcurveto + -18 vlineto + 306 hlineto + 18 vlineto + -89 -13 44 46 hvcurveto + 69 0 62 5 71 41 rrcurveto + 68 39 35 63 0 75 rrcurveto + 0 59 -21 72 -68 49 rrcurveto + -69 50 -64 4 -83 0 rrcurveto + 46 12 44 89 vhcurveto + closepath + -101 -121 rmoveto + 41 0 64 -12 48 -68 rrcurveto + 21 -30 16 -40 -3 -53 rrcurveto + -2 -32 -5 -59 -39 -43 rrcurveto + -49 -54 -75 0 -17 0 rrcurveto + closepath + -102 hmoveto + -17 0 -75 0 -49 54 rrcurveto + -39 43 -5 59 -2 32 rrcurveto + -3 53 16 40 21 30 rrcurveto + 48 68 64 12 41 0 rrcurveto + closepath + endchar + } |- +/Gamma { + 24 603 hsbw + 0 18 hstem + 628 45 hstem + 101 104 vstem + 653 vmoveto + 20 -1 81 5 0 -104 rrcurveto + -471 vlineto + 45 callsubr + 546 vlineto + 192 hlineto + 56 0 29 -9 20 -11 rrcurveto + 50 -27 3 -31 5 -39 rrcurveto + 25 hlineto + -17 162 rlineto + -568 hlineto + closepath + endchar + } |- +/Eta { + 39 722 hsbw + 496 104 vstem + 90 104 vstem + 0 18 hstem + 323 42 hstem + 655 18 hstem + 194 365 rmoveto + 226 vlineto + 50 callsubr + -509 vlineto + 45 callsubr + 241 vlineto + 302 hlineto + -241 vlineto + 45 callsubr + 509 vlineto + 50 callsubr + -226 vlineto + closepath + endchar + } |- +/Iota { + 32 333 hsbw + 90 104 vstem + 57 callsubr + 194 591 rmoveto + 50 callsubr + -509 vlineto + 45 callsubr + closepath + endchar + } |- +/theta1 { + 18 631 hsbw + 454 76 vstem + 112 90 vstem + 10 -28 hstem + 464 -82 hstem + 690 -42 hstem + 605 326 rmoveto + -74 27 rlineto + -3 41 0 57 -19 63 rrcurveto + -15 51 -55 101 -81 20 rrcurveto + -21 5 -39 5 -34 -38 rrcurveto + -42 -45 0 -61 29 -53 rrcurveto + 40 -74 58 -35 104 -53 rrcurveto + 1 -65 5 -89 -39 -86 rrcurveto + -15 -34 -9 -17 -41 -23 rrcurveto + -38 -21 -50 4 -30 33 rrcurveto + -19 22 -25 52 11 81 rrcurveto + 19 155 rlineto + 5 43 -23 40 -19 14 rrcurveto + -32 26 -45 -8 -10 -4 rrcurveto + -37 -14 -9 -14 -10 -19 rrcurveto + -43 -81 rlineto + 16 -5 rlineto + 17 27 9 22 26 13 rrcurveto + 32 14 11 -8 11 -12 rrcurveto + 18 -20 -3 -15 -6 -45 rrcurveto + -17 -132 rlineto + -3 -20 4 -44 15 -37 rrcurveto + 14 -36 40 -33 23 -8 rrcurveto + 24 -9 79 -11 61 21 rrcurveto + 41 15 39 30 35 67 rrcurveto + 26 49 11 44 8 110 rrcurveto + 74 -36 rlineto + closepath + -153 107 rmoveto + -29 14 -84 33 -52 80 rrcurveto + -15 24 -19 37 23 47 rrcurveto + 25 50 50 -14 25 -21 rrcurveto + 46 -41 11 -51 8 -64 rrcurveto + closepath + endchar + } |- +/Kappa { + 35 722 hsbw + 20 callsubr + 194 297 rmoveto + 33 30 rlineto + 210 -237 rlineto + 44 -51 -18 -21 -80 0 rrcurveto + -18 vlineto + 304 hlineto + 18 vlineto + -33 6 -24 -3 -72 81 rrcurveto + -257 290 rlineto + 74 69 70 66 64 70 rrcurveto + 51 53 25 5 45 0 rrcurveto + 18 vlineto + -260 hlineto + -18 vlineto + 74 0 41 -21 -54 -56 rrcurveto + -76 -78 -78 -72 -83 -68 rrcurveto + 231 vlineto + 50 callsubr + -509 vlineto + 45 callsubr + closepath + endchar + } |- +/Lambda { + 6 686 hsbw + 370 109 vstem + 0 18 hstem + 665 18 hstem + 330 688 rmoveto + -224 -597 rlineto + -21 -56 -67 -17 -18 0 rrcurveto + -18 vlineto + 215 hlineto + 18 vlineto + -39 0 -49 0 31 83 rrcurveto + 146 395 rlineto + 162 -397 rlineto + 31 -77 -74 -4 -21 0 rrcurveto + -18 vlineto + 272 hlineto + 18 vlineto + -11 0 -53 3 -30 72 rrcurveto + closepath + endchar + } |- +/Mu { + 28 889 hsbw + 665 104 vstem + 93 49 vstem + 57 callsubr + 673 vmoveto + -18 vlineto + 79 -6 14 -3 0 -66 rrcurveto + -498 vlineto + -47 -39 -17 -51 vhcurveto + -18 vlineto + 229 hlineto + 18 vlineto + -51 -39 17 47 hvcurveto + 461 vlineto + 260 -543 rlineto + 18 hlineto + 245 572 rlineto + -490 vlineto + 45 callsubr + 515 vlineto + 71 59 -13 29 vhcurveto + 18 vlineto + -198 hlineto + -224 -510 rlineto + -234 510 rlineto + closepath + endchar + } |- +/Nu { + 29 722 hsbw + 552 49 vstem + 90 49 vstem + 57 callsubr + 2 673 rmoveto + -18 vlineto + 51 6 7 -24 30 -34 rrcurveto + -521 vlineto + -47 -39 -17 -51 vhcurveto + -18 vlineto + 229 hlineto + 18 vlineto + -51 -39 17 47 hvcurveto + 457 vlineto + 440 -547 rlineto + 22 hlineto + 599 vlineto + 55 35 9 55 vhcurveto + 18 vlineto + -229 hlineto + 63 callsubr + -406 vlineto + -383 488 rlineto + closepath + endchar + } |- +/Omicron { + 41 722 hsbw + 558 116 vstem + 0 117 vstem + -17 39 hstem + 646 39 hstem + 48 callsubr + -5 -20 -15 -54 -32 -38 rrcurveto + -42 -46 -58 -24 -56 0 rrcurveto + -56 0 -58 24 -40 46 rrcurveto + -34 38 -16 56 -4 18 rrcurveto + -14 66 -6 92 22 90 rrcurveto + 10 42 6 26 22 34 rrcurveto + closepath + endchar + } |- +/Pi { + 25 768 hsbw + 20 callsubr + 526 103 vstem + 629 577 rmoveto + 73 62 5 26 vhcurveto + 19 1 3 callothersubr + pop + callsubr + 18 vlineto + -715 hlineto + 20 1 3 callothersubr + pop + callsubr + -18 vlineto + 26 62 -5 -73 hvcurveto + -495 vlineto + 45 callsubr + 21 1 3 callothersubr + pop + callsubr + -1 550 rlineto + 333 hlineto + -550 vlineto + 45 callsubr + closepath + endchar + } |- +/Theta { + 41 741 hsbw + -17 39 hstem + 304 67 hstem + 646 39 hstem + 0 116 vstem + 559 115 vstem + 467 9 vstem + 198 9 vstem + 48 callsubr + -5 -21 -15 -53 -32 -38 rrcurveto + -42 -46 -58 -24 -58 0 rrcurveto + -54 0 -58 24 -42 46 rrcurveto + -32 38 -15 53 -5 21 rrcurveto + -16 66 -4 92 20 90 rrcurveto + 10 42 8 26 22 34 rrcurveto + closepath + 105 -183 rmoveto + -37 0 -19 20 -11 33 rrcurveto + -15 -1 rlineto + 4 -32 2 -28 0 -25 rrcurveto + 0 -25 -2 -28 -4 -33 rrcurveto + 15 -1 rlineto + 11 34 19 19 37 0 rrcurveto + 126 hlineto + 37 0 19 -19 11 -34 rrcurveto + 15 1 rlineto + -4 33 -2 28 0 25 rrcurveto + 0 25 2 28 4 32 rrcurveto + -15 1 rlineto + -11 -33 -19 -20 -37 0 rrcurveto + closepath + endchar + } |- +/Rho { + 28 556 hsbw + 0 18 hstem + 297 45 hstem + 655 18 hstem + 90 104 vstem + 426 109 vstem + 194 300 rmoveto + 87 -3 rlineto + 42 0 58 4 38 18 rrcurveto + 42 20 42 23 23 67 rrcurveto + 23 70 -26 67 -18 28 rrcurveto + -24 36 -30 15 -36 11 rrcurveto + -40 12 -55 5 -43 0 rrcurveto + -277 hlineto + 63 callsubr + -509 vlineto + 45 callsubr + closepath + 22 1 3 callothersubr + pop + callsubr + 527 vmoveto + 0 19 18 4 17 1 rrcurveto + 31 3 32 2 33 -10 rrcurveto + 37 -11 54 -12 10 -99 rrcurveto + 8 -78 -23 -65 -61 -11 rrcurveto + -60 -11 -72 -5 -24 17 rrcurveto + closepath + endchar + } |- +/Sigma { + 5 592 hsbw + 254 116 vstem + 0 94 hstem + 627 46 hstem + 281 327 rmoveto + -281 -327 rlineto + 547 hlineto + 37 205 rlineto + -20 hlineto + -30 -97 -37 -14 -64 0 rrcurveto + -293 hlineto + 236 275 rlineto + -201 258 rlineto + 220 hlineto + 99 0 17 -67 10 -38 rrcurveto + 19 hlineto + -10 151 rlineto + -518 hlineto + closepath + endchar + } |- +/Tau { + 33 611 hsbw + 235 104 vstem + 0 18 hstem + 634 39 hstem + 5 673 rmoveto + -5 -171 rlineto + 26 -2 rlineto + 0 78 43 51 100 3 rrcurveto + 66 2 rlineto + -552 vlineto + 45 callsubr + 552 vlineto + 66 -2 rlineto + 100 -3 43 -51 0 -78 rrcurveto + 26 2 rlineto + -5 171 rlineto + closepath + endchar + } |- +/Upsilon { + -8 690 hsbw + 302 104 vstem + 0 18 hstem + 654 19 hstem + 406 313 rmoveto + 191 294 rlineto + 32 49 38 -1 35 0 rrcurveto + 18 vlineto + -232 hlineto + -18 vlineto + 88 3 -17 -36 -17 -28 rrcurveto + -140 -231 rlineto + -156 239 rlineto + -22 34 18 20 73 -1 rrcurveto + 18 vlineto + -297 hlineto + -18 vlineto + 53 2 25 -32 12 -16 rrcurveto + 212 -309 rlineto + -218 vlineto + 45 callsubr + closepath + endchar + } |- +/sigma1 { + 40 439 hsbw + -233 88 hstem + -18 102 hstem + 421 79 hstem + 1 37 vstem + 355 41 vstem + 307 -17 rmoveto + 19 0 31 -9 -2 -51 rrcurveto + -2 -36 -21 -25 -31 -7 rrcurveto + -25 -6 -9 8 -36 10 rrcurveto + -16 5 -35 -4 -12 -10 rrcurveto + -27 -22 11 -40 30 -16 rrcurveto + 38 -21 39 8 24 9 rrcurveto + 27 10 42 19 31 76 rrcurveto + 15 36 3 40 -10 31 rrcurveto + -9 26 -16 39 -30 17 rrcurveto + -32 18 -24 0 -33 -2 rrcurveto + -79 -4 rlineto + -74 -4 -28 44 -18 50 rrcurveto + -33 90 57 100 42 31 rrcurveto + 68 51 64 -31 54 -7 rrcurveto + 53 -6 17 19 3 21 rrcurveto + 3 23 -22 17 -28 11 rrcurveto + -26 10 -33 2 -45 -7 rrcurveto + -70 -11 -51 -51 -12 -13 rrcurveto + -44 -45 -56 -85 12 -119 rrcurveto + 6 -55 18 -59 48 -42 rrcurveto + 53 -46 46 12 36 0 rrcurveto + closepath + endchar + } |- +/Omega { + 34 768 hsbw + 563 119 vstem + 20 119 vstem + 0 101 hstem + 656 32 hstem + 279 152 rmoveto + -32 14 -47 10 -39 90 rrcurveto + -33 76 -11 173 89 89 rrcurveto + 41 41 53 11 51 0 rrcurveto + 51 0 53 -11 41 -41 rrcurveto + 89 -89 -11 -173 -33 -76 rrcurveto + -39 -90 -47 -10 -32 -14 rrcurveto + -16 -152 rlineto + 295 hlineto + 162 vlineto + -15 hlineto + -12 -49 -12 -12 -42 0 rrcurveto + -158 hlineto + 2 28 rlineto + 77 23 49 26 41 60 rrcurveto + 70 103 -12 117 -42 75 rrcurveto + -40 73 -47 22 -27 16 rrcurveto + -46 27 -66 17 -71 0 rrcurveto + -71 0 -66 -17 -46 -27 rrcurveto + -27 -16 -47 -22 -40 -73 rrcurveto + -42 -75 -12 -117 70 -103 rrcurveto + 41 -60 49 -26 77 -23 rrcurveto + 2 -28 rlineto + -158 hlineto + -42 0 -12 12 -12 49 rrcurveto + -15 hlineto + -162 vlineto + 295 hlineto + closepath + endchar + } |- +/Xi { + 40 645 hsbw + 106 346 vstem + 94 -94 hstem + 402 -96 hstem + 674 -90 hstem + 22 522 rmoveto + 16 hlineto + 3 18 -2 43 66 0 rrcurveto + 349 hlineto + 66 0 -2 -43 3 -18 rrcurveto + 16 hlineto + 151 vlineto + -515 hlineto + closepath + 85 -423 rmoveto + 18 hlineto + 3 48 14 8 35 0 rrcurveto + 205 hlineto + 35 0 14 -8 3 -48 rrcurveto + 18 hlineto + 207 vlineto + -18 hlineto + -3 -48 -14 -8 -35 0 rrcurveto + -205 hlineto + -35 0 -14 8 -3 48 rrcurveto + -18 hlineto + closepath + -107 -457 rmoveto + 559 hlineto + 194 vlineto + -18 hlineto + -9 -68 -6 -33 -72 0 rrcurveto + -349 hlineto + -72 0 -6 33 -9 68 rrcurveto + -18 hlineto + closepath + endchar + } |- +/Psi { + 15 795 hsbw + 0 18 hstem + 300 40 hstem + 655 18 hstem + 525 10 div + 1145 10 div + 331 104 599 1145 10 div + vstem3 + 435 300 rmoveto + 100 0 30 11 45 20 rrcurveto + 69 31 29 58 2 44 rrcurveto + 7 127 rlineto + 3 56 15 5 31 14 rrcurveto + 18 vlineto + -61 -4 -23 -3 -32 -31 rrcurveto + -24 -24 -21 -45 -2 -20 rrcurveto + -8 -89 rlineto + -11 -126 -87 -1 -62 -1 rrcurveto + 251 vlineto + 50 callsubr + -251 vlineto + -62 1 -87 1 -11 126 rrcurveto + -8 89 rlineto + -2 20 -21 45 -24 24 rrcurveto + -32 31 -23 3 -61 4 rrcurveto + -18 vlineto + 31 -14 15 -5 3 -56 rrcurveto + 7 -127 rlineto + 2 -44 29 -58 69 -31 rrcurveto + 45 -20 30 -11 100 0 rrcurveto + -218 vlineto + 45 callsubr + closepath + endchar + } |- +/Zeta { + 44 611 hsbw + 562 29 vstem + 24 26 vstem + 0 42 hstem + 631 42 hstem + 39 673 rmoveto + -15 -175 rlineto + 25 hlineto + 20 70 5 63 126 0 rrcurveto + 229 hlineto + -429 -612 rlineto + -19 vlineto + 567 hlineto + 25 181 rlineto + -29 hlineto + -14 -47 -9 -92 -139 0 rrcurveto + -253 hlineto + 413 604 rlineto + 27 vlineto + closepath + endchar + } |- +/bracketleft { + 86 333 hsbw + 0 77 vstem + -155 25 hstem + 649 25 hstem + 213 674 rmoveto + -213 hlineto + -829 vlineto + 213 hlineto + 25 vlineto + -79 hlineto + -39 -18 14 37 hvcurveto + 677 vlineto + 37 18 14 39 vhcurveto + 79 hlineto + closepath + endchar + } |- +/therefore { + 163 863 hsbw + 408 130 vstem + 204 130 vstem + 0 130 vstem + 348 130 hstem + 0 130 hstem + 65 vmoveto + 53 callsubr + 408 hmoveto + 53 callsubr + -204 348 rmoveto + 53 callsubr + endchar + } |- +/bracketright { + 33 333 hsbw + 136 77 vstem + -155 25 hstem + 649 25 hstem + 649 vmoveto + 79 hlineto + 39 18 -14 -37 hvcurveto + -677 vlineto + -37 -18 -14 -39 vhcurveto + -79 hlineto + -25 vlineto + 213 hlineto + 829 vlineto + -213 hlineto + closepath + endchar + } |- +/perpendicular { + 15 658 hsbw + 0 55 hstem + 291 55 vstem + 637 55 rmoveto + -291 hlineto + 619 vlineto + -55 hlineto + -619 vlineto + -291 hlineto + -55 vlineto + 637 hlineto + closepath + endchar + } |- +/underscore { + -2 500 hsbw + -252 46 hstem + 504 -252 rmoveto + 46 vlineto + -504 hlineto + -46 vlineto + closepath + endchar + } |- +/radicalex { + 480 500 hsbw + 917 -36 hstem + 917 vmoveto + -36 vlineto + 610 hlineto + 36 vlineto + closepath + endchar + } |- +/alpha { + 41 631 hsbw + 24 callsubr + 563 17 vstem + 23 1 3 callothersubr + pop + callsubr + 458 487 rmoveto + -64 -178 rlineto + -2 hlineto + 24 1 3 callothersubr + pop + callsubr + -5 39 -14 40 -19 32 rrcurveto + -23 38 -38 32 -47 8 rrcurveto + -42 7 -59 -11 -31 -21 rrcurveto + -72 -49 -27 -52 -10 -73 rrcurveto + -15 -112 20 -67 26 -45 rrcurveto + 20 -34 28 -24 37 -17 rrcurveto + 66 -29 49 11 46 15 rrcurveto + 89 29 22 69 17 29 rrcurveto + 25 1 3 callothersubr + pop + callsubr + 24 -65 16 -35 24 -23 rrcurveto + 18 -17 22 -8 27 22 rrcurveto + 27 22 10 39 1 19 rrcurveto + 2 59 rlineto + -18 hlineto + -2 -13 -1 -32 -21 -21 rrcurveto + -31 -31 -26 26 -10 9 rrcurveto + -19 19 -14 28 -8 48 rrcurveto + 115 317 rlineto + closepath + -210 -346 rmoveto + 24 1 3 callothersubr + pop + callsubr + -12 -32 -27 -49 -20 -17 rrcurveto + -22 -19 -23 -9 -17 1 rrcurveto + -27 2 -13 6 -22 22 rrcurveto + -24 24 -10 32 -5 29 rrcurveto + -10 56 -4 56 7 55 rrcurveto + 7 53 12 43 25 32 rrcurveto + 22 28 18 17 59 -17 rrcurveto + 29 -9 27 -26 16 -26 rrcurveto + 26 -42 11 -78 7 -50 rrcurveto + closepath + endchar + } |- +/beta { + 61 549 hsbw + -17 47 hstem + 398 62 hstem + 707 34 hstem + 16 78 vstem + 307 11 vstem + 351 103 vstem + 97 37 rmoveto + 42 -29 30 -15 42 -7 rrcurveto + 41 -7 42 3 34 12 rrcurveto + 26 9 68 33 25 101 rrcurveto + 12 48 -4 56 -11 38 rrcurveto + -24 82 -39 41 -63 30 rrcurveto + 37 31 34 27 11 71 rrcurveto + 10 64 -42 47 -21 17 rrcurveto + -71 58 -101 9 -68 -39 rrcurveto + -32 -19 -59 -32 0 -82 rrcurveto + -655 vlineto + 0 -51 -11 -50 -5 -51 rrcurveto + 87 hlineto + 3 25 5 25 0 25 rrcurveto + closepath + -1 745 rmoveto + 0 44 35 46 35 14 rrcurveto + 23 9 35 1 36 -28 rrcurveto + 69 -55 -17 -116 -25 -32 rrcurveto + -8 -10 -10 -18 -16 2 rrcurveto + -20 3 -41 11 -19 -16 rrcurveto + -9 -8 -20 -24 32 -17 rrcurveto + 16 -9 25 5 19 2 rrcurveto + 29 3 10 -7 15 -17 rrcurveto + 57 -64 16 -112 -15 -72 rrcurveto + -6 -31 -15 -36 -40 -22 rrcurveto + -36 -20 -46 5 -44 17 rrcurveto + -31 12 -15 18 -19 18 rrcurveto + closepath + endchar + } |- +/chi { + 12 549 hsbw + 27 callsubr + 0 510 vstem + 26 1 3 callothersubr + pop + callsubr + 380 480 rmoveto + -133 -244 rlineto + 27 1 3 callothersubr + pop + callsubr + -39 167 rlineto + -8 37 -25 40 -33 13 rrcurveto + -26 10 -36 2 -26 -29 rrcurveto + -40 -43 -9 -76 -5 -36 rrcurveto + 18 hlineto + 6 23 3 29 27 28 rrcurveto + 21 23 35 4 33 -24 rrcurveto + 28 -20 10 -34 7 -29 rrcurveto + 32 -136 rlineto + -219 -401 rlineto + 102 hlineto + 148 273 rlineto + 2 hlineto + 13 -79 3 -36 20 -70 rrcurveto + 10 -36 13 -26 23 -21 rrcurveto + 38 -35 44 18 22 13 rrcurveto + 55 32 13 104 3 29 rrcurveto + -19 hlineto + -7 -22 -6 -48 -51 -18 rrcurveto + -43 -15 -35 23 -15 42 rrcurveto + -13 35 -17 43 -26 115 rrcurveto + 26 1 3 callothersubr + pop + callsubr + 204 374 rlineto + closepath + endchar + } |- +/delta { + 40 494 hsbw + 344 96 vstem + 0 108 vstem + 28 -46 hstem + 740 -46 hstem + 215 447 rmoveto + -17 -7 -111 -27 -52 -89 rrcurveto + -48 -80 7 -78 27 -58 rrcurveto + 17 -36 23 -39 67 -35 rrcurveto + 34 -18 57 -4 48 13 rrcurveto + 33 9 42 28 25 24 rrcurveto + 104 103 -22 140 -47 77 rrcurveto + -39 65 -73 46 -18 11 rrcurveto + -13 8 -83 45 -48 49 rrcurveto + -32 32 8 33 14 14 rrcurveto + 17 18 30 19 48 -16 rrcurveto + 33 -10 8 -11 32 -33 rrcurveto + 32 -34 34 -20 33 24 rrcurveto + 25 19 -9 31 -19 23 rrcurveto + -17 20 -45 21 -35 8 rrcurveto + -15 3 -114 19 -46 -35 rrcurveto + -22 -17 -45 -23 20 -66 rrcurveto + 3 -10 8 -27 25 -23 rrcurveto + closepath + 237 -281 rmoveto + 20 -85 -16 -77 -28 -38 rrcurveto + -23 -30 -31 -14 -27 0 rrcurveto + -21 0 -41 4 -27 47 rrcurveto + -41 71 4 82 5 37 rrcurveto + 11 90 56 44 69 15 rrcurveto + 14 -12 57 -56 19 -78 rrcurveto + closepath + endchar + } |- +/epsilon { + 22 439 hsbw + 275 96 vstem + -1 106 vstem + 30 -50 hstem + 274 -42 hstem + 502 -36 hstem + 379 114 rmoveto + -19 -59 -29 -21 -52 -6 rrcurveto + -30 -4 -87 -3 -43 56 rrcurveto + -16 22 -2 42 9 30 rrcurveto + 13 43 35 26 64 -11 rrcurveto + 23 -4 20 -4 24 12 rrcurveto + 38 19 -22 30 -40 -4 rrcurveto + -54 -5 rlineto + -41 -4 -51 6 -13 67 rrcurveto + -3 16 -4 71 61 28 rrcurveto + 51 23 52 -24 10 -39 rrcurveto + 16 -65 50 12 9 5 rrcurveto + 24 14 12 31 -22 32 rrcurveto + -18 27 -29 11 -20 8 rrcurveto + -27 11 -126 15 -77 -60 rrcurveto + -63 -49 8 -57 11 -28 rrcurveto + 14 -34 22 -14 54 -24 rrcurveto + -26 -8 -59 -15 -21 -68 rrcurveto + -19 -59 31 -56 41 -26 rrcurveto + 50 -31 88 -25 104 30 rrcurveto + 80 23 24 55 1 35 rrcurveto + closepath + endchar + } |- +/phi { + 27 521 hsbw + 25 -37 hstem + 501 -38 hstem + 463 -90 vstem + 93 -92 vstem + 208 501 rmoveto + -35 -3 -74 -13 -50 -83 rrcurveto + -57 -95 1 -88 19 -62 rrcurveto + 42 -135 90 -19 70 -17 rrcurveto + 2 -198 rlineto + 40 -12 rlineto + -1 211 rlineto + 42 9 87 -1 54 123 rrcurveto + 33 76 7 117 -59 87 rrcurveto + -50 75 -56 13 -61 12 rrcurveto + -1 158 rlineto + -45 15 rlineto + closepath + 46 -207 rmoveto + 19 -14 43 -9 37 -87 rrcurveto + 20 -48 22 -131 -43 -79 rrcurveto + -32 -59 -29 -8 -34 -5 rrcurveto + closepath + -42 hmoveto + -25 0 -30 31 -23 36 rrcurveto + -50 78 -5 134 32 77 rrcurveto + 28 68 45 10 23 6 rrcurveto + closepath + endchar + } |- +/gamma { + 5 411 hsbw + 29 callsubr + 28 1 3 callothersubr + pop + callsubr + 375 494 rmoveto + -113 -352 rlineto + -2 hlineto + 29 1 3 callothersubr + pop + callsubr + -13 78 -16 70 -16 70 rrcurveto + -25 101 -30 25 -31 9 rrcurveto + -19 6 -68 9 -25 -68 rrcurveto + -21 -57 5 -37 -1 -31 rrcurveto + 16 hlineto + 3 25 -2 36 32 27 rrcurveto + 42 35 42 -32 11 -13 rrcurveto + 15 -18 21 -55 12 -46 rrcurveto + 18 -67 8 -31 16 -118 rrcurveto + -19 -49 -41 -96 0 -70 rrcurveto + 0 -40 19 -28 28 -2 rrcurveto + 29 -2 20 14 14 47 rrcurveto + 23 77 -28 115 -4 32 rrcurveto + 28 1 3 callothersubr + pop + callsubr + 204 436 rlineto + closepath + endchar + } |- +/eta { + 0 603 hsbw + 33 callsubr + 65 callsubr + 30 1 3 callothersubr + pop + callsubr + 206 366 rmoveto + 17 21 25 46 59 11 rrcurveto + 25 5 32 -9 18 -15 rrcurveto + 19 -16 9 -22 1 -41 rrcurveto + 13 -448 rlineto + 2 -53 8 -23 4 -24 rrcurveto + 31 1 3 callothersubr + pop + callsubr + 89 hlineto + -5 25 -10 25 -1 25 rrcurveto + 32 1 3 callothersubr + pop + callsubr + -11 497 rlineto + -1 58 -19 34 -43 32 rrcurveto + -28 21 -51 3 -31 -8 rrcurveto + 33 1 3 callothersubr + pop + callsubr + -63 -17 -37 -57 -20 -28 rrcurveto + -8 29 -3 36 -36 21 rrcurveto + -51 29 -59 -26 -23 -36 rrcurveto + -28 -44 4 -20 -3 -37 rrcurveto + 18 hlineto + 5 28 0 32 18 20 rrcurveto + 18 20 25 -5 16 -20 rrcurveto + 15 -18 6 -24 0 -49 rrcurveto + -344 vlineto + 85 hlineto + closepath + endchar + } |- +/iota { + 0 329 hsbw + -17 48 hstem + 88 85 vstem + 173 503 rmoveto + -52 -19 -31 -16 -90 -18 rrcurveto + -20 vlineto + 32 56 14 -131 hvcurveto + -238 vlineto + 0 -26 28 -62 66 -4 rrcurveto + 103 -7 11 100 5 25 rrcurveto + -19 hlineto + -5 -14 -1 -44 -34 -9 rrcurveto + -24 -7 -10 4 -17 23 rrcurveto + -19 25 1 29 0 27 rrcurveto + closepath + endchar + } |- +/phi1 { + 36 603 hsbw + 462 88 vstem + 0 104 vstem + 248 62 vstem + 24 -36 hstem + 500 -78 hstem + 212 492 rmoveto + -28 0 -37 -7 -32 -20 rrcurveto + -47 -30 -33 -31 -20 -57 rrcurveto + -18 -51 -3 -54 19 -67 rrcurveto + 45 -161 133 -16 57 -11 rrcurveto + -211 vlineto + 63 hlineto + 212 vlineto + 79 -5 75 65 27 32 rrcurveto + 33 39 26 68 0 62 rrcurveto + 0 49 -12 62 -40 57 rrcurveto + -21 30 -37 33 -31 11 rrcurveto + -27 10 -58 9 -43 -43 rrcurveto + -38 -38 -7 -64 1 -20 rrcurveto + 10 -319 rlineto + -10 2 -54 0 -45 77 rrcurveto + -24 42 -20 93 16 95 rrcurveto + 18 108 71 24 12 7 rrcurveto + closepath + 87 -177 rmoveto + -3 61 15 37 6 10 rrcurveto + 10 15 25 10 24 -11 rrcurveto + 17 -8 33 -35 13 -28 rrcurveto + 34 -73 -6 -86 -4 -17 rrcurveto + -13 -58 -15 -15 -14 -18 rrcurveto + -43 -53 -57 -3 -10 -2 rrcurveto + closepath + endchar + } |- +/kappa { + 33 549 hsbw + 86 75 vstem + 0 18 hstem + 481 18 hstem + 434 vmoveto + 35 -1 51 4 0 -86 rrcurveto + -351 vlineto + 75 hlineto + 258 vlineto + 165 -203 rlineto + 18 -23 -7 -14 -47 0 rrcurveto + -18 vlineto + 235 hlineto + 18 vlineto + -59 0 -16 26 -31 37 rrcurveto + -178 224 rlineto + 51 51 31 34 32 21 rrcurveto + 42 28 4 -10 33 -24 rrcurveto + 9 -7 29 -13 31 20 rrcurveto + 16 10 20 42 -34 26 rrcurveto + -36 28 -63 -10 -32 -27 rrcurveto + -75 -56 -70 -66 -68 -68 rrcurveto + 217 vlineto + -90 -38 -29 1 -42 -9 rrcurveto + closepath + endchar + } |- +/lambda { + 24 549 hsbw + 64 callsubr + 44 570 rmoveto + 10 30 -1 32 41 22 rrcurveto + 36 19 28 -13 18 -15 rrcurveto + 24 -19 16 -60 15 -68 rrcurveto + 34 1 3 callothersubr + pop + callsubr + -231 -498 rlineto + 92 hlineto + 171 365 rlineto + 2 hlineto + 35 1 3 callothersubr + pop + callsubr + 13 -115 35 -157 17 -41 rrcurveto + 16 -36 34 -31 37 -2 rrcurveto + 31 -2 33 21 19 34 rrcurveto + 22 39 -1 41 3 37 rrcurveto + -19 hlineto + -5 -15 -2 -46 -39 -16 rrcurveto + -24 -10 -23 6 -20 15 rrcurveto + -17 12 -16 27 -9 31 rrcurveto + -37 128 -19 199 -69 179 rrcurveto + -27 69 -104 51 -43 -98 rrcurveto + -18 -42 -6 -48 -2 -25 rrcurveto + closepath + endchar + } |- +/mu { + 33 576 hsbw + -17 49 hstem + 500 -20 hstem + 28 86 vstem + 321 86 vstem + 28 500 rmoveto + -492 vlineto + 0 -59 -16 -18 -10 -56 rrcurveto + -11 -66 30 -32 27 0 rrcurveto + 27 0 30 32 -11 66 rrcurveto + -10 56 -17 18 -3 59 rrcurveto + 23 vlineto + 14 -10 33 -38 47 0 rrcurveto + 36 0 35 12 23 17 rrcurveto + 47 34 14 22 9 13 rrcurveto + 7 -32 -1 -25 35 -26 rrcurveto + 14 -11 41 -16 48 26 rrcurveto + 52 28 8 42 8 34 rrcurveto + -20 hlineto + -7 -17 3 -30 -27 -16 rrcurveto + -20 -11 -17 3 -16 16 rrcurveto + -15 15 -8 29 0 26 rrcurveto + 384 vlineto + -86 hlineto + 36 1 3 callothersubr + pop + callsubr + -372 vlineto + -14 -32 -36 -25 -23 -11 rrcurveto + -27 -12 -25 0 -30 13 rrcurveto + -40 18 -12 41 0 47 rrcurveto + 333 vlineto + closepath + endchar + } |- +/nu { + -9 521 hsbw + 500 -18 hstem + 377 106 vstem + 2 -18 hstem + 239 40 vstem + 131 507 rmoveto + -58 -25 -3 1 -70 -7 rrcurveto + -19 vlineto + 41 -5 15 6 14 -36 rrcurveto + 171 -438 rlineto + 37 hlineto + 19 60 90 160 54 110 rrcurveto + 21 42 13 46 6 19 rrcurveto + 5 16 1 30 -25 21 rrcurveto + -19 16 -39 7 -22 -42 rrcurveto + -6 -13 -2 -10 11 -47 rrcurveto + 15 -64 -3 -24 -29 -56 rrcurveto + -79 -152 rlineto + closepath + endchar + } |- +/omicron { + 35 549 hsbw + 368 98 vstem + 1 95 vstem + -17 40 hstem + 469 29 hstem + 123 8 rmoveto + 92 -46 101 15 63 62 rrcurveto + 123 116 -7 209 -136 92 rrcurveto + -110 76 -120 -34 -63 -74 rrcurveto + -100 -118 9 -197 148 -101 rrcurveto + closepath + 15 85 rmoveto + -49 89 -7 134 36 83 rrcurveto + 27 64 94 45 77 -89 rrcurveto + 73 -94 -11 -187 -41 -63 rrcurveto + -59 -90 -100 37 -40 71 rrcurveto + closepath + endchar + } |- +/pi { + 10 549 hsbw + 46 116 vstem + 496 24 vstem + 88 -104 hstem + 304 70 vstem + 488 -86 hstem + 325 401 rmoveto + -17 -161 rlineto + -5 -52 -1 -80 13 -39 rrcurveto + 12 -36 21 -26 16 -12 rrcurveto + 27 -19 37 9 20 12 rrcurveto + 27 15 43 48 2 91 rrcurveto + -21 hlineto + -3 -15 2 -28 -25 -19 rrcurveto + -32 -25 -29 17 -13 12 rrcurveto + -15 14 -10 31 0 28 rrcurveto + 0 38 0 80 12 117 rrcurveto + 126 hlineto + 86 vlineto + -373 hlineto + -46 0 -31 -28 -17 -24 rrcurveto + -30 -42 -10 -41 -5 -14 rrcurveto + 17 hlineto + 21 31 rlineto + 11 16 27 16 28 0 rrcurveto + 47 hlineto + -29 -229 rlineto + -5 -42 -29 -23 -16 -21 rrcurveto + -12 -16 -19 -16 8 -34 rrcurveto + 5 -23 30 -22 27 7 rrcurveto + 32 8 15 22 8 38 rrcurveto + 12 54 18 110 16 187 rrcurveto + closepath + endchar + } |- +/theta { + 43 521 hsbw + 341 100 vstem + 1 98 vstem + 22 -38 hstem + 368 -52 hstem + 690 -34 hstem + 221 690 rmoveto + -76 0 -55 -63 -22 -29 rrcurveto + -33 -46 -16 -38 -10 -53 rrcurveto + -18 -91 12 -109 7 -44 rrcurveto + 6 -34 13 -67 42 -51 rrcurveto + 56 -70 60 -12 34 0 rrcurveto + 34 0 60 12 56 70 rrcurveto + 42 51 13 67 6 34 rrcurveto + 7 44 12 109 -18 91 rrcurveto + -10 53 -16 38 -33 46 rrcurveto + -22 29 -55 63 -76 0 rrcurveto + closepath + -121 -322 rmoveto + 6 95 rlineto + 3 45 18 62 19 32 rrcurveto + 7 12 34 42 34 0 rrcurveto + 34 0 34 -42 7 -12 rrcurveto + 19 -32 18 -62 3 -45 rrcurveto + 6 -95 rlineto + closepath + -1 -52 rmoveto + -6 -104 rlineto + -1 -25 -11 -73 -37 -50 rrcurveto + -18 -25 -23 -18 -24 0 rrcurveto + -24 0 -23 18 -18 25 rrcurveto + -37 50 -11 73 -1 25 rrcurveto + -6 104 rlineto + closepath + endchar + } |- +/rho { + 50 549 hsbw + -212 -18 hstem + 6 84 vstem + 26 -44 hstem + 348 92 vstem + 500 -64 hstem + 97 40 rmoveto + 9 -14 20 -25 51 -14 rrcurveto + 37 -10 33 3 42 17 rrcurveto + 32 13 48 35 32 59 rrcurveto + 31 58 10 66 -2 35 rrcurveto + -3 54 -6 48 -43 55 rrcurveto + -21 27 -44 39 -60 9 rrcurveto + -71 11 -31 -15 -28 -16 rrcurveto + -105 -58 -22 -76 1 -61 rrcurveto + 5 -423 rlineto + 0 -30 -9 -31 -3 -26 rrcurveto + 87 hlineto + 10 40 0 35 0 40 rrcurveto + closepath + -9 451 rmoveto + -1 40 13 27 26 24 rrcurveto + 16 14 23 7 29 -6 rrcurveto + 64 -12 41 -49 20 -39 rrcurveto + 25 -48 12 -55 -7 -61 rrcurveto + -5 -45 -17 -41 -23 -25 rrcurveto + -20 -23 -23 -13 -38 -5 rrcurveto + -85 -12 -44 80 0 21 rrcurveto + closepath + endchar + } |- +/sigma { + 30 603 hsbw + -21 40 hstem + 414 86 hstem + 0 104 vstem + 400 102 vstem + 558 500 rmoveto + -259 hlineto + -54 0 -53 -14 -38 -17 rrcurveto + -23 -10 -62 -31 -29 -46 rrcurveto + -23 -37 -27 -42 14 -91 rrcurveto + 8 -50 38 -98 90 -54 rrcurveto + 75 -46 69 17 34 5 rrcurveto + 112 18 50 94 11 35 rrcurveto + 18 54 -5 45 -16 36 rrcurveto + -21 49 -72 78 -54 17 rrcurveto + 2 vlineto + 217 hlineto + closepath + -175 -121 rmoveto + 20 -47 4 -75 -19 -56 rrcurveto + -10 -29 -24 -47 -43 -13 rrcurveto + -65 -18 -30 22 -26 20 rrcurveto + -39 31 -40 62 -7 89 rrcurveto + -2 23 1 75 48 44 rrcurveto + 50 45 57 -5 30 0 rrcurveto + 52 -45 24 -30 19 -46 rrcurveto + closepath + endchar + } |- +/tau { + 10 439 hsbw + 2 18 vstem + 80 -98 hstem + 360 20 vstem + 172 66 vstem + 500 -92 hstem + 173 500 rmoveto + -37 0 -43 -16 -25 -28 rrcurveto + -32 -36 -15 -31 -21 -78 rrcurveto + 18 hlineto + 13 36 33 60 38 0 rrcurveto + 91 hlineto + -6 -53 -18 -125 3 -99 rrcurveto + 3 -86 33 -37 17 -12 rrcurveto + 39 -26 38 17 15 9 rrcurveto + 61 37 1 63 1 57 rrcurveto + -18 hlineto + -9 -39 -2 -30 -38 -8 rrcurveto + -32 -6 -13 20 -11 14 rrcurveto + -13 17 -9 28 3 40 rrcurveto + 16 220 rlineto + 154 hlineto + 92 vlineto + closepath + endchar + } |- +/upsilon { + 7 576 hsbw + 445 84 vstem + 133 84 vstem + 24 -42 hstem + 504 -104 hstem + 22 356 rmoveto + 14 29 5 18 16 11 rrcurveto + 31 22 24 -12 8 -19 rrcurveto + 15 -37 -2 -113 1 -75 rrcurveto + 1 -58 13 -39 21 -30 rrcurveto + 6 -9 17 -36 50 -17 rrcurveto + 43 -15 53 4 45 16 rrcurveto + 42 15 43 28 30 63 rrcurveto + 24 50 13 72 -10 66 rrcurveto + -12 83 -39 82 -136 52 rrcurveto + -6 -17 rlineto + 31 -19 60 -31 18 -103 rrcurveto + 15 -85 -14 -81 -18 -49 rrcurveto + -16 -44 -17 -27 -29 -16 rrcurveto + -57 -30 -28 32 -17 19 rrcurveto + -14 15 -26 38 0 63 rrcurveto + 0 60 -7 138 -12 72 rrcurveto + -4 25 -32 32 -38 4 rrcurveto + -27 3 -40 -14 -18 -28 rrcurveto + -22 -34 -11 -45 -9 -29 rrcurveto + closepath + endchar + } |- +/omega1 { + 12 713 hsbw + 561 95 vstem + 293 98 vstem + 23 106 vstem + -18 44 hstem + 490 88 hstem + 658 583 rmoveto + -520 -8 rlineto + -32 0 -68 -37 -38 -102 rrcurveto + 16 1 rlineto + 59 44 4 -1 89 7 rrcurveto + -73 -49 -25 -17 -26 -70 rrcurveto + -26 -69 -4 -97 29 -80 rrcurveto + 10 -29 32 -52 42 -22 rrcurveto + 64 -33 46 14 32 17 rrcurveto + 41 22 18 34 16 23 rrcurveto + 22 -38 3 -18 44 -24 rrcurveto + 51 -28 59 13 40 24 rrcurveto + 56 34 11 43 11 30 rrcurveto + 22 59 6 126 -58 91 rrcurveto + -43 68 -48 15 -41 16 rrcurveto + 180 5 rlineto + closepath + -253 -5 rmoveto + 73 -42 23 -8 36 -87 rrcurveto + 33 -79 -10 -91 -5 -33 rrcurveto + -6 -44 -20 -43 -15 -15 rrcurveto + -13 -12 -34 -22 -45 22 rrcurveto + -42 21 -12 64 -3 31 rrcurveto + 22 101 10 42 -11 59 rrcurveto + -6 29 -14 28 -24 -2 rrcurveto + -16 -1 -25 -27 -4 -31 rrcurveto + -10 -72 2 -58 29 -73 rrcurveto + -7 -32 0 -49 -48 -28 rrcurveto + -16 -10 -41 -21 -35 40 rrcurveto + -17 20 -14 25 -8 57 rrcurveto + -13 93 17 100 24 45 rrcurveto + 39 71 29 3 53 28 rrcurveto + closepath + endchar + } |- +/omega { + 42 686 hsbw + 538 101 vstem + 269 104 vstem + 3 101 vstem + -17 50 hstem + 482 18 hstem + 255 500 rmoveto + -35 -2 -59 7 -53 -40 rrcurveto + -63 -48 -34 -64 -8 -87 rrcurveto + -7 -72 7 -45 22 -53 rrcurveto + 18 -43 38 -41 34 -15 rrcurveto + 28 -13 51 -13 49 29 rrcurveto + 35 20 16 15 27 47 rrcurveto + 27 -47 16 -15 35 -20 rrcurveto + 49 -29 51 13 28 13 rrcurveto + 34 15 38 41 18 43 rrcurveto + 22 53 7 45 -7 72 rrcurveto + -8 87 -34 64 -63 48 rrcurveto + -53 40 -59 -7 -35 2 rrcurveto + -17 vlineto + 64 -24 24 -18 21 -35 rrcurveto + 53 -87 -6 -115 -12 -67 rrcurveto + -10 -52 -12 -21 -18 -17 rrcurveto + -20 -19 -22 -5 -28 8 rrcurveto + -66 19 -5 82 -5 19 rrcurveto + 18 52 20 63 -14 80 rrcurveto + -8 44 -14 23 -26 0 rrcurveto + -26 0 -14 -23 -8 -44 rrcurveto + -14 -80 20 -63 18 -52 rrcurveto + -5 -19 -5 -82 -66 -19 rrcurveto + -28 -8 -22 5 -20 19 rrcurveto + -18 17 -12 21 -10 52 rrcurveto + -12 67 -6 115 53 87 rrcurveto + 21 35 24 18 64 24 rrcurveto + closepath + endchar + } |- +/xi { + 27 493 hsbw + 393 44 vstem + 73 34 vstem + 1 46 vstem + -134 -90 hstem + 92 -96 hstem + 482 -86 hstem + 766 -22 hstem + 144 764 rmoveto + -32 8 -40 -22 -15 -16 rrcurveto + -23 -25 1 -27 11 -21 rrcurveto + 16 -31 27 -4 21 -8 rrcurveto + -23 -22 -10 -18 -3 -35 rrcurveto + -4 -41 4 -23 52 -59 rrcurveto + -70 -57 -9 -11 -19 -43 rrcurveto + -25 -56 -9 -46 11 -56 rrcurveto + 8 -39 29 -55 28 -21 rrcurveto + 35 -27 44 -15 58 0 rrcurveto + 30 0 40 0 34 2 rrcurveto + 28 2 49 -4 5 -58 rrcurveto + 5 -56 -42 -22 -37 4 rrcurveto + -66 8 rlineto + -16 2 -15 0 -13 -16 rrcurveto + -13 -15 1 -29 22 -18 rrcurveto + 26 -21 51 -1 24 8 rrcurveto + 55 19 20 35 7 9 rrcurveto + 36 49 3 49 1 14 rrcurveto + 4 49 -24 42 -29 22 rrcurveto + -26 20 -32 3 -43 1 rrcurveto + -115 4 rlineto + -47 1 -50 18 -23 58 rrcurveto + -19 47 11 29 2 10 rrcurveto + 20 93 73 36 30 18 rrcurveto + 15 -3 33 -15 76 8 rrcurveto + 33 4 36 13 10 18 rrcurveto + 9 16 -2 17 -19 10 rrcurveto + -18 10 -45 1 -29 -5 rrcurveto + -38 -6 -38 -18 -34 -16 rrcurveto + -38 30 -20 19 3 36 rrcurveto + 4 50 37 27 17 12 rrcurveto + 42 4 18 -3 49 23 rrcurveto + 36 17 14 20 4 12 rrcurveto + 8 24 -10 18 -27 3 rrcurveto + -33 3 -32 -12 -40 -31 rrcurveto + -51 -40 rlineto + -23 2 -24 12 -5 20 rrcurveto + -12 43 53 13 13 6 rrcurveto + closepath + endchar + } |- +/psi { + 12 686 hsbw + 4 -21 hstem + 38 callsubr + 376 -228 rmoveto + 211 vlineto + 53 11 66 24 47 63 rrcurveto + 37 1 3 callothersubr + pop + callsubr + 31 42 24 41 12 237 rrcurveto + 3 55 31 4 46 10 rrcurveto + 38 1 3 callothersubr + pop + callsubr + 18 vlineto + -22 12 -34 0 -12 0 rrcurveto + -64 0 -31 -51 -11 -26 rrcurveto + -17 -40 -14 -175 -8 -70 rrcurveto + -8 -76 -52 -30 -40 -10 rrcurveto + 39 1 3 callothersubr + pop + callsubr + 465 vlineto + -63 hlineto + -465 vlineto + -40 10 -52 30 -8 76 rrcurveto + 40 1 3 callothersubr + pop + callsubr + -7 70 -15 175 -17 40 rrcurveto + -11 26 -31 51 -64 0 rrcurveto + -12 0 -34 0 -22 -12 rrcurveto + 41 1 3 callothersubr + pop + callsubr + -18 vlineto + 46 -10 31 -4 3 -55 rrcurveto + 12 -237 24 -41 31 -42 rrcurveto + 47 -63 66 -24 53 -11 rrcurveto + -211 vlineto + closepath + endchar + } |- +/zeta { + 60 494 hsbw + 756 -20 hstem + 96 -106 hstem + -128 -96 hstem + 362 44 vstem + 0 48 vstem + 152 756 rmoveto + -22 -2 -33 -3 -31 -32 rrcurveto + -38 -39 6 -59 55 -19 rrcurveto + 44 -15 rlineto + -35 -47 -33 -50 -15 -37 rrcurveto + -47 -117 -1 -42 -2 -69 rrcurveto + -1 -32 8 -58 16 -40 rrcurveto + 24 -59 74 -38 35 -6 rrcurveto + 44 -8 42 9 42 3 rrcurveto + 45 3 35 -23 1 -41 rrcurveto + 0 -12 -3 -42 -37 -18 rrcurveto + -30 -15 -18 16 -49 9 rrcurveto + -54 9 -17 -32 0 -23 rrcurveto + 0 -19 22 -19 15 -6 rrcurveto + 25 -10 42 -2 41 14 rrcurveto + 64 21 47 76 -6 82 rrcurveto + -3 46 -15 25 -30 27 rrcurveto + -16 14 -45 24 -82 -4 rrcurveto + -46 -2 rlineto + -26 -1 -39 10 -32 45 rrcurveto + -26 36 2 36 -1 15 rrcurveto + -5 101 36 86 21 38 rrcurveto + 24 44 38 56 32 26 rrcurveto + 44 5 18 4 35 17 rrcurveto + 48 23 12 19 8 10 rrcurveto + 26 34 -16 20 -10 6 rrcurveto + -18 11 -22 -4 -27 -14 rrcurveto + -72 -38 -17 -26 -45 -39 rrcurveto + -20 6 -25 7 -9 31 rrcurveto + -16 51 53 23 13 6 rrcurveto + closepath + endchar + } |- +/braceleft { + 58 480 hsbw + 128 75 vstem + -183 25 hstem + 231 28 hstem + 648 25 hstem + 232 vmoveto + 57 -12 71 0 0 -100 rrcurveto + -201 vlineto + -102 50 0 60 vhcurveto + 101 hlineto + 25 vlineto + -49 hlineto + -50 -37 13 64 hvcurveto + 201 vlineto + 0 100 -115 13 -32 9 rrcurveto + 32 15 115 13 0 100 rrcurveto + 201 vlineto + 64 37 13 50 vhcurveto + 49 hlineto + 25 vlineto + -101 hlineto + -60 -50 0 -102 hvcurveto + -201 vlineto + 0 -100 -71 0 -57 -12 rrcurveto + closepath + endchar + } |- +/bar { + 65 200 hsbw + 0 70 vstem + 673 vmoveto + -850 vlineto + 70 hlineto + 850 vlineto + closepath + endchar + } |- +/braceright { + 79 480 hsbw + 136 75 vstem + -183 25 hstem + 231 28 hstem + 648 25 hstem + 339 258 rmoveto + -57 12 -71 0 0 100 rrcurveto + 201 vlineto + 102 -50 0 -60 vhcurveto + -101 hlineto + -25 vlineto + 49 hlineto + 50 37 -13 -64 hvcurveto + -201 vlineto + 0 -100 115 -13 32 -15 rrcurveto + -32 -9 -115 -13 0 -100 rrcurveto + -201 vlineto + -64 -37 -13 -50 vhcurveto + -49 hlineto + -25 vlineto + 101 hlineto + 60 50 0 102 hvcurveto + 201 vlineto + 0 100 71 0 57 12 rrcurveto + closepath + endchar + } |- +/similar { + 17 549 hsbw + 458 46 vstem + 7 55 vstem + 234 49 hstem + 475 307 rmoveto + 62 callsubr + 41 -25 rlineto + 43 48 31 31 134 -47 rrcurveto + 88 -31 55 -9 57 27 rrcurveto + 44 21 12 31 7 9 rrcurveto + closepath + endchar + } |- +/Upsilon1 { + -2 620 hsbw + 242 104 vstem + 686 -48 hstem + 18 -18 hstem + 346 306 rmoveto + 0 36 1 76 12 52 rrcurveto + 8 34 16 67 46 41 rrcurveto + 30 28 25 10 33 -10 rrcurveto + 19 -6 10 -14 -28 -27 rrcurveto + -14 -13 -19 -31 30 -33 rrcurveto + 28 -31 39 23 15 23 rrcurveto + 12 18 18 56 -36 41 rrcurveto + -43 49 -33 -8 -31 -7 rrcurveto + -39 -9 -27 -23 -17 -21 rrcurveto + -61 -77 -4 -51 -16 -61 rrcurveto + -16 55 -19 74 -43 40 rrcurveto + -59 55 -73 28 -88 -9 rrcurveto + -21 -2 -10 -16 20 -7 rrcurveto + 96 -31 rlineto + 13 -4 52 -22 33 -71 rrcurveto + 26 -55 11 -106 0 -54 rrcurveto + 1 -231 rlineto + 45 callsubr + closepath + endchar + } |- +/minute { + 27 247 hsbw + 589 145 hstem + 90 111 vstem + 198 669 rmoveto + 13 16 -27 35 -10 6 rrcurveto + -14 9 -43 6 -8 -17 rrcurveto + -108 -240 rlineto + -8 -18 31 -17 13 16 rrcurveto + closepath + endchar + } |- +/lessequal { + 29 549 hsbw + 0 55 hstem + 346 64 hstem + 0 64 vstem + 0 hmoveto + 497 hlineto + 55 vlineto + -497 hlineto + closepath + 292 vmoveto + 58 callsubr + } |- +/fraction { + -180 167 hsbw + 252 56 vstem + 659 18 hstem + -12 18 hstem + 464 677 rmoveto + -464 -689 rlineto + 56 hlineto + 464 689 rlineto + closepath + endchar + } |- +/infinity { + 26 713 hsbw + 295 72 vstem + 230 68 hstem + 609 53 vstem + 0 51 vstem + 125 50 hstem + 351 53 hstem + 331 297 rmoveto + -61 55 -21 18 -47 21 rrcurveto + -97 43 -96 -67 -9 -88 rrcurveto + -8 -74 63 -89 92 9 rrcurveto + 103 10 57 75 24 21 rrcurveto + 24 -21 57 -75 103 -10 rrcurveto + 92 -9 63 89 -8 74 rrcurveto + -9 88 -96 67 -97 -43 rrcurveto + -47 -21 -21 -18 -61 -55 rrcurveto + closepath + -33 -33 rmoveto + -59 -57 -17 -19 -56 -13 rrcurveto + -55 -13 -59 38 -2 59 rrcurveto + -1 44 44 72 86 -30 rrcurveto + 34 -12 28 -21 57 -48 rrcurveto + closepath + 66 hmoveto + 57 48 28 21 34 12 rrcurveto + 86 30 44 -72 -1 -44 rrcurveto + -2 -59 -59 -38 -55 13 rrcurveto + -56 13 -17 19 -59 57 rrcurveto + closepath + endchar + } |- +/florin { + 2 500 hsbw + 214 83 vstem + -192 25 hstem + 384 33 hstem + 659 25 hstem + 99 384 rmoveto + 117 hlineto + -24 -231 rlineto + -6 -58 -2 -59 -12 -57 rrcurveto + -6 -27 -5 -26 -6 -27 rrcurveto + -5 -23 -21 -33 -28 -8 rrcurveto + -35 -9 3 16 7 16 rrcurveto + 18 42 -14 15 -21 7 rrcurveto + -23 8 -33 -10 -3 -41 rrcurveto + -2 -31 15 -15 17 -11 rrcurveto + 30 -21 13 6 17 1 rrcurveto + 46 4 16 18 20 21 rrcurveto + 32 33 26 75 6 28 rrcurveto + 12 57 16 56 7 57 rrcurveto + 29 227 rlineto + 122 hlineto + 10 33 rlineto + -128 hlineto + 16 120 rlineto + 3 25 8 26 9 24 rrcurveto + 8 19 21 27 24 2 rrcurveto + 31 2 0 -13 -10 -21 rrcurveto + -5 -11 -9 -6 20 -25 rrcurveto + 14 -17 26 5 15 12 rrcurveto + 23 19 -5 20 -5 15 rrcurveto + -10 29 -30 14 -24 3 rrcurveto + -29 3 -38 -13 -14 -9 rrcurveto + -29 -19 -34 -37 -21 -55 rrcurveto + -22 -57 -8 -41 -5 -41 rrcurveto + -112 hlineto + closepath + endchar + } |- +/club { + 86 753 hsbw + 534 -18 hstem + -8 -18 hstem + 312 -252 hstem + 0 574 vstem + 351 -26 rmoveto + -25 38 -14 15 0 66 rrcurveto + 0 53 10 22 55 -66 rrcurveto + 44 -52 87 -7 40 51 rrcurveto + 23 29 17 57 -29 74 rrcurveto + -17 44 -46 13 -32 0 rrcurveto + -44 0 -39 -30 -15 -8 rrcurveto + -48 -25 -2 36 15 16 rrcurveto + 17 18 34 2 26 63 rrcurveto + 21 50 -25 55 -36 23 rrcurveto + -22 14 -27 8 -32 0 rrcurveto + -32 0 -27 -8 -22 -14 rrcurveto + -36 -23 -25 -55 21 -50 rrcurveto + 26 -63 34 -2 17 -18 rrcurveto + 15 -16 -2 -36 -48 25 rrcurveto + -15 8 -39 30 -44 0 rrcurveto + -32 0 -46 -13 -17 -44 rrcurveto + -29 -74 17 -57 23 -29 rrcurveto + 40 -51 87 7 45 52 rrcurveto + 56 64 8 -20 0 -53 rrcurveto + 0 -66 -14 -15 -25 -38 rrcurveto + closepath + endchar + } |- +/diamond { + 142 753 hsbw + 2 454 vstem + -36 586 hstem + 232 550 rmoveto + -232 -293 rlineto + 232 -293 rlineto + 226 293 rlineto + closepath + endchar + } |- +/heart { + 117 753 hsbw + 404 -432 hstem + 1 510 vstem + 257 403 rmoveto + -15 0 -3 22 -8 19 rrcurveto + -25 67 -46 20 -46 1 rrcurveto + -42 1 -72 -27 0 -116 rrcurveto + 0 -57 32 -63 41 -53 rrcurveto + 91 -117 15 -18 78 -115 rrcurveto + 78 115 15 18 91 117 rrcurveto + 41 53 32 63 0 57 rrcurveto + 0 116 -72 27 -42 -1 rrcurveto + -46 -1 -46 -20 -25 -67 rrcurveto + -8 -19 -3 -22 -15 0 rrcurveto + closepath + endchar + } |- +/spade { + 113 753 hsbw + -36 584 hstem + 231 54 vstem + 324 -36 rmoveto + -7 10 -31 33 -1 67 rrcurveto + -1 61 31 14 16 -40 rrcurveto + 24 -59 26 -36 57 9 rrcurveto + 53 9 31 63 -7 54 rrcurveto + -8 60 -16 16 -40 52 rrcurveto + -94 124 -28 35 -71 112 rrcurveto + -71 -112 -28 -35 -94 -124 rrcurveto + -40 -52 -16 -16 -8 -60 rrcurveto + -7 -54 31 -63 53 -9 rrcurveto + 57 -9 26 36 24 59 rrcurveto + 16 40 31 -14 -1 -61 rrcurveto + -1 -67 -31 -33 -7 -10 rrcurveto + closepath + endchar + } |- +/arrowboth { + 24 1042 hsbw + 0 1000 vstem + 222 52 hstem + 115 274 rmoveto + 85 89 18 21 68 95 rrcurveto + -37 32 rlineto + -79 -94 -55 -67 -115 -102 rrcurveto + 115 -102 55 -67 79 -94 rrcurveto + 37 32 rlineto + -68 95 -18 21 -85 89 rrcurveto + 770 hlineto + -85 -89 -18 -21 -68 -95 rrcurveto + 37 -32 rlineto + 79 94 55 67 115 102 rrcurveto + -115 102 -55 67 -79 94 rrcurveto + -37 -32 rlineto + 68 -95 18 -21 85 -89 rrcurveto + closepath + endchar + } |- +/arrowleft { + 32 987 hsbw + 4 906 vstem + 220 56 hstem + 910 276 rmoveto + -795 hlineto + 39 38 84 102 48 60 rrcurveto + -35 35 rlineto + -87 -103 -70 -70 -94 -90 rrcurveto + 94 -90 70 -70 87 -103 rrcurveto + 35 35 rlineto + -48 60 -84 102 -39 38 rrcurveto + 795 hlineto + closepath + endchar + } |- +/arrowup { + 45 603 hsbw + 0 908 hstem + 235 56 vstem + 291 hmoveto + 795 vlineto + 38 -39 102 -84 60 -48 rrcurveto + 35 35 rlineto + -103 87 -70 70 -90 94 rrcurveto + -90 -94 -70 -70 -103 -87 rrcurveto + 35 -35 rlineto + 60 48 102 84 38 39 rrcurveto + -795 vlineto + closepath + endchar + } |- +/arrowright { + 49 987 hsbw + 908 -908 vstem + 276 -56 hstem + 220 vmoveto + 795 hlineto + -39 -38 -84 -102 -48 -60 rrcurveto + 35 -35 rlineto + 87 103 70 70 94 90 rrcurveto + -94 90 -70 70 -87 103 rrcurveto + -35 -35 rlineto + 48 -60 84 -102 39 -38 rrcurveto + -795 hlineto + closepath + endchar + } |- +/arrowdown { + 45 603 hsbw + 888 -908 hstem + 291 -56 vstem + 235 888 rmoveto + -795 vlineto + -38 39 -102 84 -60 48 rrcurveto + -35 -35 rlineto + 103 -87 70 -70 90 -94 rrcurveto + 90 94 70 70 103 87 rrcurveto + -35 35 rlineto + -60 -48 -102 -84 -38 -39 rrcurveto + 795 vlineto + closepath + endchar + } |- +/degree { + 50 400 hsbw + 260 40 vstem + 0 40 vstem + 426 -40 hstem + 686 -40 hstem + 300 535 rmoveto + 82 -68 68 -82 vhcurveto + -83 0 -68 -68 1 -82 rrcurveto + -83 67 -67 83 vhcurveto + 82 68 67 83 hvcurveto + closepath + -40 hmoveto + -61 -50 -49 -60 vhcurveto + -61 -49 49 61 hvcurveto + -1 60 50 50 60 0 rrcurveto + 61 50 -50 -60 hvcurveto + closepath + endchar + } |- +/plusminus { + 10 549 hsbw + 56 -56 hstem + 236 56 vstem + 408 -54 hstem + 408 vmoveto + -55 vlineto + 237 hlineto + -237 vlineto + 55 hlineto + 237 vlineto + 237 hlineto + 55 vlineto + -237 hlineto + 237 vlineto + -55 hlineto + -237 vlineto + closepath + 292 -408 rmoveto + 55 vlineto + -529 hlineto + -55 vlineto + closepath + endchar + } |- +/second { + 20 411 hsbw + 478 -18 hstem + 734 -128 hstem + 92 108 vstem + 280 112 vstem + 188 656 rmoveto + 29 36 -27 24 -16 10 rrcurveto + -14 9 -43 6 -17 -38 rrcurveto + -99 -219 rlineto + -8 -18 31 -17 13 16 rrcurveto + closepath + 347 201 rmoveto + 21 26 -18 22 -22 15 rrcurveto + -13 9 -43 9 -16 -36 rrcurveto + -100 -225 rlineto + -10 -23 30 -10 11 13 rrcurveto + closepath + endchar + } |- +/greaterequal { + 29 549 hsbw + 0 55 hstem + 429 68 vstem + 346 64 hstem + 497 55 rmoveto + -497 hlineto + -55 vlineto + 497 hlineto + closepath + 409 vmoveto + 59 callsubr + } |- +/multiply { + 17 549 hsbw + 220 76 vstem + 229 74 hstem + 516 487 rmoveto + -37 37 rlineto + -221 -222 rlineto + -221 222 rlineto + -37 -37 rlineto + 220 -221 rlineto + -220 -221 rlineto + 37 -37 rlineto + 221 222 rlineto + 221 -222 rlineto + 37 37 rlineto + -220 221 rlineto + closepath + endchar + } |- +/proportional { + 27 713 hsbw + 294 70 vstem + 229 72 hstem + 0 50 vstem + 126 49 hstem + 351 50 hstem + 607 372 rmoveto + -18 12 -47 38 -78 -28 rrcurveto + -43 -16 -28 -23 -64 -56 rrcurveto + -70 61 -12 13 -45 17 rrcurveto + -123 46 -72 -92 -7 -70 rrcurveto + -9 -95 95 -87 116 45 rrcurveto + 33 13 57 38 36 44 rrcurveto + 39 -37 9 -13 53 -32 rrcurveto + 78 -46 69 20 36 35 rrcurveto + -32 34 rlineto + -21 -11 -29 -33 -82 45 rrcurveto + -32 18 -44 35 -9 16 rrcurveto + 41 38 23 29 46 16 rrcurveto + 49 17 24 -11 33 -18 rrcurveto + closepath + -390 7 rmoveto + 50 -20 43 -45 14 -12 rrcurveto + -12 -11 -49 -52 -55 -19 rrcurveto + -90 -31 -45 70 4 50 rrcurveto + 3 31 36 80 101 -41 rrcurveto + closepath + endchar + } |- +/partialdiff { + 26 494 hsbw + 356 80 vstem + 0 86 vstem + 12 -32 hstem + 402 -46 hstem + 746 -46 hstem + 78 667 rmoveto + 59 25 7 12 71 -6 rrcurveto + 62 -5 38 -56 12 -28 rrcurveto + 13 -32 20 -78 -1 -49 rrcurveto + -1 -38 -2 -36 -8 -42 rrcurveto + -67 52 -24 14 -59 2 rrcurveto + -64 2 -43 -30 -35 -43 rrcurveto + -24 -29 -38 -65 7 -81 rrcurveto + 6 -75 40 -44 38 -26 rrcurveto + 51 -35 75 -11 69 38 rrcurveto + 56 31 21 39 27 58 rrcurveto + 40 86 12 135 0 41 rrcurveto + 0 25 -3 108 -45 80 rrcurveto + -48 84 -59 35 -61 15 rrcurveto + -67 16 -75 -22 -39 -17 rrcurveto + closepath + 301 -418 rmoveto + -8 -65 -12 -64 -24 -59 rrcurveto + -20 -47 -24 -30 -37 -16 rrcurveto + -29 -13 -26 0 -28 18 rrcurveto + -45 30 -1 66 0 29 rrcurveto + 0 51 10 55 40 55 rrcurveto + 26 35 33 18 37 1 rrcurveto + 61 1 26 -42 21 -23 rrcurveto + closepath + endchar + } |- +/bullet { + 50 460 hsbw + 0 360 vstem + 113 360 hstem + 360 293 rmoveto + 99 -81 81 -99 vhcurveto + -100 0 -81 -81 1 -99 rrcurveto + 0 -100 80 -81 100 1 rrcurveto + 99 81 80 100 hvcurveto + closepath + endchar + } |- +/divide { + 10 549 hsbw + 71 112 236 55 344 112 hstem3 + 202 112 vstem + 236 vmoveto + dotsection + 526 hlineto + 55 vlineto + -526 hlineto + closepath + dotsection + 202 109 rmoveto + 46 callsubr + -273 vmoveto + 46 callsubr + endchar + } |- +/notequal { + 15 549 hsbw + 221 64 vstem + 136 55 hstem + 330 55 hstem + 387 549 rmoveto + -91 -164 rlineto + -296 hlineto + -55 vlineto + 265 hlineto + -77 -139 rlineto + -188 hlineto + -55 vlineto + 157 hlineto + -74 -133 rlineto + 49 -28 rlineto + 90 161 rlineto + 303 hlineto + 55 vlineto + -273 hlineto + 78 139 rlineto + 195 hlineto + 55 vlineto + -165 hlineto + 76 136 rlineto + closepath + endchar + } |- +/equivalence { + 14 549 hsbw + 82 55 235 55 388 55 hstem3 + 388 vmoveto + 60 callsubr + -208 vmoveto + 60 callsubr + -208 vmoveto + 60 callsubr + endchar + } |- +/approxequal { + 14 549 hsbw + 451 61 vstem + 2 63 vstem + 168 49 hstem + 319 49 hstem + 476 394 rmoveto + 54 callsubr + -37 -127 rmoveto + 54 callsubr + endchar + } |- +/ellipsis { + 111 1000 hsbw + 666 112 333 112 0 112 vstem3 + -17 112 hstem + 56 -17 rmoveto + 52 callsubr + 333 hmoveto + 52 callsubr + 333 hmoveto + 52 callsubr + endchar + } |- +/arrowvertex { + 280 603 hsbw + 56 -56 vstem + 1010 vmoveto + -1130 vlineto + 56 hlineto + 1130 vlineto + closepath + endchar + } |- +/arrowhorizex { + -60 1000 hsbw + 276 -56 hstem + 220 vmoveto + 1110 hlineto + 56 vlineto + -1110 hlineto + closepath + endchar + } |- +/carriagereturn { + 15 658 hsbw + 0 587 vstem + 68 55 hstem + 532 55 vstem + 532 629 rmoveto + -506 vlineto + -366 hlineto + 84 vlineto + -166 -111 rlineto + 166 -112 rlineto + 84 vlineto + 421 hlineto + 561 vlineto + closepath + endchar + } |- +/aleph { + 175 823 hsbw + -1 118 vstem + 604 -134 hstem + 273 212 vstem + 38 -38 hstem + 113 562 rmoveto + -22 27 -14 25 -12 37 rrcurveto + -13 -11 -27 -15 -14 -36 rrcurveto + -11 -28 2 -42 18 -21 rrcurveto + 90 -108 rlineto + -44 -44 -21 -18 -16 -27 rrcurveto + -20 -34 -6 -15 -3 -32 rrcurveto + -4 -46 39 -49 20 -47 rrcurveto + 6 -14 -1 -20 -30 -4 rrcurveto + -26 -3 rlineto + -37 vlineto + 175 hlineto + 11 53 rlineto + 7 33 -28 41 -9 14 rrcurveto + -53 83 rlineto + -24 37 13 46 11 13 rrcurveto + 32 37 rlineto + 193 -225 rlineto + 39 -45 48 -59 12 -46 rrcurveto + 16 14 19 11 13 49 rrcurveto + 6 24 -5 20 -5 12 rrcurveto + -12 31 -18 18 -19 23 rrcurveto + -50 61 rlineto + -30 37 15 53 6 15 rrcurveto + 24 64 18 18 6 8 rrcurveto + 29 40 24 -18 15 -5 rrcurveto + 3 85 rlineto + -5 35 -23 23 -33 1 rrcurveto + -55 2 rlineto + -55 2 13 39 1 14 rrcurveto + -28 -15 -10 4 -10 -38 rrcurveto + -9 -35 -2 -37 8 -24 rrcurveto + 18 -54 54 10 30 0 rrcurveto + -47 -69 -6 -18 -23 -62 rrcurveto + closepath + endchar + } |- +/Ifraktur { + 10 686 hsbw + -53 83 hstem + 64 72 hstem + 352 23 hstem + 652 88 hstem + 49 37 vstem + 366 72 vstem + 493 75 vstem + 555 654 rmoveto + -53 30 -35 15 -64 20 rrcurveto + -38 12 -39 9 -35 0 rrcurveto + -26 0 -50 -3 -42 -19 rrcurveto + -41 -18 -32 -25 -18 -29 rrcurveto + -20 -31 -21 -38 8 -65 rrcurveto + 8 -59 23 -31 28 -23 rrcurveto + 53 -44 51 2 33 -5 rrcurveto + 2 23 rlineto + -68 13 -14 3 -36 34 rrcurveto + -31 29 -12 35 0 33 rrcurveto + 0 30 7 29 27 25 rrcurveto + 43 40 56 14 75 -12 rrcurveto + 48 -8 87 -36 31 -15 rrcurveto + -71 -85 rlineto + -36 -43 10 -61 26 -47 rrcurveto + 87 -157 rlineto + 5 -9 20 -48 -11 -39 rrcurveto + -13 -46 -44 -14 -27 -7 rrcurveto + -31 -8 -21 6 -28 15 rrcurveto + -140 75 rlineto + -29 15 -19 11 -51 -31 rrcurveto + -87 -53 rlineto + 16 -19 rlineto + 52 24 11 5 49 -27 rrcurveto + 157 -86 rlineto + 47 -26 20 18 24 14 rrcurveto + 17 10 107 64 38 50 rrcurveto + 36 47 1 66 -19 37 rrcurveto + -38 74 -43 72 -33 76 rrcurveto + -7 16 -3 36 28 32 rrcurveto + closepath + endchar + } |- +/Rfraktur { + 26 795 hsbw + 6 -21 hstem + 73 11 hstem + 676 58 hstem + 0 35 vstem + 180 49 vstem + 316 92 vstem + 728 584 rmoveto + -161 140 rlineto + -21 19 -20 -15 -14 -10 rrcurveto + -131 -95 rlineto + -26 41 -5 24 -48 25 rrcurveto + -87 46 -107 -41 -34 -24 rrcurveto + -52 -38 -26 -82 4 -56 rrcurveto + 2 -31 13 -40 36 -30 rrcurveto + 29 -24 37 -12 37 -21 rrcurveto + 48 -28 -32 -20 -9 -11 rrcurveto + 23 -16 rlineto + 36 52 rlineto + 15 21 1 42 -55 28 rrcurveto + -95 49 rlineto + -20 10 -14 19 -9 18 rrcurveto + -22 47 26 44 20 22 rrcurveto + 49 53 97 -3 45 -47 rrcurveto + 42 -44 3 -54 6 -41 rrcurveto + 10 -70 -1 -119 -8 -74 rrcurveto + -10 -101 -41 -57 -11 -16 rrcurveto + -78 55 rlineto + -19 14 -9 -15 -28 -24 rrcurveto + -70 -61 rlineto + 19 -15 rlineto + 17 12 17 8 16 -1 rrcurveto + 19 -1 12 -10 14 -11 rrcurveto + 38 -30 rlineto + 24 11 87 67 46 61 rrcurveto + 55 72 -3 53 3 43 rrcurveto + 4 65 0 110 -20 128 rrcurveto + 63 41 rlineto + 29 19 28 -1 34 -31 rrcurveto + 81 -75 rlineto + -193 -134 rlineto + 11 -20 rlineto + 31 1 14 -10 13 -36 rrcurveto + 10 -29 10 -44 10 -93 rrcurveto + 4 -35 3 -38 13 -40 rrcurveto + 18 -56 28 -17 24 -12 rrcurveto + 110 88 rlineto + -15 23 rlineto + -21 -8 -38 -22 -10 51 rrcurveto + -11 73 -18 106 -19 58 rrcurveto + -14 40 -19 33 -22 28 rrcurveto + closepath + endchar + } |- +/weierstrass { + 159 987 hsbw + 206 -84 hstem + 289 38 vstem + 169 76 vstem + -1 38 vstem + -176 -34 hstem + 26 -38 hstem + 607 104 vstem + 502 -50 hstem + 314 573 rmoveto + -45 -28 -70 -40 -56 -66 rrcurveto + -24 -28 -37 -46 -19 -76 rrcurveto + -20 -82 29 -40 17 -43 rrcurveto + -26 -46 -36 -43 -18 -49 rrcurveto + -9 -25 -5 -52 10 -32 rrcurveto + 14 -47 34 -39 71 -2 rrcurveto + 55 -1 43 56 11 24 rrcurveto + 29 62 -21 101 -15 34 rrcurveto + -50 115 rlineto + 84 102 106 122 126 47 rrcurveto + 18 7 46 13 26 -26 rrcurveto + 29 -29 -4 -65 -2 -25 rrcurveto + -5 -56 -30 -89 -47 -67 rrcurveto + -19 -27 -26 -29 -27 -16 rrcurveto + -45 -27 -32 6 -22 12 rrcurveto + -31 17 3 27 5 21 rrcurveto + 5 23 12 -5 12 4 rrcurveto + 17 6 24 2 1 39 rrcurveto + 1 23 -19 16 -26 -1 rrcurveto + -50 -3 -9 -39 -6 -30 rrcurveto + -6 -33 2 -26 19 -34 rrcurveto + 14 -25 11 -11 43 -12 rrcurveto + 24 -7 47 2 43 16 rrcurveto + 67 25 51 70 14 17 rrcurveto + 57 71 27 88 5 32 rrcurveto + 6 38 -4 58 -28 44 rrcurveto + -28 43 -47 10 -33 2 rrcurveto + -52 3 -97 -39 -67 -51 rrcurveto + -74 -56 -74 -96 -48 -52 rrcurveto + -14 79 rlineto + -13 70 64 89 14 17 rrcurveto + 32 39 14 6 63 47 rrcurveto + closepath + -219 -463 rmoveto + 36 -73 rlineto + 27 -55 7 -52 -2 -19 rrcurveto + -1 -11 3 -20 -22 -24 rrcurveto + -11 -12 -36 -24 -35 38 rrcurveto + -21 22 -12 31 1 33 rrcurveto + 1 35 15 48 30 50 rrcurveto + closepath + endchar + } |- +/circlemultiply { + 43 768 hsbw + 637 53 vstem + 0 53 vstem + -17 53 hstem + 620 53 hstem + 150 484 rmoveto + 156 -156 rlineto + -156 -156 rlineto + 39 -39 rlineto + 156 157 rlineto + 156 -156 rlineto + 39 38 rlineto + -156 156 rlineto + 156 156 rlineto + -39 38 rlineto + -156 -156 rlineto + -156 157 rlineto + closepath + -189 -195 rmoveto + 47 callsubr + 53 hmoveto + 56 callsubr + endchar + } |- +/circleplus { + 43 768 hsbw + 636 53 vstem + 0 53 vstem + -15 53 hstem + 622 53 hstem + 318 54 vstem + 303 54 hstem + 318 577 rmoveto + -220 vlineto + -221 hlineto + -54 vlineto + 221 hlineto + -223 vlineto + 54 hlineto + 223 vlineto + 223 hlineto + 54 vlineto + -223 hlineto + 220 vlineto + closepath + -319 -247 rmoveto + 56 callsubr + -53 hmoveto + 47 callsubr + endchar + } |- +/emptyset { + 39 823 hsbw + 687 55 vstem + 8 55 vstem + -17 55 hstem + 662 55 hstem + 611 554 rmoveto + 47 -54 29 -71 0 -79 rrcurveto + -172 -140 -140 -172 vhcurveto + -79 0 -71 29 -52 45 rrcurveto + closepath + -37 38 rmoveto + -46 55 -27 69 0 76 rrcurveto + 172 140 140 172 vhcurveto + 76 0 69 -27 55 -46 rrcurveto + closepath + 130 130 rmoveto + -90 -91 rlineto + -64 55 -84 34 -92 0 rrcurveto + -203 -164 -164 -203 hvcurveto + 0 -91 33 -84 56 -64 rrcurveto + -97 -98 rlineto + 37 -37 rlineto + 97 98 rlineto + 63 -56 85 -35 93 0 rrcurveto + 203 164 164 203 hvcurveto + 0 93 -34 85 -58 65 rrcurveto + 91 91 rlineto + closepath + endchar + } |- +/intersection { + 40 768 hsbw + 0 18 hstem + 637 55 vstem + 0 55 vstem + 454 55 hstem + 692 hmoveto + 180 vlineto + 173 -155 156 -191 vhcurveto + -191 -155 -156 -173 hvcurveto + -180 vlineto + 55 hlineto + 190 vlineto + 148 143 116 148 vhcurveto + 148 143 -116 -148 hvcurveto + -190 vlineto + closepath + endchar + } |- +/union { + 40 768 hsbw + -17 55 hstem + 637 55 vstem + 0 55 vstem + 637 492 rmoveto + -190 vlineto + -148 -143 -116 -148 vhcurveto + -148 -143 116 148 hvcurveto + 190 vlineto + -55 hlineto + -180 vlineto + -173 155 -156 191 vhcurveto + 191 155 156 173 hvcurveto + 180 vlineto + closepath + endchar + } |- +/propersuperset { + 20 713 hsbw + 596 57 vstem + 0 55 hstem + 415 55 hstem + 0 hmoveto + 414 hlineto + 156 83 130 109 hvcurveto + 133 -114 98 -121 vhcurveto + -418 hlineto + -55 vlineto + 415 hlineto + 124 -2 60 -98 -2 -81 rrcurveto + -2 -108 -84 -71 -98 0 rrcurveto + -413 hlineto + closepath + endchar + } |- +/reflexsuperset { + 20 713 hsbw + -70 -54 hstem + 56 -56 hstem + 596 56 vstem + 470 -54 hstem + 415 vmoveto + 413 hlineto + 121 63 -71 -109 hvcurveto + -109 -63 -71 -121 vhcurveto + -413 hlineto + -55 vlineto + 414 hlineto + 162 77 126 109 hvcurveto + 109 -77 126 -162 vhcurveto + -414 hlineto + closepath + -595 vmoveto + 637 hlineto + 55 vlineto + -637 hlineto + closepath + endchar + } |- +/notsubset { + 36 713 hsbw + 363 60 vstem + 0 57 vstem + 0 55 hstem + 414 55 hstem + 519 540 rmoveto + -36 -71 rlineto + -256 hlineto + -87 -140 -85 -151 hvcurveto + 0 -84 43 -56 29 -28 rrcurveto + 58 -56 31 -1 78 -9 rrcurveto + -36 -69 rlineto + 60 hlineto + 36 70 rlineto + 355 hlineto + 55 vlineto + -326 hlineto + 186 359 rlineto + 140 hlineto + 55 vlineto + -112 hlineto + 37 71 rlineto + closepath + -125 -126 rmoveto + -187 -360 rlineto + -118 -16 -105 95 13 118 rrcurveto + 8 73 61 90 106 0 rrcurveto + closepath + endchar + } |- +/propersubset { + 37 713 hsbw + 0 57 vstem + 0 55 hstem + 415 55 hstem + 653 470 rmoveto + -414 hlineto + -156 -83 -130 -109 hvcurveto + -133 114 -98 121 vhcurveto + 418 hlineto + 55 vlineto + -415 hlineto + -124 2 -60 98 2 81 rrcurveto + 2 108 84 71 98 0 rrcurveto + 413 hlineto + closepath + endchar + } |- +/reflexsubset { + 37 713 hsbw + -1 56 vstem + -70 -54 hstem + 56 -56 hstem + 470 -54 hstem + 653 470 rmoveto + -414 hlineto + -162 -77 -126 -109 hvcurveto + -109 77 -126 162 vhcurveto + 414 hlineto + 55 vlineto + -413 hlineto + -121 -63 71 109 hvcurveto + 109 63 71 121 vhcurveto + 413 hlineto + closepath + -633 -485 rmoveto + -55 vlineto + 633 hlineto + 55 vlineto + closepath + endchar + } |- +/element { + 45 713 hsbw + 57 -55 vstem + 54 -54 261 -54 468 -54 hstem3 + 460 261 rmoveto + -404 hlineto + 9 45 16 35 29 27 rrcurveto + 35 33 36 13 42 0 rrcurveto + 237 hlineto + 54 vlineto + -237 hlineto + -99 0 -60 -66 -28 -40 rrcurveto + -24 -33 -12 -45 0 -50 rrcurveto + 0 -50 12 -45 24 -33 rrcurveto + 28 -40 60 -66 99 0 rrcurveto + 237 hlineto + 54 vlineto + -237 hlineto + -42 0 -36 13 -35 33 rrcurveto + -29 27 -16 35 -9 45 rrcurveto + 404 hlineto + closepath + endchar + } |- +/notelement { + 45 713 hsbw + 55 -53 vstem + 54 -54 261 -54 468 -54 hstem3 + 460 261 rmoveto + -186 hlineto + 87 153 rlineto + 99 hlineto + 54 vlineto + -68 hlineto + 35 62 rlineto + -46 25 rlineto + -49 -87 rlineto + -116 hlineto + -45 0 -95 -30 -54 -105 rrcurveto + -29 -56 0 -79 27 -60 rrcurveto + 13 -29 26 -32 34 -32 rrcurveto + -44 -78 rlineto + 44 -25 rlineto + 45 77 rlineto + 15 -11 30 -8 22 0 rrcurveto + 255 hlineto + 54 vlineto + -245 hlineto + -12 0 -24 2 -15 10 rrcurveto + 80 141 rlineto + 216 hlineto + closepath + -157 209 rmoveto + -89 -155 rlineto + -159 hlineto + 2 38 22 38 28 28 rrcurveto + 29 28 37 23 37 0 rrcurveto + closepath + -89 -322 rmoveto + -38 31 -18 36 -8 46 rrcurveto + 128 hlineto + closepath + endchar + } |- +/angle { + 26 768 hsbw + 331 79 vstem + 0 55 hstem + 671 673 rmoveto + -671 -673 rlineto + 678 hlineto + 55 vlineto + -544 hlineto + 578 581 rlineto + closepath + endchar + } |- +/gradient { + 36 713 hsbw + 457 47 vstem + 667 51 hstem + 645 718 rmoveto + -645 hlineto + 301 -737 rlineto + closepath + 40 181 rmoveto + -208 505 rlineto + 439 hlineto + closepath + endchar + } |- +/registerserif { + 50 790 hsbw + -17 40 hstem + 155 18 hstem + 332 23 hstem + 517 18 hstem + 633 40 hstem + 0 40 vstem + 229 64 vstem + 424 68 vstem + 650 40 vstem + 690 328 rmoveto + 49 callsubr + -357 4 rmoveto + 26 hlineto + 133 -177 rlineto + 95 hlineto + 18 vlineto + -13 0 -12 0 -11 14 rrcurveto + -120 154 rlineto + 34 1 25 18 11 9 rrcurveto + 22 19 24 51 -26 46 rrcurveto + -12 21 -24 13 -16 6 rrcurveto + -23 9 -28 1 -26 0 rrcurveto + -167 hlineto + -18 vlineto + 40 4 -1 -29 hvcurveto + -288 vlineto + -19 -26 -7 -23 vhcurveto + -18 vlineto + 160 hlineto + 18 vlineto + -22 -25 5 24 hvcurveto + closepath + 287 vmoveto + 17 10 5 10 vhcurveto + 53 hlineto + 16 0 37 -12 5 -53 rrcurveto + 5 -40 -19 -29 -45 -14 rrcurveto + -26 -9 -25 2 -21 -1 rrcurveto + closepath + endchar + } |- +/copyrightserif { + 51 790 hsbw + 650 40 vstem + 476 21 vstem + 160 63 vstem + 0 40 vstem + -15 40 hstem + 129 38 hstem + 492 28 hstem + 635 40 hstem + 474 518 rmoveto + -3 -14 -15 -5 -18 4 rrcurveto + -39 9 -77 34 -86 -62 rrcurveto + -121 -87 23 -221 149 -39 rrcurveto + 125 -33 59 69 28 29 rrcurveto + -11 18 rlineto + -12 -10 rlineto + -45 -37 -29 -9 -62 3 rrcurveto + -121 5 -31 181 75 94 rrcurveto + 35 45 56 14 55 -23 rrcurveto + 43 -19 21 -50 4 -24 rrcurveto + 20 hlineto + -4 128 rlineto + closepath + -493 -188 rmoveto + 55 callsubr + } |- +/trademarkserif { + 18 890 hsbw + 0 18 vstem + 305 18 vstem + 575 20 vstem + 728 59 vstem + 405 27 vstem + 132 59 vstem + 293 18 hstem + 655 18 hstem + 3 673 rmoveto + -3 -97 rlineto + 18 -1 rlineto + -2 44 23 29 56 2 rrcurveto + 37 1 rlineto + -312 vlineto + -23 -20 -5 -31 vhcurveto + -18 vlineto + 160 hlineto + 18 vlineto + -31 -19 5 23 hvcurveto + 312 vlineto + 37 -1 rlineto + 56 -2 23 -29 -2 -44 rrcurveto + 18 1 rlineto + -3 97 rlineto + closepath + 32 hmoveto + -18 vlineto + 32 21 3 -38 hvcurveto + -281 vlineto + -23 -20 -5 -31 vhcurveto + -18 vlineto + 129 hlineto + 18 vlineto + -31 -20 5 23 hvcurveto + 261 vlineto + 144 -307 rlineto + 18 hlineto + 134 323 rlineto + -277 vlineto + -23 -20 -5 -31 vhcurveto + -18 vlineto + 160 hlineto + 18 vlineto + -31 -19 5 23 hvcurveto + 291 vlineto + 27 28 -2 21 vhcurveto + 18 vlineto + -112 hlineto + -126 -288 rlineto + -132 288 rlineto + closepath + endchar + } |- +/product { + 25 823 hsbw + 43 callsubr + 568 113 vstem + 681 629 rmoveto + 93 66 6 28 vhcurveto + 42 1 3 callothersubr + pop + callsubr + 23 vlineto + -773 hlineto + 43 1 3 callothersubr + pop + callsubr + -23 vlineto + 28 67 -6 -93 hvcurveto + -626 vlineto + -70 -37 -11 -60 vhcurveto + -23 vlineto + 307 hlineto + 23 vlineto + -59 -38 11 70 hvcurveto + 44 1 3 callothersubr + pop + callsubr + 693 vlineto + 358 hlineto + -693 vlineto + -70 -38 -11 -58 vhcurveto + -23 vlineto + 306 hlineto + 23 vlineto + -59 -38 11 70 hvcurveto + closepath + endchar + } |- +/radical { + 10 549 hsbw + -36 18 hstem + 382 37 vstem + 160 63 vstem + 16 417 rmoveto + 96 47 rlineto + 243 -502 rlineto + 150 950 rlineto + -35 5 rlineto + -127 -798 rlineto + -197 403 rlineto + -146 -72 rlineto + closepath + endchar + } |- +/dotmath { + 69 250 hsbw + 0 100 vstem + 210 100 hstem + 100 260 rmoveto + 27 -23 23 -27 vhcurveto + -28 -22 -23 -27 hvcurveto + -28 22 -22 28 vhcurveto + 27 23 22 28 hvcurveto + closepath + endchar + } |- +/logicalnot { + 15 713 hsbw + 610 55 vstem + 233 55 hstem + 233 vmoveto + 610 hlineto + -233 vlineto + 55 hlineto + 288 vlineto + -665 hlineto + closepath + endchar + } |- +/logicaland { + 23 603 hsbw + 221 118 vstem + 348 104 hstem + 560 hmoveto + -280 454 rlineto + -280 -454 rlineto + 65 hlineto + 215 350 rlineto + 215 -350 rlineto + closepath + endchar + } |- +/logicalor { + 30 603 hsbw + 218 112 vstem + 3 102 hstem + 448 vmoveto + 274 -448 rlineto + 274 448 rlineto + -44 29 rlineto + -230 -375 rlineto + -230 375 rlineto + closepath + endchar + } |- +/arrowdblboth { + 27 1042 hsbw + 910 85 vstem + 1 86 vstem + 109 50 hstem + 331 50 hstem + 214 381 rmoveto + 76 95 rlineto + -40 34 rlineto + -98 -117 -36 -42 -116 -106 rrcurveto + 116 -106 36 -42 98 -117 rrcurveto + 40 34 rlineto + -76 95 rlineto + 568 hlineto + -76 -95 rlineto + 40 -34 rlineto + 98 117 36 42 116 106 rrcurveto + -116 106 -36 42 -98 117 rrcurveto + -40 -34 rlineto + 76 -95 rlineto + closepath + -612 -222 rmoveto + -84 86 rlineto + 84 86 rlineto + 657 hlineto + 84 -86 rlineto + -84 -86 rlineto + closepath + endchar + } |- +/arrowdblleft { + 30 987 hsbw + 1 84 vstem + 116 53 hstem + 329 53 hstem + 909 382 rmoveto + -696 hlineto + 77 98 rlineto + -41 33 rlineto + -90 -111 -41 -42 -118 -111 rrcurveto + 118 -111 41 -42 90 -111 rrcurveto + 41 33 rlineto + -77 98 rlineto + 696 hlineto + 53 vlineto + -744 hlineto + -81 80 rlineto + 81 80 rlineto + 744 hlineto + closepath + endchar + } |- +/arrowdblup { + 39 603 hsbw + 344 53 vstem + 131 53 vstem + 826 84 hstem + 33 621 rmoveto + 98 77 rlineto + -696 vlineto + 53 hlineto + 744 vlineto + 80 81 rlineto + 80 -81 rlineto + -744 vlineto + 53 hlineto + 696 vlineto + 98 -77 rlineto + 33 41 rlineto + -111 90 -42 41 -111 118 rrcurveto + -111 -118 -42 -41 -111 -90 rrcurveto + closepath + endchar + } |- +/arrowdblright { + 45 987 hsbw + 825 84 vstem + 111 53 hstem + 324 53 hstem + 660 -20 rmoveto + 90 111 41 42 118 111 rrcurveto + -118 111 -41 42 -90 111 rrcurveto + -41 -33 rlineto + 77 -98 rlineto + -696 hlineto + -53 vlineto + 744 hlineto + 81 -80 rlineto + -81 -80 rlineto + -744 hlineto + -53 vlineto + 696 hlineto + -77 -98 rlineto + closepath + endchar + } |- +/arrowdbldown { + 44 603 hsbw + 344 53 vstem + 131 53 vstem + -17 84 hstem + 495 271 rmoveto + -98 -77 rlineto + 696 vlineto + -53 hlineto + -744 vlineto + -80 -81 rlineto + -80 81 rlineto + 744 vlineto + -53 hlineto + -696 vlineto + -98 77 rlineto + -33 -41 rlineto + 111 -90 42 -41 111 -118 rrcurveto + 111 118 42 41 111 90 rrcurveto + closepath + endchar + } |- +/lozenge { + 18 494 hsbw + 0 58 hstem + 387 60 vstem + 2 60 vstem + 691 54 hstem + 254 hmoveto + 194 377 rlineto + -194 368 rlineto + -60 hlineto + -194 -368 rlineto + 194 -377 rlineto + closepath + 194 377 rmoveto + -164 -323 rlineto + -164 323 rlineto + 164 314 rlineto + closepath + endchar + } |- +/angleleft { + 25 329 hsbw + 251 46 hstem + 0 63 vstem + 281 721 rmoveto + -51 25 rlineto + -230 -472 rlineto + 230 -472 rlineto + 51 25 rlineto + -218 447 rlineto + closepath + endchar + } |- +/registersans { + 50 790 hsbw + 650 40 vstem + 455 52 vstem + 216 49 vstem + 0 40 vstem + 308 43 hstem + 482 43 hstem + -20 40 hstem + 630 40 hstem + 690 325 rmoveto + 49 callsubr + -434 -180 rmoveto + 49 hlineto + 163 vlineto + 125 hlineto + 79 0 -22 -70 8 -45 rrcurveto + 8 -48 rlineto + 58 hlineto + -21 33 7 8 -4 50 rrcurveto + -6 66 -1 6 -39 25 rrcurveto + 37 28 15 18 -2 49 rrcurveto + -5 86 -57 11 -59 0 rrcurveto + -170 hlineto + closepath + 171 -43 rmoveto + 30 0 47 -8 -7 -65 rrcurveto + -5 -49 -32 -9 -33 0 rrcurveto + -122 hlineto + 131 vlineto + closepath + endchar + } |- +/copyrightsans { + 49 790 hsbw + 649 40 vstem + 457 50 vstem + 177 50 vstem + -1 40 vstem + 26 -40 hstem + 170 -44 hstem + 526 -42 hstem + 676 -40 hstem + 508 404 rmoveto + -5 26 -8 32 -35 30 rrcurveto + -54 45 -105 2 -58 -49 rrcurveto + -83 -70 0 -165 59 -72 rrcurveto + 69 -82 119 14 53 55 rrcurveto + 48 49 1 35 1 20 rrcurveto + -47 hlineto + -2 -28 -16 -26 -24 -22 rrcurveto + -43 -42 -76 8 -38 44 rrcurveto + -61 72 26 121 31 38 rrcurveto + 65 82 124 -45 8 -72 rrcurveto + closepath + -457 -74 rmoveto + 55 callsubr + } |- +/trademarksans { + 5 786 hsbw + 293 18 hstem + 671 49 vstem + 362 49 vstem + 125 49 vstem + 630 43 hstem + 174 293 rmoveto + 337 vlineto + 125 hlineto + 43 vlineto + -299 hlineto + -43 vlineto + 125 hlineto + -337 vlineto + closepath + 441 hmoveto + 105 309 rlineto + -309 vlineto + 49 hlineto + 380 vlineto + -71 hlineto + -108 -323 rlineto + -108 323 rlineto + -71 hlineto + -380 vlineto + 49 hlineto + 309 vlineto + 105 -309 rlineto + closepath + endchar + } |- +/summation { + 14 713 hsbw + 655 25 vstem + -97 100 hstem + 700 45 hstem + 603 745 rmoveto + -497 hlineto + -34 0 -36 5 -34 2 rrcurveto + 347 -454 rlineto + -349 -398 rlineto + 20 0 18 3 20 0 rrcurveto + 503 hlineto + 25 0 26 -7 26 -4 rrcurveto + 13 102 5 20 25 102 rrcurveto + -23 hlineto + -35 -89 -22 -24 -78 0 rrcurveto + -371 hlineto + 294 339 rlineto + -273 358 rlineto + 263 hlineto + 128 0 5 -49 20 -65 rrcurveto + 20 hlineto + closepath + endchar + } |- +/parenlefttp { + 40 384 hsbw + 924 -16 hstem + 0 52 vstem + 52 -293 rmoveto + 425 vlineto + 0 159 37 190 43 103 rrcurveto + 72 171 82 90 110 71 rrcurveto + -13 10 rlineto + -97 -50 -108 -62 -94 -210 rrcurveto + -57 -127 -27 -155 0 -193 rrcurveto + -422 vlineto + closepath + endchar + } |- +/parenleftex { + 40 384 hsbw + 52 -52 vstem + 925 vmoveto + -1010 vlineto + 52 hlineto + 1010 vlineto + closepath + endchar + } |- +/parenleftbt { + 40 384 hsbw + -274 -16 hstem + 0 52 vstem + 926 vmoveto + -422 vlineto + 0 -193 27 -155 57 -127 rrcurveto + 94 -210 108 -62 97 -50 rrcurveto + 13 10 rlineto + -110 71 -82 90 -72 171 rrcurveto + -43 103 -37 190 0 159 rrcurveto + 425 vlineto + closepath + endchar + } |- +/bracketlefttp { + 0 384 hsbw + 0 55 vstem + 871 55 hstem + 341 926 rmoveto + -341 hlineto + -1006 vlineto + 55 hlineto + 951 vlineto + 286 hlineto + closepath + endchar + } |- +/bracketleftex { + 0 384 hsbw + 55 -55 vstem + -79 vmoveto + 55 hlineto + 1004 vlineto + -55 hlineto + closepath + endchar + } |- +/bracketleftbt { + 0 384 hsbw + -80 55 hstem + 0 55 vstem + 926 vmoveto + -1006 vlineto + 340 hlineto + 55 vlineto + -285 hlineto + 951 vlineto + closepath + endchar + } |- +/bracelefttp { + 201 494 hsbw + 926 -24 hstem + 54 -54 vstem + 54 -75 rmoveto + 685 vlineto + 0 78 7 69 27 43 rrcurveto + 41 66 62 25 47 12 rrcurveto + 23 vlineto + -101 -17 -59 -30 -37 -60 rrcurveto + -38 -61 -3 -70 0 -78 rrcurveto + -685 vlineto + closepath + endchar + } |- +/braceleftmid { + 14 494 hsbw + 447 -39 hstem + 241 -54 vstem + 409 vmoveto + 57 -14 58 -29 35 -56 rrcurveto + 20 -31 17 -66 0 -46 rrcurveto + -252 vlineto + 54 hlineto + 238 vlineto + 0 111 -34 53 -25 28 rrcurveto + -43 48 -14 5 -91 29 rrcurveto + 91 29 14 5 43 48 rrcurveto + 25 28 34 53 0 111 rrcurveto + 234 vlineto + -54 hlineto + -248 vlineto + 0 -46 -17 -66 -20 -31 rrcurveto + -35 -56 -58 -29 -57 -14 rrcurveto + closepath + endchar + } |- +/braceleftbt { + 201 494 hsbw + -70 996 hstem + 0 54 vstem + 926 vmoveto + -680 vlineto + 0 -78 3 -70 38 -61 rrcurveto + 37 -60 59 -30 101 -17 rrcurveto + 23 vlineto + -47 12 -62 25 -41 66 rrcurveto + -27 43 -7 69 0 78 rrcurveto + 680 vlineto + closepath + endchar + } |- +/braceex { + 201 494 hsbw + 54 -54 vstem + -80 vmoveto + 54 hlineto + 1015 vlineto + -54 hlineto + closepath + endchar + } |- +/angleright { + 21 329 hsbw + 245 58 hstem + 218 63 vstem + 281 274 rmoveto + -230 472 rlineto + -51 -25 rlineto + 218 -447 rlineto + -218 -447 rlineto + 51 -25 rlineto + closepath + endchar + } |- +/integral { + 2 274 hsbw + -4 -102 hstem + 916 -98 hstem + 118 70 vstem + 188 488 rmoveto + 0 136 -21 157 2 37 rrcurveto + 1 18 16 16 23 -24 rrcurveto + 20 -22 37 12 14 17 rrcurveto + 20 24 -18 33 -15 10 rrcurveto + -15 10 -35 13 -28 -18 rrcurveto + -21 -13 -18 -32 -6 -20 rrcurveto + -21 -71 -5 -80 0 -159 rrcurveto + -144 vlineto + -1 -166 5 -74 2 -74 rrcurveto + 2 -60 -12 -74 -30 32 rrcurveto + -18 19 -16 13 -23 -12 rrcurveto + -24 -12 -8 -21 8 -22 rrcurveto + 4 -11 13 -20 16 -8 rrcurveto + 33 -16 47 26 8 10 rrcurveto + 8 10 10 13 11 38 rrcurveto + 13 46 20 90 1 157 rrcurveto + closepath + endchar + } |- +/integraltp { + 332 686 hsbw + 920 -152 hstem + 0 83 vstem + 83 -83 rmoveto + 358 vlineto + 0 87 -4 74 11 100 rrcurveto + 8 76 30 139 53 65 rrcurveto + 42 51 38 7 19 -9 rrcurveto + -8 -9 -36 -35 44 -39 rrcurveto + 36 -32 74 26 -7 70 rrcurveto + -5 46 -24 16 -22 7 rrcurveto + -33 11 -31 -1 -39 -24 rrcurveto + -22 -14 -69 -53 -50 -94 rrcurveto + -40 -75 -23 -86 -11 -71 rrcurveto + -10 -64 -4 -82 0 -88 rrcurveto + -357 vlineto + closepath + endchar + } |- +/integralex { + 332 686 hsbw + 83 -83 vstem + -88 vmoveto + 83 hlineto + 1063 vlineto + -83 hlineto + closepath + endchar + } |- +/integralbt { + 39 686 hsbw + 66 -144 hstem + 293 83 vstem + 293 921 rmoveto + -323 vlineto + 0 -114 0 -114 -5 -100 rrcurveto + -4 -74 -28 -100 -53 -73 rrcurveto + -45 -63 -42 10 -14 0 rrcurveto + 9 10 16 9 -6 32 rrcurveto + -5 27 -22 19 -29 -1 rrcurveto + -26 -1 -34 -13 -5 -40 rrcurveto + -3 -26 7 -30 23 -19 rrcurveto + 24 -19 46 -6 42 15 rrcurveto + 54 19 61 65 43 92 rrcurveto + 41 87 15 74 8 62 rrcurveto + 12 92 3 86 0 90 rrcurveto + 327 vlineto + closepath + endchar + } |- +/parenrighttp { + 54 384 hsbw + 926 -18 hstem + 344 52 vstem + 396 -293 rmoveto + 422 vlineto + 0 193 -27 155 -57 127 rrcurveto + -94 210 -108 62 -97 50 rrcurveto + -13 -10 rlineto + 110 -71 82 -90 72 -171 rrcurveto + 43 -103 37 -190 0 -159 rrcurveto + -425 vlineto + closepath + endchar + } |- +/parenrightex { + 398 384 hsbw + 52 -52 vstem + 925 vmoveto + -1010 vlineto + 52 hlineto + 1010 vlineto + closepath + endchar + } |- +/parenrightbt { + 54 384 hsbw + -274 -18 hstem + 344 52 vstem + 344 926 rmoveto + -425 vlineto + 0 -159 -37 -190 -43 -103 rrcurveto + -72 -171 -82 -90 -110 -71 rrcurveto + 13 -10 rlineto + 97 50 108 62 94 210 rrcurveto + 57 127 27 155 0 193 rrcurveto + 422 vlineto + closepath + endchar + } |- +/bracketrighttp { + 22 384 hsbw + 283 55 vstem + 871 55 hstem + 926 vmoveto + -55 vlineto + 283 hlineto + -951 vlineto + 55 hlineto + 1006 vlineto + closepath + endchar + } |- +/bracketrightex { + 305 384 hsbw + 55 -55 vstem + -79 vmoveto + 55 hlineto + 1004 vlineto + -55 hlineto + closepath + endchar + } |- +/bracketrightbt { + 20 384 hsbw + -80 55 hstem + 285 55 vstem + 285 926 rmoveto + -951 vlineto + -285 hlineto + -55 vlineto + 340 hlineto + 1006 vlineto + closepath + endchar + } |- +/bracerighttp { + 17 494 hsbw + 925 -22 hstem + 238 -54 vstem + 238 -75 rmoveto + 685 vlineto + 0 78 -3 70 -38 61 rrcurveto + -37 60 -59 30 -101 17 rrcurveto + -23 vlineto + 47 -12 62 -25 41 -66 rrcurveto + 27 -43 7 -69 0 -78 rrcurveto + -685 vlineto + closepath + endchar + } |- +/bracerightmid { + 201 494 hsbw + 446 -38 hstem + 54 -54 vstem + 241 445 rmoveto + -57 14 -58 29 -35 56 rrcurveto + -20 31 -17 66 0 46 rrcurveto + 248 vlineto + -54 hlineto + -234 vlineto + 0 -111 34 -53 25 -28 rrcurveto + 43 -48 14 -5 91 -29 rrcurveto + -91 -29 -14 -5 -43 -48 rrcurveto + -25 -28 -34 -53 0 -111 rrcurveto + -238 vlineto + 54 hlineto + 252 vlineto + 0 46 17 66 20 31 rrcurveto + 35 56 58 29 57 14 rrcurveto + closepath + endchar + } |- +/bracerightbt { + 17 494 hsbw + -69 23 hstem + 184 54 vstem + 184 926 rmoveto + -680 vlineto + 0 -78 -7 -69 -27 -43 rrcurveto + -41 -66 -62 -25 -47 -12 rrcurveto + -23 vlineto + 101 17 59 30 37 60 rrcurveto + 38 61 3 70 0 78 rrcurveto + 680 vlineto + closepath + endchar + } |- +/apple { + 56 790 hsbw + -1 564 vstem + -2 622 hstem + 353 30 rmoveto + 20 0 17 -5 32 -15 rrcurveto + 11 -5 28 -12 33 6 rrcurveto + 47 6 6 16 21 18 rrcurveto + 40 36 25 43 44 95 rrcurveto + -29 15 -16 0 -36 48 rrcurveto + -17 22 -15 41 -1 35 rrcurveto + -1 44 15 36 12 20 rrcurveto + 16 27 11 12 40 29 rrcurveto + -8 9 -14 17 -16 12 rrcurveto + -53 42 -84 3 -39 -10 rrcurveto + -30 -8 -22 -19 -37 0 rrcurveto + -36 0 -22 19 -31 8 rrcurveto + -38 10 -84 -3 -53 -42 rrcurveto + -35 -27 -35 -47 -16 -86 rrcurveto + -13 -69 27 -110 24 -52 rrcurveto + 33 -71 25 -43 51 -46 rrcurveto + 12 -11 17 -13 34 -6 rrcurveto + 33 -6 28 12 10 5 rrcurveto + 33 15 17 5 19 0 rrcurveto + closepath + 157 778 rmoveto + -23 -4 -27 -12 -16 -8 rrcurveto + -12 -6 -22 -17 -20 -25 rrcurveto + -16 -20 -11 -29 -8 -20 rrcurveto + -7 -17 0 -16 2 -18 rrcurveto + 21 2 25 1 10 6 rrcurveto + 18 11 30 22 20 20 rrcurveto + 18 18 12 28 4 22 rrcurveto + 4 19 -2 23 0 20 rrcurveto + closepath + endchar + } |- +/.notdef { + 0 250 hsbw + endchar + } |- +end +end +readonly put +noaccess put +dup/FontName get exch definefont pop +mark currentfile closefile +cleartomark diff --git a/Build/source/utils/t1utils/version.ac b/Build/source/utils/t1utils/version.ac new file mode 100644 index 00000000000..d2f4e144ea2 --- /dev/null +++ b/Build/source/utils/t1utils/version.ac @@ -0,0 +1,11 @@ +dnl +dnl Copyright (C) 2011-2015 Peter Breitenlohner +dnl +dnl This file is free software; the copyright holder +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl -------------------------------------------------------- +dnl +dnl m4-include this file to define the current t1utils version +m4_define([t1utils_version], [1.42]) -- cgit v1.2.3